From 759e2663ece99b7585a17e92c3764a86eab33c6f Mon Sep 17 00:00:00 2001 From: WanderMotta Date: Sat, 13 Jun 2026 17:32:41 -0300 Subject: [PATCH] Commit inicial - upload de todos os arquivos da pasta --- .env | 1 + .env.example | 1 + Deploy-Coolify.md | 214 + README.md | 74 + eslint.config.js | 37 + github.bat | 29 + index.html | 15 + package-lock.json | 5531 +++++++++++++++++ package.json | 55 + postcss.config.js | 6 + public/android-chrome-192x192.png | Bin 0 -> 11207 bytes public/android-chrome-512x512.png | Bin 0 -> 27912 bytes public/apple-touch-icon.png | Bin 0 -> 9999 bytes public/favicon-16x16.png | Bin 0 -> 721 bytes public/favicon-32x32.png | Bin 0 -> 1475 bytes public/favicon.ico | Bin 0 -> 15406 bytes public/favicon.svg | 1 + public/logo/logo-full.png | Bin 0 -> 19565 bytes public/logo/logo-icon.png | Bin 0 -> 45313 bytes public/site.webmanifest | 1 + public/staticwebapp.config.json | 6 + src/app/layouts/.gitkeep | 0 src/app/providers/.gitkeep | 0 src/app/providers/AppProviders.tsx | 22 + src/app/providers/AuthProvider.tsx | 62 + src/app/providers/QueryProvider.tsx | 15 + src/app/providers/SidebarProvider.tsx | 75 + src/app/providers/ThemeProvider.tsx | 42 + src/app/providers/index.ts | 2 + src/app/router/AppRouter.tsx | 4 + src/app/router/AuthGuard.tsx | 19 + src/app/router/GuestGuard.tsx | 14 + src/app/router/RoleGuard.tsx | 19 + src/app/router/RootLayout.tsx | 10 + src/app/router/__tests__/AuthGuard.test.tsx | 98 + src/app/router/__tests__/RoleGuard.test.tsx | 78 + src/app/router/index.ts | 1 + src/app/router/routes.tsx | 142 + src/assets/hero.png | Bin 0 -> 44919 bytes src/assets/react.svg | 1 + src/assets/vite.svg | 1 + src/components/layout/AppLayout.tsx | 25 + src/components/layout/AppSidebar.tsx | 75 + src/components/layout/AppTopbar.tsx | 99 + src/components/layout/FormCard.tsx | 17 + src/components/layout/NavItem.tsx | 28 + src/components/layout/PageContainer.tsx | 14 + src/components/layout/PageHeader.tsx | 26 + .../layout/__tests__/PageHeader.test.tsx | 63 + .../layout/__tests__/Sidebar.test.tsx | 184 + .../layout/__tests__/SidebarRoles.test.tsx | 102 + src/components/layout/index.ts | 7 + src/components/shared/.gitkeep | 0 .../shared/PasswordStrengthIndicator.tsx | 62 + src/components/shared/StatusBadge.tsx | 18 + src/components/shared/StatusHistoryList.tsx | 68 + .../shared/StatusTransitionModal.tsx | 231 + .../shared/__tests__/StatusBadge.test.tsx | 26 + .../__tests__/StatusHistoryList.test.tsx | 81 + .../__tests__/StatusTransitionModal.test.tsx | 154 + src/components/ui/.gitkeep | 0 src/components/ui/Badge.tsx | 47 + src/components/ui/Breadcrumbs.tsx | 41 + src/components/ui/Button.tsx | 59 + src/components/ui/ConfirmDialog.tsx | 71 + src/components/ui/CpfCnpjInput.tsx | 77 + src/components/ui/CpfInput.tsx | 61 + src/components/ui/CurrencyInput.tsx | 67 + src/components/ui/DataTable.tsx | 76 + src/components/ui/DatePicker.tsx | 138 + src/components/ui/DatePickerField.tsx | 38 + src/components/ui/DateRangePicker.tsx | 288 + src/components/ui/DetailField.tsx | 15 + src/components/ui/Drawer.tsx | 57 + src/components/ui/Input.tsx | 32 + src/components/ui/Pagination.tsx | 53 + src/components/ui/PhoneInput.tsx | 41 + src/components/ui/SearchInput.tsx | 50 + src/components/ui/Select.tsx | 40 + src/components/ui/Tabs.tsx | 68 + src/components/ui/ThemeSwitcher.tsx | 21 + src/components/ui/Toast.tsx | 75 + src/components/ui/Tooltip.tsx | 38 + src/components/ui/__tests__/Badge.test.tsx | 34 + .../ui/__tests__/Breadcrumbs.test.tsx | 69 + .../ui/__tests__/DataTable.test.tsx | 64 + src/components/ui/__tests__/Input.test.tsx | 36 + .../ui/__tests__/Pagination.test.tsx | 108 + .../ui/__tests__/SearchInput.test.tsx | 44 + src/components/ui/__tests__/Select.test.tsx | 33 + src/components/ui/__tests__/Tabs.test.tsx | 103 + .../ui/__tests__/ThemeSwitcher.test.tsx | 42 + src/components/ui/__tests__/Tooltip.test.tsx | 34 + src/components/ui/index.ts | 22 + src/constants/.gitkeep | 0 src/constants/__tests__/breadcrumbs.test.ts | 63 + src/constants/breadcrumbs.ts | 143 + src/constants/contract-item-type.ts | 28 + src/constants/deliverable-status.ts | 45 + src/constants/deliverable-type.ts | 23 + src/constants/field-visibility.ts | 70 + src/constants/navigation.ts | 29 + src/constants/permissions.ts | 21 + src/constants/professional-roles.ts | 20 + src/constants/sprint.ts | 39 + src/constants/work-order-status.ts | 65 + src/hooks/.gitkeep | 0 src/hooks/__tests__/useBreadcrumbs.test.ts | 107 + .../useDeliverableNumWeeksPreview.test.ts | 53 + .../__tests__/useFieldVisibility.test.ts | 150 + src/hooks/__tests__/usePermission.test.ts | 120 + src/hooks/useAllocationTemplates.ts | 36 + src/hooks/useAssignments.ts | 59 + src/hooks/useBacklog.ts | 96 + src/hooks/useBreadcrumbs.ts | 40 + src/hooks/useClientProfiles.ts | 19 + src/hooks/useClients.ts | 18 + src/hooks/useContractItems.ts | 31 + src/hooks/useContracts.ts | 39 + src/hooks/useDashboard.ts | 40 + src/hooks/useDeliverableAllocations.ts | 95 + src/hooks/useDeliverableNumWeeksPreview.ts | 27 + src/hooks/useDeliverableValuePreview.ts | 115 + src/hooks/useDeliverables.ts | 92 + src/hooks/useFieldVisibility.ts | 12 + src/hooks/useNotes.ts | 48 + src/hooks/usePageTitle.ts | 10 + src/hooks/usePermission.ts | 19 + src/hooks/useProfessionals.ts | 18 + src/hooks/useProjects.ts | 26 + src/hooks/useReadOnly.ts | 9 + src/hooks/useSidebar.ts | 10 + src/hooks/useSprints.ts | 18 + src/hooks/useTheme.ts | 12 + src/hooks/useTimeline.ts | 11 + src/hooks/useUsers.ts | 18 + src/hooks/useWorkOrders.ts | 86 + src/lib/.gitkeep | 0 src/main.tsx | 11 + .../api-keys/__tests__/service.test.ts | 47 + src/modules/api-keys/index.ts | 4 + src/modules/api-keys/mutations.ts | 23 + src/modules/api-keys/queries.ts | 12 + src/modules/api-keys/service.ts | 22 + src/modules/api-keys/types.ts | 46 + src/modules/auth/.gitkeep | 0 src/modules/auth/AuthContext.tsx | 14 + .../auth/__tests__/AuthProvider.test.tsx | 134 + .../auth/__tests__/AuthTopbar.test.tsx | 101 + src/modules/auth/auth.service.ts | 32 + src/modules/auth/auth.storage.ts | 13 + src/modules/auth/index.ts | 5 + src/modules/auth/useAuth.ts | 13 + src/modules/navigation/.gitkeep | 0 src/modules/page-title/PageTitleContext.tsx | 26 + src/modules/sidebar/SidebarContext.tsx | 12 + .../__tests__/SidebarProvider.test.tsx | 112 + src/modules/theme/ThemeContext.tsx | 11 + .../theme/__tests__/ThemeProvider.test.tsx | 90 + .../detail-form-pages-breadcrumbs.test.tsx | 153 + .../listing-pages-breadcrumbs.test.tsx | 64 + .../admin/api-keys/ApiKeyCreatedDialog.tsx | 65 + src/pages/admin/api-keys/ApiKeyTable.tsx | 98 + src/pages/admin/api-keys/ApiKeysPage.tsx | 111 + .../admin/api-keys/CreateApiKeyModal.tsx | 189 + src/pages/admin/api-keys/index.ts | 1 + src/pages/auth/ChangePasswordPage.tsx | 160 + src/pages/auth/ForgotPasswordPage.tsx | 110 + src/pages/auth/LoginPage.tsx | 106 + src/pages/auth/ResetPasswordPage.tsx | 154 + .../__tests__/ChangePasswordPage.test.tsx | 145 + .../__tests__/ForgotPasswordPage.test.tsx | 89 + src/pages/auth/__tests__/LoginPage.test.tsx | 171 + .../auth/__tests__/ResetPasswordPage.test.tsx | 103 + src/pages/clients/.gitkeep | 0 .../clients/ClientContractCreatePage.tsx | 128 + .../clients/ClientContractItemCreatePage.tsx | 273 + .../clients/ClientContractItemEditPage.tsx | 328 + src/pages/clients/ClientCreatePage.tsx | 124 + src/pages/clients/ClientDetailDrawer.tsx | 40 + src/pages/clients/ClientDetailPage.tsx | 161 + src/pages/clients/ClientEditPage.tsx | 191 + src/pages/clients/ClientProjectCreatePage.tsx | 145 + src/pages/clients/ClientsPage.tsx | 246 + .../ClientContractItemCreatePage.test.tsx | 84 + .../ClientContractItemEditPage.test.tsx | 93 + .../ClientAllocationTemplatesTab.tsx | 525 ++ .../components/ClientContractItemsTab.tsx | 361 ++ .../clients/components/ClientContractsTab.tsx | 258 + .../clients/components/ClientProfilesTab.tsx | 302 + .../clients/components/ClientProjectsTab.tsx | 255 + .../__tests__/ClientContractItemsTab.test.tsx | 99 + src/pages/contracts/.gitkeep | 0 src/pages/contracts/ContractCreatePage.tsx | 153 + src/pages/contracts/ContractDetailDrawer.tsx | 47 + src/pages/contracts/ContractEditPage.tsx | 228 + src/pages/contracts/ContractsPage.tsx | 250 + src/pages/dashboard/.gitkeep | 0 src/pages/dashboard/DashboardPage.tsx | 429 ++ src/pages/entregaveis/.gitkeep | 0 src/pages/entregaveis/EntregaveisListPage.tsx | 361 ++ .../entregaveis/EntregavelCreatePage.tsx | 362 ++ .../entregaveis/EntregavelDetailPage.tsx | 292 + src/pages/entregaveis/EntregavelEditPage.tsx | 383 ++ .../EntregaveisListPage.visibility.test.tsx | 132 + .../__tests__/EntregavelCreatePage.test.tsx | 118 + .../__tests__/EntregavelDetailPage.test.tsx | 211 + .../components/AssignmentModal.tsx | 195 + .../components/BacklogItemModal.tsx | 162 + .../components/BacklogRejectModal.tsx | 134 + .../DeliverableValuePreviewBlock.tsx | 62 + .../components/EntregavelAllocationTab.tsx | 435 ++ .../components/EntregavelBacklogTab.tsx | 355 ++ .../components/EntregavelNotesTab.tsx | 244 + .../components/EntregavelSummaryTab.tsx | 150 + .../components/EntregavelTeamTab.tsx | 190 + .../components/EntregavelTimelineTab.tsx | 202 + .../components/EntregavelValuationCard.tsx | 187 + .../entregaveis/components/NoteModal.tsx | 187 + .../entregaveis/components/PlaceholderTab.tsx | 15 + .../EntregavelAllocationTab.test.tsx | 87 + .../__tests__/EntregavelSummaryTab.test.tsx | 114 + .../fiscal-contrato/FiscalContratoPage.tsx | 97 + .../__tests__/FiscalContratoPage.test.tsx | 84 + .../gestor-contrato/GestorContratoPage.tsx | 102 + .../__tests__/GestorContratoPage.test.tsx | 87 + .../ordens-servico/OrdemServicoCreatePage.tsx | 48 + .../ordens-servico/OrdemServicoDetailPage.tsx | 232 + .../ordens-servico/OrdemServicoEditPage.tsx | 83 + .../ordens-servico/OrdensServicoListPage.tsx | 274 + .../__tests__/OrdemServicoCreatePage.test.tsx | 93 + .../__tests__/OrdemServicoDetailPage.test.tsx | 152 + ...OrdemServicoDetailPage.visibility.test.tsx | 117 + .../__tests__/OrdensServicoListPage.test.tsx | 92 + .../components/CancelWorkOrderModal.tsx | 61 + .../OrdemServicoDeliverablesTab.tsx | 121 + .../components/OrdemServicoForm.tsx | 365 ++ .../OrdemServicoStatusHistoryTab.tsx | 49 + .../components/OrdemServicoSummaryTab.tsx | 104 + src/pages/po/PoPage.tsx | 97 + src/pages/po/__tests__/PoPage.test.tsx | 88 + src/pages/professionals/.gitkeep | 0 .../professionals/ProfessionalCreatePage.tsx | 113 + .../ProfessionalDetailDrawer.tsx | 43 + .../professionals/ProfessionalEditPage.tsx | 185 + src/pages/professionals/ProfessionalsPage.tsx | 248 + src/pages/projects/.gitkeep | 0 src/pages/projects/ProjectCreatePage.tsx | 138 + src/pages/projects/ProjectDetailDrawer.tsx | 42 + src/pages/projects/ProjectEditPage.tsx | 209 + src/pages/projects/ProjectsPage.tsx | 250 + src/pages/settings/.gitkeep | 0 src/pages/settings/SettingsPage.tsx | 12 + src/pages/sprints/.gitkeep | 0 src/pages/sprints/SprintCreatePage.tsx | 112 + src/pages/sprints/SprintDetailPage.tsx | 426 ++ src/pages/sprints/SprintEditPage.tsx | 191 + src/pages/sprints/SprintsPage.tsx | 191 + .../components/AddServiceOrderModal.tsx | 145 + .../sprints/components/FinishSprintModal.tsx | 176 + src/pages/users/.gitkeep | 0 src/pages/users/ResetPasswordModal.tsx | 140 + src/pages/users/UserCreatePage.tsx | 199 + src/pages/users/UserEditPage.tsx | 216 + src/pages/users/UsersPage.tsx | 278 + .../__tests__/ResetPasswordModal.spec.tsx | 113 + src/pages/users/__tests__/UsersPage.spec.tsx | 448 ++ src/services/allocation-templates.service.ts | 67 + src/services/api/.gitkeep | 0 src/services/assignments.service.ts | 29 + src/services/backlog.service.ts | 46 + src/services/client-profiles.service.ts | 54 + src/services/clients.service.ts | 36 + src/services/contract-items.service.ts | 61 + src/services/contracts.service.ts | 61 + src/services/dashboard.service.ts | 32 + .../deliverable-allocations.service.ts | 47 + src/services/deliverables.service.ts | 60 + src/services/http/api.ts | 24 + src/services/http/client.ts | 28 + src/services/http/index.ts | 2 + src/services/notes.service.ts | 25 + src/services/professionals.service.ts | 41 + src/services/projects.service.ts | 55 + src/services/sprints.service.ts | 77 + src/services/timeline.service.ts | 13 + src/services/users.service.ts | 46 + src/services/work-orders.service.ts | 53 + src/styles/globals.css | 54 + src/test/setup.ts | 1 + src/types/.gitkeep | 0 src/types/allocation-template.types.ts | 58 + src/types/auth.types.ts | 39 + src/types/client-profile.types.ts | 35 + src/types/client.types.ts | 39 + src/types/contract-item.types.ts | 71 + src/types/contract.types.ts | 44 + src/types/dashboard.types.ts | 51 + src/types/deliverable.types.ts | 291 + src/types/os-allocation.types.ts | 29 + src/types/professional.types.ts | 37 + src/types/project.types.ts | 46 + src/types/sprint.types.ts | 77 + src/types/user.types.ts | 47 + src/types/work-order.types.ts | 121 + src/utils/.gitkeep | 0 tailwind.config.ts | 51 + tsconfig.app.json | 29 + tsconfig.json | 7 + tsconfig.node.json | 26 + vite.config.ts | 14 + 311 files changed, 31868 insertions(+) create mode 100644 .env create mode 100644 .env.example create mode 100644 Deploy-Coolify.md create mode 100644 README.md create mode 100644 eslint.config.js create mode 100644 github.bat create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-512x512.png 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/favicon.ico create mode 100644 public/favicon.svg create mode 100644 public/logo/logo-full.png create mode 100644 public/logo/logo-icon.png create mode 100644 public/site.webmanifest create mode 100644 public/staticwebapp.config.json create mode 100644 src/app/layouts/.gitkeep create mode 100644 src/app/providers/.gitkeep create mode 100644 src/app/providers/AppProviders.tsx create mode 100644 src/app/providers/AuthProvider.tsx create mode 100644 src/app/providers/QueryProvider.tsx create mode 100644 src/app/providers/SidebarProvider.tsx create mode 100644 src/app/providers/ThemeProvider.tsx create mode 100644 src/app/providers/index.ts create mode 100644 src/app/router/AppRouter.tsx create mode 100644 src/app/router/AuthGuard.tsx create mode 100644 src/app/router/GuestGuard.tsx create mode 100644 src/app/router/RoleGuard.tsx create mode 100644 src/app/router/RootLayout.tsx create mode 100644 src/app/router/__tests__/AuthGuard.test.tsx create mode 100644 src/app/router/__tests__/RoleGuard.test.tsx create mode 100644 src/app/router/index.ts create mode 100644 src/app/router/routes.tsx create mode 100644 src/assets/hero.png create mode 100644 src/assets/react.svg create mode 100644 src/assets/vite.svg create mode 100644 src/components/layout/AppLayout.tsx create mode 100644 src/components/layout/AppSidebar.tsx create mode 100644 src/components/layout/AppTopbar.tsx create mode 100644 src/components/layout/FormCard.tsx create mode 100644 src/components/layout/NavItem.tsx create mode 100644 src/components/layout/PageContainer.tsx create mode 100644 src/components/layout/PageHeader.tsx create mode 100644 src/components/layout/__tests__/PageHeader.test.tsx create mode 100644 src/components/layout/__tests__/Sidebar.test.tsx create mode 100644 src/components/layout/__tests__/SidebarRoles.test.tsx create mode 100644 src/components/layout/index.ts create mode 100644 src/components/shared/.gitkeep create mode 100644 src/components/shared/PasswordStrengthIndicator.tsx create mode 100644 src/components/shared/StatusBadge.tsx create mode 100644 src/components/shared/StatusHistoryList.tsx create mode 100644 src/components/shared/StatusTransitionModal.tsx create mode 100644 src/components/shared/__tests__/StatusBadge.test.tsx create mode 100644 src/components/shared/__tests__/StatusHistoryList.test.tsx create mode 100644 src/components/shared/__tests__/StatusTransitionModal.test.tsx create mode 100644 src/components/ui/.gitkeep create mode 100644 src/components/ui/Badge.tsx create mode 100644 src/components/ui/Breadcrumbs.tsx create mode 100644 src/components/ui/Button.tsx create mode 100644 src/components/ui/ConfirmDialog.tsx create mode 100644 src/components/ui/CpfCnpjInput.tsx create mode 100644 src/components/ui/CpfInput.tsx create mode 100644 src/components/ui/CurrencyInput.tsx create mode 100644 src/components/ui/DataTable.tsx create mode 100644 src/components/ui/DatePicker.tsx create mode 100644 src/components/ui/DatePickerField.tsx create mode 100644 src/components/ui/DateRangePicker.tsx create mode 100644 src/components/ui/DetailField.tsx create mode 100644 src/components/ui/Drawer.tsx create mode 100644 src/components/ui/Input.tsx create mode 100644 src/components/ui/Pagination.tsx create mode 100644 src/components/ui/PhoneInput.tsx create mode 100644 src/components/ui/SearchInput.tsx create mode 100644 src/components/ui/Select.tsx create mode 100644 src/components/ui/Tabs.tsx create mode 100644 src/components/ui/ThemeSwitcher.tsx create mode 100644 src/components/ui/Toast.tsx create mode 100644 src/components/ui/Tooltip.tsx create mode 100644 src/components/ui/__tests__/Badge.test.tsx create mode 100644 src/components/ui/__tests__/Breadcrumbs.test.tsx create mode 100644 src/components/ui/__tests__/DataTable.test.tsx create mode 100644 src/components/ui/__tests__/Input.test.tsx create mode 100644 src/components/ui/__tests__/Pagination.test.tsx create mode 100644 src/components/ui/__tests__/SearchInput.test.tsx create mode 100644 src/components/ui/__tests__/Select.test.tsx create mode 100644 src/components/ui/__tests__/Tabs.test.tsx create mode 100644 src/components/ui/__tests__/ThemeSwitcher.test.tsx create mode 100644 src/components/ui/__tests__/Tooltip.test.tsx create mode 100644 src/components/ui/index.ts create mode 100644 src/constants/.gitkeep create mode 100644 src/constants/__tests__/breadcrumbs.test.ts create mode 100644 src/constants/breadcrumbs.ts create mode 100644 src/constants/contract-item-type.ts create mode 100644 src/constants/deliverable-status.ts create mode 100644 src/constants/deliverable-type.ts create mode 100644 src/constants/field-visibility.ts create mode 100644 src/constants/navigation.ts create mode 100644 src/constants/permissions.ts create mode 100644 src/constants/professional-roles.ts create mode 100644 src/constants/sprint.ts create mode 100644 src/constants/work-order-status.ts create mode 100644 src/hooks/.gitkeep create mode 100644 src/hooks/__tests__/useBreadcrumbs.test.ts create mode 100644 src/hooks/__tests__/useDeliverableNumWeeksPreview.test.ts create mode 100644 src/hooks/__tests__/useFieldVisibility.test.ts create mode 100644 src/hooks/__tests__/usePermission.test.ts create mode 100644 src/hooks/useAllocationTemplates.ts create mode 100644 src/hooks/useAssignments.ts create mode 100644 src/hooks/useBacklog.ts create mode 100644 src/hooks/useBreadcrumbs.ts create mode 100644 src/hooks/useClientProfiles.ts create mode 100644 src/hooks/useClients.ts create mode 100644 src/hooks/useContractItems.ts create mode 100644 src/hooks/useContracts.ts create mode 100644 src/hooks/useDashboard.ts create mode 100644 src/hooks/useDeliverableAllocations.ts create mode 100644 src/hooks/useDeliverableNumWeeksPreview.ts create mode 100644 src/hooks/useDeliverableValuePreview.ts create mode 100644 src/hooks/useDeliverables.ts create mode 100644 src/hooks/useFieldVisibility.ts create mode 100644 src/hooks/useNotes.ts create mode 100644 src/hooks/usePageTitle.ts create mode 100644 src/hooks/usePermission.ts create mode 100644 src/hooks/useProfessionals.ts create mode 100644 src/hooks/useProjects.ts create mode 100644 src/hooks/useReadOnly.ts create mode 100644 src/hooks/useSidebar.ts create mode 100644 src/hooks/useSprints.ts create mode 100644 src/hooks/useTheme.ts create mode 100644 src/hooks/useTimeline.ts create mode 100644 src/hooks/useUsers.ts create mode 100644 src/hooks/useWorkOrders.ts create mode 100644 src/lib/.gitkeep create mode 100644 src/main.tsx create mode 100644 src/modules/api-keys/__tests__/service.test.ts create mode 100644 src/modules/api-keys/index.ts create mode 100644 src/modules/api-keys/mutations.ts create mode 100644 src/modules/api-keys/queries.ts create mode 100644 src/modules/api-keys/service.ts create mode 100644 src/modules/api-keys/types.ts create mode 100644 src/modules/auth/.gitkeep create mode 100644 src/modules/auth/AuthContext.tsx create mode 100644 src/modules/auth/__tests__/AuthProvider.test.tsx create mode 100644 src/modules/auth/__tests__/AuthTopbar.test.tsx create mode 100644 src/modules/auth/auth.service.ts create mode 100644 src/modules/auth/auth.storage.ts create mode 100644 src/modules/auth/index.ts create mode 100644 src/modules/auth/useAuth.ts create mode 100644 src/modules/navigation/.gitkeep create mode 100644 src/modules/page-title/PageTitleContext.tsx create mode 100644 src/modules/sidebar/SidebarContext.tsx create mode 100644 src/modules/sidebar/__tests__/SidebarProvider.test.tsx create mode 100644 src/modules/theme/ThemeContext.tsx create mode 100644 src/modules/theme/__tests__/ThemeProvider.test.tsx create mode 100644 src/pages/__tests__/detail-form-pages-breadcrumbs.test.tsx create mode 100644 src/pages/__tests__/listing-pages-breadcrumbs.test.tsx create mode 100644 src/pages/admin/api-keys/ApiKeyCreatedDialog.tsx create mode 100644 src/pages/admin/api-keys/ApiKeyTable.tsx create mode 100644 src/pages/admin/api-keys/ApiKeysPage.tsx create mode 100644 src/pages/admin/api-keys/CreateApiKeyModal.tsx create mode 100644 src/pages/admin/api-keys/index.ts create mode 100644 src/pages/auth/ChangePasswordPage.tsx create mode 100644 src/pages/auth/ForgotPasswordPage.tsx create mode 100644 src/pages/auth/LoginPage.tsx create mode 100644 src/pages/auth/ResetPasswordPage.tsx create mode 100644 src/pages/auth/__tests__/ChangePasswordPage.test.tsx create mode 100644 src/pages/auth/__tests__/ForgotPasswordPage.test.tsx create mode 100644 src/pages/auth/__tests__/LoginPage.test.tsx create mode 100644 src/pages/auth/__tests__/ResetPasswordPage.test.tsx create mode 100644 src/pages/clients/.gitkeep create mode 100644 src/pages/clients/ClientContractCreatePage.tsx create mode 100644 src/pages/clients/ClientContractItemCreatePage.tsx create mode 100644 src/pages/clients/ClientContractItemEditPage.tsx create mode 100644 src/pages/clients/ClientCreatePage.tsx create mode 100644 src/pages/clients/ClientDetailDrawer.tsx create mode 100644 src/pages/clients/ClientDetailPage.tsx create mode 100644 src/pages/clients/ClientEditPage.tsx create mode 100644 src/pages/clients/ClientProjectCreatePage.tsx create mode 100644 src/pages/clients/ClientsPage.tsx create mode 100644 src/pages/clients/__tests__/ClientContractItemCreatePage.test.tsx create mode 100644 src/pages/clients/__tests__/ClientContractItemEditPage.test.tsx create mode 100644 src/pages/clients/components/ClientAllocationTemplatesTab.tsx create mode 100644 src/pages/clients/components/ClientContractItemsTab.tsx create mode 100644 src/pages/clients/components/ClientContractsTab.tsx create mode 100644 src/pages/clients/components/ClientProfilesTab.tsx create mode 100644 src/pages/clients/components/ClientProjectsTab.tsx create mode 100644 src/pages/clients/components/__tests__/ClientContractItemsTab.test.tsx create mode 100644 src/pages/contracts/.gitkeep create mode 100644 src/pages/contracts/ContractCreatePage.tsx create mode 100644 src/pages/contracts/ContractDetailDrawer.tsx create mode 100644 src/pages/contracts/ContractEditPage.tsx create mode 100644 src/pages/contracts/ContractsPage.tsx create mode 100644 src/pages/dashboard/.gitkeep create mode 100644 src/pages/dashboard/DashboardPage.tsx create mode 100644 src/pages/entregaveis/.gitkeep create mode 100644 src/pages/entregaveis/EntregaveisListPage.tsx create mode 100644 src/pages/entregaveis/EntregavelCreatePage.tsx create mode 100644 src/pages/entregaveis/EntregavelDetailPage.tsx create mode 100644 src/pages/entregaveis/EntregavelEditPage.tsx create mode 100644 src/pages/entregaveis/__tests__/EntregaveisListPage.visibility.test.tsx create mode 100644 src/pages/entregaveis/__tests__/EntregavelCreatePage.test.tsx create mode 100644 src/pages/entregaveis/__tests__/EntregavelDetailPage.test.tsx create mode 100644 src/pages/entregaveis/components/AssignmentModal.tsx create mode 100644 src/pages/entregaveis/components/BacklogItemModal.tsx create mode 100644 src/pages/entregaveis/components/BacklogRejectModal.tsx create mode 100644 src/pages/entregaveis/components/DeliverableValuePreviewBlock.tsx create mode 100644 src/pages/entregaveis/components/EntregavelAllocationTab.tsx create mode 100644 src/pages/entregaveis/components/EntregavelBacklogTab.tsx create mode 100644 src/pages/entregaveis/components/EntregavelNotesTab.tsx create mode 100644 src/pages/entregaveis/components/EntregavelSummaryTab.tsx create mode 100644 src/pages/entregaveis/components/EntregavelTeamTab.tsx create mode 100644 src/pages/entregaveis/components/EntregavelTimelineTab.tsx create mode 100644 src/pages/entregaveis/components/EntregavelValuationCard.tsx create mode 100644 src/pages/entregaveis/components/NoteModal.tsx create mode 100644 src/pages/entregaveis/components/PlaceholderTab.tsx create mode 100644 src/pages/entregaveis/components/__tests__/EntregavelAllocationTab.test.tsx create mode 100644 src/pages/entregaveis/components/__tests__/EntregavelSummaryTab.test.tsx create mode 100644 src/pages/fiscal-contrato/FiscalContratoPage.tsx create mode 100644 src/pages/fiscal-contrato/__tests__/FiscalContratoPage.test.tsx create mode 100644 src/pages/gestor-contrato/GestorContratoPage.tsx create mode 100644 src/pages/gestor-contrato/__tests__/GestorContratoPage.test.tsx create mode 100644 src/pages/ordens-servico/OrdemServicoCreatePage.tsx create mode 100644 src/pages/ordens-servico/OrdemServicoDetailPage.tsx create mode 100644 src/pages/ordens-servico/OrdemServicoEditPage.tsx create mode 100644 src/pages/ordens-servico/OrdensServicoListPage.tsx create mode 100644 src/pages/ordens-servico/__tests__/OrdemServicoCreatePage.test.tsx create mode 100644 src/pages/ordens-servico/__tests__/OrdemServicoDetailPage.test.tsx create mode 100644 src/pages/ordens-servico/__tests__/OrdemServicoDetailPage.visibility.test.tsx create mode 100644 src/pages/ordens-servico/__tests__/OrdensServicoListPage.test.tsx create mode 100644 src/pages/ordens-servico/components/CancelWorkOrderModal.tsx create mode 100644 src/pages/ordens-servico/components/OrdemServicoDeliverablesTab.tsx create mode 100644 src/pages/ordens-servico/components/OrdemServicoForm.tsx create mode 100644 src/pages/ordens-servico/components/OrdemServicoStatusHistoryTab.tsx create mode 100644 src/pages/ordens-servico/components/OrdemServicoSummaryTab.tsx create mode 100644 src/pages/po/PoPage.tsx create mode 100644 src/pages/po/__tests__/PoPage.test.tsx create mode 100644 src/pages/professionals/.gitkeep create mode 100644 src/pages/professionals/ProfessionalCreatePage.tsx create mode 100644 src/pages/professionals/ProfessionalDetailDrawer.tsx create mode 100644 src/pages/professionals/ProfessionalEditPage.tsx create mode 100644 src/pages/professionals/ProfessionalsPage.tsx create mode 100644 src/pages/projects/.gitkeep create mode 100644 src/pages/projects/ProjectCreatePage.tsx create mode 100644 src/pages/projects/ProjectDetailDrawer.tsx create mode 100644 src/pages/projects/ProjectEditPage.tsx create mode 100644 src/pages/projects/ProjectsPage.tsx create mode 100644 src/pages/settings/.gitkeep create mode 100644 src/pages/settings/SettingsPage.tsx create mode 100644 src/pages/sprints/.gitkeep create mode 100644 src/pages/sprints/SprintCreatePage.tsx create mode 100644 src/pages/sprints/SprintDetailPage.tsx create mode 100644 src/pages/sprints/SprintEditPage.tsx create mode 100644 src/pages/sprints/SprintsPage.tsx create mode 100644 src/pages/sprints/components/AddServiceOrderModal.tsx create mode 100644 src/pages/sprints/components/FinishSprintModal.tsx create mode 100644 src/pages/users/.gitkeep create mode 100644 src/pages/users/ResetPasswordModal.tsx create mode 100644 src/pages/users/UserCreatePage.tsx create mode 100644 src/pages/users/UserEditPage.tsx create mode 100644 src/pages/users/UsersPage.tsx create mode 100644 src/pages/users/__tests__/ResetPasswordModal.spec.tsx create mode 100644 src/pages/users/__tests__/UsersPage.spec.tsx create mode 100644 src/services/allocation-templates.service.ts create mode 100644 src/services/api/.gitkeep create mode 100644 src/services/assignments.service.ts create mode 100644 src/services/backlog.service.ts create mode 100644 src/services/client-profiles.service.ts create mode 100644 src/services/clients.service.ts create mode 100644 src/services/contract-items.service.ts create mode 100644 src/services/contracts.service.ts create mode 100644 src/services/dashboard.service.ts create mode 100644 src/services/deliverable-allocations.service.ts create mode 100644 src/services/deliverables.service.ts create mode 100644 src/services/http/api.ts create mode 100644 src/services/http/client.ts create mode 100644 src/services/http/index.ts create mode 100644 src/services/notes.service.ts create mode 100644 src/services/professionals.service.ts create mode 100644 src/services/projects.service.ts create mode 100644 src/services/sprints.service.ts create mode 100644 src/services/timeline.service.ts create mode 100644 src/services/users.service.ts create mode 100644 src/services/work-orders.service.ts create mode 100644 src/styles/globals.css create mode 100644 src/test/setup.ts create mode 100644 src/types/.gitkeep create mode 100644 src/types/allocation-template.types.ts create mode 100644 src/types/auth.types.ts create mode 100644 src/types/client-profile.types.ts create mode 100644 src/types/client.types.ts create mode 100644 src/types/contract-item.types.ts create mode 100644 src/types/contract.types.ts create mode 100644 src/types/dashboard.types.ts create mode 100644 src/types/deliverable.types.ts create mode 100644 src/types/os-allocation.types.ts create mode 100644 src/types/professional.types.ts create mode 100644 src/types/project.types.ts create mode 100644 src/types/sprint.types.ts create mode 100644 src/types/user.types.ts create mode 100644 src/types/work-order.types.ts create mode 100644 src/utils/.gitkeep create mode 100644 tailwind.config.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.env b/.env new file mode 100644 index 0000000..421ab74 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +VITE_API_URL=https://backend.aplicativopro.com diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..5317fce --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +VITE_API_URL=http://localhost:3000 diff --git a/Deploy-Coolify.md b/Deploy-Coolify.md new file mode 100644 index 0000000..4fab47d --- /dev/null +++ b/Deploy-Coolify.md @@ -0,0 +1,214 @@ +Sim, dá para usar **Nixpacks**. Você **não deve compactar `node_modules`, `dist`, `.git`, logs, cache, uploads grandes**. + +Compacte somente o código-fonte necessário: + +```txt +meu-projeto/ +├─ frontend/ +│ ├─ package.json +│ ├─ package-lock.json +│ ├─ index.html +│ ├─ vite.config.* +│ ├─ src/ +│ └─ public/ + tsconfig.json + tsconfig.app.json + tsconfig.node.json + tailwind.config.ts + postcss.config.js + eslint.config.js + .env.example + README.md + + + + +├─ backend/ +│ ├─ package.json +│ ├─ package-lock.json +│ ├─ src/ +│ └─ .env.example + prisma + nest-cli.json + tsconfig.build.json + tsconfig.json +└─ README.md +``` + +Ignore no `.zip`: + +```txt +node_modules/ +dist/ +build/ +.git/ +.env +.env.local +*.log +.cache/ +.vite/ +coverage/ +uploads/ +tmp/ +``` + +## Recomendado no Coolify + +Crie **2 aplicações separadas**: + +```txt +App 1: frontend React + Vite +App 2: backend API +``` + +--- + +# 1. Deploy do Backend + +No Coolify: + +**Source:** Upload ZIP ou Git +**Build Pack:** Nixpacks +**Base Directory:** `backend` + +Build: + +```bash +npm install +``` + +Build Command, se usar TypeScript: + +```bash +npm run build +``` + +Start Command: + +```bash +npm run start +``` + +Se o backend roda em dev com `npm run dev`, crie um script de produção no `backend/package.json`: + +```json +{ + "scripts": { + "build": "tsc", + "start": "node dist/server.js" + } +} +``` + +Ou, se for JavaScript puro: + +```json +{ + "scripts": { + "start": "node src/server.js" + } +} +``` + +No backend, use a porta via variável: + +```js +const PORT = process.env.PORT || 3000; +app.listen(PORT, "0.0.0.0"); +``` + +No Coolify, configure as variáveis de ambiente do backend, exemplo: + +```env +DATABASE_URL=... +JWT_SECRET=... +NODE_ENV=production +``` + +--- + +# 2. Deploy do Frontend React + Vite + +No Coolify: + +**Build Pack:** Nixpacks +**Base Directory:** `frontend` + +Build: + +```bash +npm install +``` + +Build Command: + +```bash +npm run build +``` + +Start Command: + +```bash +npm run preview -- --host 0.0.0.0 --port $PORT +``` + +No `frontend/package.json`, deixe assim: + +```json +{ + "scripts": { + "build": "vite build", + "preview": "vite preview" + } +} +``` + +Variável para apontar para o backend: + +```env +VITE_API_URL=https://api.seudominio.com +``` + +No código React: + +```js +const API_URL = import.meta.env.VITE_API_URL; +``` + +--- + +# 3. O que compactar + +Compacte a pasta raiz do projeto contendo `frontend` e `backend`, mas sem arquivos pesados. + +Exemplo: + +```bash +zip -r projeto.zip . \ + -x "*/node_modules/*" \ + -x "*/dist/*" \ + -x "*/build/*" \ + -x ".git/*" \ + -x "*/.env*" \ + -x "*/.cache/*" +``` + +Melhor ainda: suba no **GitHub/GitLab** e conecte o repositório no Coolify. É mais fácil de atualizar depois. + +Configuração da imagem: + +Frontend: + +```txt +Install Command: npm install +Build Command: npm run build +Start Command: npm run preview -- --host 0.0.0.0 --port $PORT +``` + +Backend: + +```txt +Install Command: npm install +Build Command: npm run build +Start Command: npm run start +``` diff --git a/README.md b/README.md new file mode 100644 index 0000000..dfe549e --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` +test diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..c07eb09 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,37 @@ +// @ts-check +import eslint from '@eslint/js'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import reactHooks from 'eslint-plugin-react-hooks'; +import reactRefresh from 'eslint-plugin-react-refresh'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + { + ignores: ['dist', 'eslint.config.js', 'postcss.config.js', 'tailwind.config.ts'], + }, + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + eslintPluginPrettierRecommended, + { + languageOptions: { + globals: { ...globals.browser }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], + '@typescript-eslint/no-explicit-any': 'error', + 'prettier/prettier': ['error', { endOfLine: 'auto' }], + }, + }, +); diff --git a/github.bat b/github.bat new file mode 100644 index 0000000..9fb1930 --- /dev/null +++ b/github.bat @@ -0,0 +1,29 @@ +@echo off +echo === INICIANDO UPLOAD PARA GITHUB === + +REM Inicializar repositório Git +echo Inicializando repositorio Git... +git init + +REM Adicionar todos os arquivos +echo Adicionando todos os arquivos... +git add . + +REM Fazer commit inicial +echo Realizando commit inicial... +git commit -m "Commit inicial - upload de todos os arquivos da pasta" + +REM Adicionar repositório remoto +echo Conectando ao repositorio remoto... +git remote add origin https://gitea.aplicativopro.com/wander/Frontend-Iasis.git + +REM Definir branch principal +echo Definindo branch principal como 'main'... +git branch -M main + +REM Fazer push para o GitHub +echo Fazendo upload para o GitHub... +git push -u origin main --force + +echo === UPLOAD CONCLUIDO COM SUCESSO! === +pause \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..8ddd655 --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + + + Gestão ISIS + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0f99461 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5531 @@ +{ + "name": "iasis-gestao-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "iasis-gestao-frontend", + "version": "0.0.0", + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "@tanstack/react-query": "^5.96.2", + "autoprefixer": "^10.4.27", + "axios": "^1.16.0", + "date-fns": "^4.1.0", + "lucide-react": "^1.7.0", + "postcss": "^8.5.8", + "react": "^19.2.4", + "react-day-picker": "^9.14.0", + "react-dom": "^19.2.4", + "react-hook-form": "^7.72.1", + "react-router-dom": "^7.14.0", + "tailwindcss": "^3.4.19", + "zod": "^4.3.6" + }, + "devDependencies": { + "@eslint/js": "^9.39.4", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@testing-library/user-event": "^14.6.1", + "@types/node": "^24.12.0", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^9.39.4", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.4.0", + "jsdom": "^28.1.0", + "prettier": "^3.8.1", + "typescript": "~5.9.3", + "typescript-eslint": "^8.57.0", + "vite": "^8.0.10", + "vitest": "^4.1.2" + } + }, + "node_modules/@acemir/cssom": { + "version": "0.9.31", + "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz", + "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.4.tgz", + "integrity": "sha512-503MoTEmPSyEJ7zQ+5vlkwPtkyxDhbDwR9ajk/jpPGrCLiUFHzgEG4iViUPKdGlZPRT1mWSPSbDL2qkOoLU4vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^3.1.1", + "@csstools/css-color-parser": "^4.0.2", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0", + "lru-cache": "^11.2.7" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz", + "integrity": "sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.1.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.2.6" + } + }, + "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz", + "integrity": "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz", + "integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz", + "integrity": "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.0.2", + "@csstools/css-calc": "^3.1.1" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.2.tgz", + "integrity": "sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "license": "MIT" + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "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": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "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": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "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.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "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.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": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "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.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.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "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": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "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": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "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.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.0.tgz", + "integrity": "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.2.tgz", + "integrity": "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "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.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "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/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "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", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "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", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz", + "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.17.tgz", + "integrity": "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.17.tgz", + "integrity": "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.17.tgz", + "integrity": "sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.17.tgz", + "integrity": "sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.17.tgz", + "integrity": "sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.17.tgz", + "integrity": "sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.17.tgz", + "integrity": "sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.17.tgz", + "integrity": "sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.17.tgz", + "integrity": "sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.17.tgz", + "integrity": "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.17.tgz", + "integrity": "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz", + "integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.7", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.7.tgz", + "integrity": "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@tabby_ai/hijri-converter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", + "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.96.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.96.2.tgz", + "integrity": "sha512-hzI6cTVh4KNRk8UtoIBS7Lv9g6BnJPXvBKsvYH1aGWvv0347jT3BnSvztOE+kD76XGvZnRC/t6qdW1CaIfwCeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.96.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.96.2.tgz", + "integrity": "sha512-sYyzzJT4G0g02azzJ8o55VFFV31XvFpdUpG+unxS0vSaYsJnSPKGoI6WdPwUucJL1wpgGfwfmntNX/Ub1uOViA==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.96.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "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" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.2.tgz", + "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.0.tgz", + "integrity": "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/type-utils": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.58.0", + "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": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.0.tgz", + "integrity": "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "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.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.0.tgz", + "integrity": "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.58.0", + "@typescript-eslint/types": "^8.58.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.0.tgz", + "integrity": "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.0.tgz", + "integrity": "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.0.tgz", + "integrity": "sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/utils": "8.58.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.0.tgz", + "integrity": "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.0.tgz", + "integrity": "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.58.0", + "@typescript-eslint/tsconfig-utils": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/visitor-keys": "8.58.0", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "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": "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": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.0.tgz", + "integrity": "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.0", + "@typescript-eslint/types": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "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.58.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.0.tgz", + "integrity": "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.58.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "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": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.1.tgz", + "integrity": "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.7" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", + "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", + "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", + "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.2", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", + "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "@vitest/utils": "4.1.2", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", + "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "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", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "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": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-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", + "engines": { + "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" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", + "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.14.tgz", + "integrity": "sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "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": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "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" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001784", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001784.tgz", + "integrity": "sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "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", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssstyle": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-6.2.0.tgz", + "integrity": "sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.0.1", + "@csstools/css-syntax-patches-for-csstree": "^1.0.28", + "css-tree": "^3.1.0", + "lru-cache": "^11.2.6" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cssstyle/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.331", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz", + "integrity": "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==", + "license": "ISC" + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@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", + "ajv": "^6.14.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "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": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "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.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.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" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", + "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "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", + "peer": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "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": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz", + "integrity": "sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@acemir/cssom": "^0.9.31", + "@asamuzakjp/dom-selector": "^6.8.1", + "@bramus/specificity": "^2.4.2", + "@exodus/bytes": "^1.11.0", + "cssstyle": "^6.0.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^8.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.0", + "undici": "^7.21.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.7.0.tgz", + "integrity": "sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "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==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "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/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "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", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-day-picker": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", + "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@tabby_ai/hijri-converter": "1.0.5", + "date-fns": "^4.1.0", + "date-fns-jalali": "4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" + } + }, + "node_modules/react-hook-form": { + "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", + "peer": true, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "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" + }, + "node_modules/react-router": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.14.0.tgz", + "integrity": "sha512-m/xR9N4LQLmAS0ZhkY2nkPA1N7gQ5TUVa5n8TgANuDTARbn1gt+zLPXEm7W0XDTbrQ2AJSJKhoa6yx1D8BcpxQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.14.0.tgz", + "integrity": "sha512-2G3ajSVSZMEtmTjIklRWlNvo8wICEpLihfD/0YMDxbWK2UyP5EGfnoIn9AIQGnF3G/FX0MRbHXdFcD+rL1ZreQ==", + "license": "MIT", + "dependencies": { + "react-router": "7.14.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "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.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" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "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", + "node": ">=0.10.0" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz", + "integrity": "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.127.0", + "@rolldown/pluginutils": "1.0.0-rc.17" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", + "@rolldown/binding-darwin-x64": "1.0.0-rc.17", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz", + "integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "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", + "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": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tailwindcss": { + "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", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "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", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "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.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.27.tgz", + "integrity": "sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.27" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.27.tgz", + "integrity": "sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/ts-api-utils": { + "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": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.58.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.0.tgz", + "integrity": "sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.58.0", + "@typescript-eslint/parser": "8.58.0", + "@typescript-eslint/typescript-estree": "8.58.0", + "@typescript-eslint/utils": "8.58.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/undici": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.7.tgz", + "integrity": "sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "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==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz", + "integrity": "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.10", + "rolldown": "1.0.0-rc.17", + "tinyglobby": "^0.2.16" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", + "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.2", + "@vitest/mocker": "4.1.2", + "@vitest/pretty-format": "4.1.2", + "@vitest/runner": "4.1.2", + "@vitest/snapshot": "4.1.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.2", + "@vitest/browser-preview": "4.1.2", + "@vitest/browser-webdriverio": "4.1.2", + "@vitest/ui": "4.1.2", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..35469d6 --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "iasis-gestao-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "lint:fix": "eslint \"src/**/*.{ts,tsx}\" --fix", + "format": "prettier --write \"src/**/*.{ts,tsx}\"", + "format:check": "prettier --check \"src/**/*.{ts,tsx}\"", + "preview": "vite preview", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "@hookform/resolvers": "^5.2.2", + "@tanstack/react-query": "^5.96.2", + "autoprefixer": "^10.4.27", + "axios": "^1.16.0", + "date-fns": "^4.1.0", + "lucide-react": "^1.7.0", + "postcss": "^8.5.8", + "react": "^19.2.4", + "react-day-picker": "^9.14.0", + "react-dom": "^19.2.4", + "react-hook-form": "^7.72.1", + "react-router-dom": "^7.14.0", + "tailwindcss": "^3.4.19", + "zod": "^4.3.6" + }, + "devDependencies": { + "@eslint/js": "^9.39.4", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@testing-library/user-event": "^14.6.1", + "@types/node": "^24.12.0", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^9.39.4", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.4.0", + "jsdom": "^28.1.0", + "prettier": "^3.8.1", + "typescript": "~5.9.3", + "typescript-eslint": "^8.57.0", + "vite": "^8.0.10", + "vitest": "^4.1.2" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..d5eea8e7dbbd45c59fb3e5ffe907628208c2aa56 GIT binary patch literal 11207 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 DM1e}i literal 0 HcmV?d00001 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..69810dbb2791a2f81826929d679ac5508fd61558 GIT binary patch literal 1475 zcmV;!1w8tRP)Tbq_Z0c~kfQ)v|pnj#fqM2H}?QereF7>t^Lpdf)QuN5c=h>C$2 z48{b1V4-V(m`Dh35~D>b4?!Rpd9^^hY+JV5b{{i-v)gTV*V#wGI63FeJ@0Sk-g{;w zJjk`8CKJ`RhaM!w{Q;=9m0?ZoQ6w3gS-ct5wI{IFHi7d#Q{Mort$mtLyq{H$K!|Zr zRlzw)ltRTp+74oM?K4y)Oo;(lV=LlQ{s4$y0K7_s~J|;rdR4cW5%3TN=C1P+@3EBNlU8rhIpyCx_C`>kAlHGZ-WT>LuPL56jDVi||K%48bL6+;%1{e$7TW2h9 z`Fwhdu2YDz`O&fWyv3uc(+x=lLNOfD^DG${L{8@BqxhebR@lLldFcYscmr^I z{3QYa{8J7_7SAS#f#f8?h86NHp!vQ?2pO#o;4=5}&Fg^29hN2>K+x1r068+$9Am2a zK-2RyS^{arpOE+8}K+u(Mp(V9*NB{b|(x58QyK(OBCtXh0Zgh6W z42ccEAL`A$2la&b{p7xsGrx`Ut6~gk@7szD@7C<{booxIiZVQgtKZZOKyZ=#a@0Xp zm6u&UU!AD`b&v5}eMzKa+I-t%hWBcAIy*h5eTw=j?cKRK)2F+dy4y+JOo8WvV{8(1 zn(Fa*P8sU!_85OWJlpueu36GMEbMZh^Z8WmtJ` zfMD(^gIt*O#0IpR@}R0#s@ur1Nq|Vz)$odZd^&9%Hco7h6%ZRhFw#1?4OJB@DG~@a z@XiguF`POmZi4E~hoxc}tnvSz=pSVXG>aZv%I&BsU&ObeH5eXUaSc%UWx*CG#sXN% z7r;{4q!$`Zm)IMKjIOF^WU+a$OdkeI#SmD^=V0lSn~`ps9FPA200960zOLQY00006 dNkl#?;QF2Eksq<65Wb- zPz5!t&mp|}DG3yqv4Q?>*g#L@E~6k%D=P}=4T-cE zPGKx9>@K4vqAtr1YIH{$n*4tu^W$qJJmB7prBptGuhq|wrRAgbOGxd`ri;BL+|!PK zuwO{SCf$Xic&i>-{SsQzl|yRhK2p!_rmq~=9DCZiN7sAiEmG@WBDFA{mRGEyCC#wY z=kI!6zjH6CU0I}B4$^YiU`Y{dTC$4NV_Rs*xMR-LF*MsNwS@w^vUFcsimmpxl#SKr zHn?Oi)9qIxf^N30NmSPqeA7p@WRPvG)sLZvL|v8!^fCH+C^^jU9Yc8F9n}qVJNk1M z%3w>~SU+<+mJ<3iGI1Mk4j3C(lOgu+JG;+F zpqZ#2gYPajV~geroV_}s=j>ZfgUNr<~2T@IQY9<_7{-NEu)7r~;?_J>akrWdm?A@5s1}?Eqi!IGz_r56gW5 zJ3j`zVSy=2NBH0|TxZf}l^h88XKGZyVkOKkIXRRr30xsZ>@RR_WPThyE;soO8}xO+n?c?klU1}^~t~<<>3k+afVT}0R3BKO!->i8yj^w^-WWMCh9no zhRBdRlyH42^KgTIO0?k$zrBju>rB({7w>v1)0PF?wLeOCLXK-}u4Bn9z6JAZSJBJ| zJjJwsulTuX^UIzejqPmuANF^OZz&|ztRU{$qZ_bq)7yLVUVZzAh!slL*zs_HkGM%S zry^#WhgM|jBiMbv6emvAQmU+BaFs^zUi~NL_ko)?iYwMMPVt$;LHKlD3p8z;&7qu6zw?Ku&gst8U6lQq zbnOyf*di}lUu%d7xz1YxO-(aqovG9nOL#(WAw9y+!5j`>+Lsy;xHjV%=W8&*@9>A$ zOs_xczY23y_o*Y}Y%Z`_%J}s{Uwb)%ug#}QsIE69A}~P-oi#(?30cxYA;w1kc;I%4 zdDoM_sYmOz(8`<_ayYcI7HQ}P!Tgv`^# zeuy#ez?vch@#e56_*koC8`jeNiJ^|KoxYLo0e*oC4u=r`-#5PI<$VJDUqZ*Sj1hal zHiu!G2QM#*`__B@r2aT3mbQ_8g*?pD_%
    KyT&ryZ^`tMY`T(*nmuGpX0-taqjgQEhU zGYDxj2TJ#Y@Y#l}_4M=qhyDPEK=zL)yTH+#Tv89-f7_5m3%HFdW@rg0D~aY|d?&-6 zJWjlxhf#;;Ox8J_=TWKYNxM{y6mT+!ev-45k}yXN0NdF(@$UHsb()bWGoV zng!lTh;KjbDW!{@6 ztG$`CTpaSpdL8_^KkBd#8iRGrk5y?8%6>fY{uVek^P0q-x43u4U-Sp(#I^o-6MeA} z1>;1s_fp5ag$^$Gi~jf;dbFba&7QY5Udren;OH<{EV#3D$Dj46GwHf&>h;xy@9B3L zRt0ZI{+aH3sZ4 z9u2s=y`83rcI_qal_YCWau5J12EWF=P z-!#K*{#{@RnYDcSywvc36r2_44JU8jH7mD=oZRl$#rb77dU(bkXJjys2Z}7hEf2olGh8PR`I7KTpJ;w3xK0y7Ny?LC7eXjBH8{sebbRbqgiMXn2 zE&PA{nE%KA)MFpLO8uX`ZQaik?>ms+D1Yr6#5o0X1`TxPj`7F&v`10;D_^kg0kR$r zxbw4bjK3K^qzh*REm->@HW)z6GdlkY{=7GE2;-~#Iqa$a+j>UMPLC_kf8Pji_;9SJ z#6FW#{$hWFWhKs~ef$QgJnl3-cGG9x_!3{%LcO@(XQf(A8pXacQ#o=OahMYYmhyp+jq0M9@-> ze`QXdT%R~WLA8y+i?LQdioMPAM(l6$+Q=vVIQNCI(Puwa9Ni24Hfz6dzvi^a8ILN< zLat44kss&$Oij)7+0~|?g*7H!wa8hp^oBpyTj%-@(_e+1idN8F;QE;(zV^=?@n>Cd zPHiwHOka#OVOaXAYpxe<3wi9=Rae)W^owd6^?6t?Uy!+b%O8Ez(O<6pTY%R5j!+6H zilNu-xjMRc#$WUYatr6NrfuPK5m{@l`t4!(6r6iljq`DhbtXDz&s*GkW&cuos|9B< zg>6`}4%ipp0nXhxGcfFkJ3n*BpY>28kdMV#O#|XZ&hZv!;Ed%F+dX{2TSyQ1b8gCl zvfJ5t?iS=}5KH_9db|s+y^eHn#h-JUeAbh5$_A`GMho(A`(Hws&{i)LdU=l-xi z*WrjiVzeR5Wx4oP@9R2D)8+Bv$u-YW2l0O&g>h7aKKTM=*oObp;Ei)1I8)%1vol>- zkFtE6A+E9ZhaLZOIE!M$p2I_Y_SX}xuHNBu+R))~^uqznUxTSUzWJQY^Wg2m-p;s- z=X~xt7wg+$U? ze^Dss}Adtwt+T72marauO(f0PyP&a+?KO>^8X)YqWWdNL_dWt(crutatDtSoP8K~ ewtk{GlUbkr6~;#}$JUeWPbO23@7n%$Ti}16T7v2T literal 0 HcmV?d00001 diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/logo/logo-full.png b/public/logo/logo-full.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e1ae17685b3cb3177712376cbffb0499a395f0 GIT binary patch literal 19565 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 literal 0 HcmV?d00001 diff --git a/public/logo/logo-icon.png b/public/logo/logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..73817e72e8af9f2c31de5e0e07e7452378c2d39d GIT binary patch literal 45313 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 BthN9E literal 0 HcmV?d00001 diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/public/staticwebapp.config.json b/public/staticwebapp.config.json new file mode 100644 index 0000000..79fdffe --- /dev/null +++ b/public/staticwebapp.config.json @@ -0,0 +1,6 @@ +{ + "navigationFallback": { + "rewrite": "/index.html", + "exclude": ["/assets/*"] + } +} diff --git a/src/app/layouts/.gitkeep b/src/app/layouts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/app/providers/.gitkeep b/src/app/providers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/app/providers/AppProviders.tsx b/src/app/providers/AppProviders.tsx new file mode 100644 index 0000000..c568e33 --- /dev/null +++ b/src/app/providers/AppProviders.tsx @@ -0,0 +1,22 @@ +import { AuthProvider } from './AuthProvider'; +import { QueryProvider } from './QueryProvider'; +import { SidebarProvider } from './SidebarProvider'; +import { ThemeProvider } from './ThemeProvider'; +import { ToastProvider } from '../../components/ui/Toast'; +import { PageTitleProvider } from '../../modules/page-title/PageTitleContext'; + +export function AppProviders({ children }: { children: React.ReactNode }) { + return ( + + + + + + {children} + + + + + + ); +} diff --git a/src/app/providers/AuthProvider.tsx b/src/app/providers/AuthProvider.tsx new file mode 100644 index 0000000..a8b1e6e --- /dev/null +++ b/src/app/providers/AuthProvider.tsx @@ -0,0 +1,62 @@ +import { useState, useEffect, useCallback } from 'react'; +import { AuthContext } from '../../modules/auth/AuthContext'; +import { getToken, setToken as saveToken, removeToken } from '../../modules/auth/auth.storage'; +import { authService } from '../../modules/auth/auth.service'; +import type { User } from '../../types/auth.types'; + +export function AuthProvider({ children }: { children: React.ReactNode }) { + const [user, setUser] = useState(null); + const [token, setTokenState] = useState(null); + const [isLoading, setIsLoading] = useState(true); + + const isAuthenticated = !!token && !!user; + + useEffect(() => { + const storedToken = getToken(); + if (!storedToken) { + setIsLoading(false); + return; + } + + setTokenState(storedToken); + + authService + .getMe() + .then((userData) => { + setUser(userData); + }) + .catch(() => { + removeToken(); + setTokenState(null); + setUser(null); + }) + .finally(() => { + setIsLoading(false); + }); + }, []); + + const login = useCallback(async (email: string, password: string) => { + const response = await authService.login({ email, password }); + saveToken(response.accessToken); + setTokenState(response.accessToken); + setUser(response.user); + }, []); + + const logout = useCallback(() => { + removeToken(); + setTokenState(null); + setUser(null); + }, []); + + const updateUser = useCallback((data: Partial) => { + setUser((prev) => (prev ? { ...prev, ...data } : prev)); + }, []); + + return ( + + {children} + + ); +} diff --git a/src/app/providers/QueryProvider.tsx b/src/app/providers/QueryProvider.tsx new file mode 100644 index 0000000..be6f2fa --- /dev/null +++ b/src/app/providers/QueryProvider.tsx @@ -0,0 +1,15 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 5 * 60 * 1000, + retry: 1, + refetchOnWindowFocus: false, + }, + }, +}); + +export function QueryProvider({ children }: { children: React.ReactNode }) { + return {children}; +} diff --git a/src/app/providers/SidebarProvider.tsx b/src/app/providers/SidebarProvider.tsx new file mode 100644 index 0000000..9efb049 --- /dev/null +++ b/src/app/providers/SidebarProvider.tsx @@ -0,0 +1,75 @@ +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useLocation } from 'react-router-dom'; +import { SidebarContext } from '../../modules/sidebar/SidebarContext'; + +const STORAGE_KEY = '@iasis:sidebar-expanded'; +const MOBILE_QUERY = '(max-width: 768px)'; + +function readStoredExpanded(): boolean { + try { + const stored = localStorage.getItem(STORAGE_KEY); + return stored === null ? true : stored === 'true'; + } catch { + return true; + } +} + +export function SidebarProvider({ children }: { children: React.ReactNode }) { + const [isExpanded, setIsExpanded] = useState(readStoredExpanded); + const [isMobileOpen, setIsMobileOpen] = useState(false); + const [isMobile, setIsMobile] = useState(() => window.matchMedia(MOBILE_QUERY).matches); + const location = useLocation(); + + // Detect mobile breakpoint changes + useEffect(() => { + const mql = window.matchMedia(MOBILE_QUERY); + const handler = (e: MediaQueryListEvent) => { + setIsMobile(e.matches); + if (e.matches) { + setIsMobileOpen(false); + } + }; + mql.addEventListener('change', handler); + return () => mql.removeEventListener('change', handler); + }, []); + + // Close mobile sidebar on navigation + useEffect(() => { + setIsMobileOpen(false); + }, [location.pathname]); + + // Persist desktop expanded preference + useEffect(() => { + try { + localStorage.setItem(STORAGE_KEY, String(isExpanded)); + } catch { + // ignore storage errors + } + }, [isExpanded]); + + const toggleSidebar = useCallback(() => { + setIsExpanded((prev) => !prev); + }, []); + + const openMobile = useCallback(() => { + setIsMobileOpen(true); + }, []); + + const closeMobile = useCallback(() => { + setIsMobileOpen(false); + }, []); + + const value = useMemo( + () => ({ + isExpanded, + isMobile, + isMobileOpen, + toggleSidebar, + openMobile, + closeMobile, + }), + [isExpanded, isMobile, isMobileOpen, toggleSidebar, openMobile, closeMobile], + ); + + return {children}; +} diff --git a/src/app/providers/ThemeProvider.tsx b/src/app/providers/ThemeProvider.tsx new file mode 100644 index 0000000..3d382ac --- /dev/null +++ b/src/app/providers/ThemeProvider.tsx @@ -0,0 +1,42 @@ +import { useCallback, useEffect, useState } from 'react'; +import { ThemeContext, type Theme } from '../../modules/theme/ThemeContext'; + +const STORAGE_KEY = '@iasis:theme'; + +function getInitialTheme(): Theme { + const stored = localStorage.getItem(STORAGE_KEY); + if (stored === 'light' || stored === 'dark') { + return stored; + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; +} + +function applyThemeToDocument(theme: Theme) { + const root = document.documentElement; + root.classList.remove('light', 'dark'); + root.classList.add(theme); +} + +export function ThemeProvider({ children }: { children: React.ReactNode }) { + const [theme, setThemeState] = useState(getInitialTheme); + + useEffect(() => { + applyThemeToDocument(theme); + }, [theme]); + + const setTheme = useCallback((newTheme: Theme) => { + setThemeState(newTheme); + localStorage.setItem(STORAGE_KEY, newTheme); + }, []); + + const toggleTheme = useCallback(() => { + setTheme(theme === 'dark' ? 'light' : 'dark'); + }, [theme, setTheme]); + + return ( + + {children} + + ); +} diff --git a/src/app/providers/index.ts b/src/app/providers/index.ts new file mode 100644 index 0000000..2148c6b --- /dev/null +++ b/src/app/providers/index.ts @@ -0,0 +1,2 @@ +export { AppProviders } from './AppProviders'; +export { AuthProvider } from './AuthProvider'; diff --git a/src/app/router/AppRouter.tsx b/src/app/router/AppRouter.tsx new file mode 100644 index 0000000..88b00cc --- /dev/null +++ b/src/app/router/AppRouter.tsx @@ -0,0 +1,4 @@ +import { createBrowserRouter } from 'react-router-dom'; +import { routes } from './routes'; + +export const router = createBrowserRouter(routes); diff --git a/src/app/router/AuthGuard.tsx b/src/app/router/AuthGuard.tsx new file mode 100644 index 0000000..c1f7eac --- /dev/null +++ b/src/app/router/AuthGuard.tsx @@ -0,0 +1,19 @@ +import { Navigate, Outlet, useLocation } from 'react-router-dom'; +import { useAuth } from '../../modules/auth'; + +export function AuthGuard() { + const { isAuthenticated, isLoading, user } = useAuth(); + const location = useLocation(); + + if (isLoading) return null; + + if (!isAuthenticated) { + return ; + } + + if (user?.mustChangePassword && location.pathname !== '/trocar-senha') { + return ; + } + + return ; +} diff --git a/src/app/router/GuestGuard.tsx b/src/app/router/GuestGuard.tsx new file mode 100644 index 0000000..35002c6 --- /dev/null +++ b/src/app/router/GuestGuard.tsx @@ -0,0 +1,14 @@ +import { Navigate, Outlet } from 'react-router-dom'; +import { useAuth } from '../../modules/auth'; + +export function GuestGuard() { + const { isAuthenticated, isLoading } = useAuth(); + + if (isLoading) return null; + + if (isAuthenticated) { + return ; + } + + return ; +} diff --git a/src/app/router/RoleGuard.tsx b/src/app/router/RoleGuard.tsx new file mode 100644 index 0000000..fc08a56 --- /dev/null +++ b/src/app/router/RoleGuard.tsx @@ -0,0 +1,19 @@ +import { Navigate, Outlet } from 'react-router-dom'; +import { useAuth } from '../../modules/auth'; +import type { UserRole } from '../../types/auth.types'; + +interface RoleGuardProps { + allowedRoles: UserRole[]; +} + +export function RoleGuard({ allowedRoles }: RoleGuardProps) { + const { user, isLoading } = useAuth(); + + if (isLoading) return null; + + if (!user || !allowedRoles.includes(user.role)) { + return ; + } + + return ; +} diff --git a/src/app/router/RootLayout.tsx b/src/app/router/RootLayout.tsx new file mode 100644 index 0000000..b2143aa --- /dev/null +++ b/src/app/router/RootLayout.tsx @@ -0,0 +1,10 @@ +import { Outlet } from 'react-router-dom'; +import { AppProviders } from '../providers'; + +export function RootLayout() { + return ( + + + + ); +} diff --git a/src/app/router/__tests__/AuthGuard.test.tsx b/src/app/router/__tests__/AuthGuard.test.tsx new file mode 100644 index 0000000..b19b364 --- /dev/null +++ b/src/app/router/__tests__/AuthGuard.test.tsx @@ -0,0 +1,98 @@ +import { render, screen } from '@testing-library/react'; +import { MemoryRouter, Route, Routes } from 'react-router-dom'; +import { describe, it, expect, vi } from 'vitest'; +import { AuthGuard } from '../AuthGuard'; +import type { User } from '../../../types/auth.types'; + +const mockUser: User = { + id: '1', + name: 'Test', + email: 'test@test.com', + role: 'ADMIN', + mustChangePassword: false, +}; + +vi.mock('../../../modules/auth', () => ({ + useAuth: vi.fn(), +})); + +const { useAuth } = await import('../../../modules/auth'); +const mockUseAuth = vi.mocked(useAuth); + +function setAuth(overrides: Partial> = {}) { + mockUseAuth.mockReturnValue({ + user: mockUser, + token: 'token', + isAuthenticated: true, + isLoading: false, + login: vi.fn(), + logout: vi.fn(), + updateUser: vi.fn(), + ...overrides, + } as ReturnType); +} + +function renderWithRoutes(initialPath: string) { + return render( + + + Login Page} /> + Change Password} /> + }> + Dashboard} /> + Dashboard} /> + + + , + ); +} + +describe('AuthGuard', () => { + it('redirects to /login when not authenticated', () => { + mockUseAuth.mockReturnValue({ + user: null, + token: null, + isAuthenticated: false, + isLoading: false, + login: vi.fn(), + logout: vi.fn(), + updateUser: vi.fn(), + }); + + renderWithRoutes('/dashboard'); + + expect(screen.getByText('Login Page')).toBeInTheDocument(); + }); + + it('renders Outlet normally when authenticated and mustChangePassword=false', () => { + setAuth({ user: { ...mockUser, mustChangePassword: false } }); + + renderWithRoutes('/'); + + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + }); + + it('redirects to /trocar-senha when mustChangePassword=true', () => { + setAuth({ user: { ...mockUser, mustChangePassword: true } }); + + renderWithRoutes('/dashboard'); + + expect(screen.getByText('Change Password')).toBeInTheDocument(); + }); + + it('renders null while loading', () => { + mockUseAuth.mockReturnValue({ + user: null, + token: null, + isAuthenticated: false, + isLoading: true, + login: vi.fn(), + logout: vi.fn(), + updateUser: vi.fn(), + }); + + const { container } = renderWithRoutes('/'); + + expect(container).toBeEmptyDOMElement(); + }); +}); diff --git a/src/app/router/__tests__/RoleGuard.test.tsx b/src/app/router/__tests__/RoleGuard.test.tsx new file mode 100644 index 0000000..e129060 --- /dev/null +++ b/src/app/router/__tests__/RoleGuard.test.tsx @@ -0,0 +1,78 @@ +import { render, screen } from '@testing-library/react'; +import { MemoryRouter, Route, Routes } from 'react-router-dom'; +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { RoleGuard } from '../RoleGuard'; +import type { UserRole } from '../../../types/auth.types'; + +const mockUser = { id: '1', name: 'Test', email: 'test@test.com', role: 'ADMIN' as UserRole }; + +vi.mock('../../../modules/auth', () => ({ + useAuth: vi.fn(() => ({ + user: mockUser, + token: 'token', + isAuthenticated: true, + isLoading: false, + login: vi.fn(), + logout: vi.fn(), + })), +})); + +const { useAuth } = await import('../../../modules/auth'); +const mockUseAuth = vi.mocked(useAuth); + +function setRole(role: UserRole) { + mockUseAuth.mockReturnValue({ + user: { ...mockUser, role }, + token: 'token', + isAuthenticated: true, + isLoading: false, + login: vi.fn(), + logout: vi.fn(), + updateUser: vi.fn(), + }); +} + +function renderWithRoute(allowedRoles: UserRole[], initialPath: string) { + return render( + + + Dashboard} /> + }> + Users Page} /> + + + , + ); +} + +beforeEach(() => { + setRole('ADMIN'); +}); + +describe('RoleGuard', () => { + it('renders children when user has allowed role', () => { + setRole('ADMIN'); + renderWithRoute(['ADMIN'], '/usuarios'); + expect(screen.getByText('Users Page')).toBeInTheDocument(); + }); + + it('redirects to / when user role is not allowed', () => { + setRole('GESTOR_PROJETOS'); + renderWithRoute(['ADMIN'], '/usuarios'); + expect(screen.queryByText('Users Page')).not.toBeInTheDocument(); + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + }); + + it('redirects PO from admin+gestor_projetos routes', () => { + setRole('PO'); + renderWithRoute(['ADMIN', 'GESTOR_PROJETOS'], '/usuarios'); + expect(screen.queryByText('Users Page')).not.toBeInTheDocument(); + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + }); + + it('allows GESTOR_PROJETOS on admin+gestor_projetos routes', () => { + setRole('GESTOR_PROJETOS'); + renderWithRoute(['ADMIN', 'GESTOR_PROJETOS'], '/usuarios'); + expect(screen.getByText('Users Page')).toBeInTheDocument(); + }); +}); diff --git a/src/app/router/index.ts b/src/app/router/index.ts new file mode 100644 index 0000000..8acaa33 --- /dev/null +++ b/src/app/router/index.ts @@ -0,0 +1 @@ +export { router } from './AppRouter'; diff --git a/src/app/router/routes.tsx b/src/app/router/routes.tsx new file mode 100644 index 0000000..1e444cf --- /dev/null +++ b/src/app/router/routes.tsx @@ -0,0 +1,142 @@ +import type { RouteObject } from 'react-router-dom'; +import { Navigate } from 'react-router-dom'; +import { AppLayout } from '../../components/layout'; +import { DashboardPage } from '../../pages/dashboard/DashboardPage'; +import { LoginPage } from '../../pages/auth/LoginPage'; +import { EntregaveisListPage } from '../../pages/entregaveis/EntregaveisListPage'; +import { EntregavelCreatePage } from '../../pages/entregaveis/EntregavelCreatePage'; +import { EntregavelDetailPage } from '../../pages/entregaveis/EntregavelDetailPage'; +import { EntregavelEditPage } from '../../pages/entregaveis/EntregavelEditPage'; +import { OrdensServicoListPage } from '../../pages/ordens-servico/OrdensServicoListPage'; +import { OrdemServicoCreatePage } from '../../pages/ordens-servico/OrdemServicoCreatePage'; +import { OrdemServicoEditPage } from '../../pages/ordens-servico/OrdemServicoEditPage'; +import { OrdemServicoDetailPage } from '../../pages/ordens-servico/OrdemServicoDetailPage'; +import { SprintsPage } from '../../pages/sprints/SprintsPage'; +import { SprintCreatePage } from '../../pages/sprints/SprintCreatePage'; +import { SprintDetailPage } from '../../pages/sprints/SprintDetailPage'; +import { SprintEditPage } from '../../pages/sprints/SprintEditPage'; +import { ProfessionalsPage } from '../../pages/professionals/ProfessionalsPage'; +import { ProfessionalCreatePage } from '../../pages/professionals/ProfessionalCreatePage'; +import { ProfessionalEditPage } from '../../pages/professionals/ProfessionalEditPage'; +import { UsersPage } from '../../pages/users/UsersPage'; +import { UserCreatePage } from '../../pages/users/UserCreatePage'; +import { UserEditPage } from '../../pages/users/UserEditPage'; +import { ClientsPage } from '../../pages/clients/ClientsPage'; +import { ClientCreatePage } from '../../pages/clients/ClientCreatePage'; +import { ClientEditPage } from '../../pages/clients/ClientEditPage'; +import { ClientDetailPage } from '../../pages/clients/ClientDetailPage'; +import { ClientContractCreatePage } from '../../pages/clients/ClientContractCreatePage'; +import { ClientContractItemCreatePage } from '../../pages/clients/ClientContractItemCreatePage'; +import { ClientContractItemEditPage } from '../../pages/clients/ClientContractItemEditPage'; +import { ClientProjectCreatePage } from '../../pages/clients/ClientProjectCreatePage'; +import { ContractEditPage } from '../../pages/contracts/ContractEditPage'; +import { ProjectEditPage } from '../../pages/projects/ProjectEditPage'; +import { SettingsPage } from '../../pages/settings/SettingsPage'; +import { ChangePasswordPage } from '../../pages/auth/ChangePasswordPage'; +import { ForgotPasswordPage } from '../../pages/auth/ForgotPasswordPage'; +import { ResetPasswordPage } from '../../pages/auth/ResetPasswordPage'; +import { ApiKeysPage } from '../../pages/admin/api-keys'; +import { PoPage } from '../../pages/po/PoPage'; +import { FiscalContratoPage } from '../../pages/fiscal-contrato/FiscalContratoPage'; +import { GestorContratoPage } from '../../pages/gestor-contrato/GestorContratoPage'; +import { AuthGuard } from './AuthGuard'; +import { GuestGuard } from './GuestGuard'; +import { RoleGuard } from './RoleGuard'; +import { RootLayout } from './RootLayout'; + +export const routes: RouteObject[] = [ + { + element: , + children: [ + { + element: , + children: [{ path: '/login', element: }], + }, + { path: '/esqueci-senha', element: }, + { path: '/redefinir-senha/:token', element: }, + { + element: , + children: [ + { path: 'trocar-senha', element: }, + { + element: , + children: [ + // Acessivel a todos os roles + { index: true, element: }, + // Todos os perfis (visualização) + { + element: , + children: [ + { path: 'entregaveis', element: }, + { path: 'entregaveis/:id', element: }, + { path: 'ordens-servico', element: }, + { path: 'ordens-servico/:id', element: }, + { path: 'sprints', element: }, + { path: 'sprints/:id', element: }, + { path: 'clientes', element: }, + { path: 'clientes/:id', element: }, + ], + }, + // ADMIN + GESTOR_PROJETOS (criação e edição) + { + element: , + children: [ + { path: 'entregaveis/novo', element: }, + { path: 'entregaveis/:id/editar', element: }, + { path: 'ordens-servico/nova', element: }, + { path: 'ordens-servico/:id/editar', element: }, + { path: 'sprints/novo', element: }, + { path: 'sprints/:id/editar', element: }, + { path: 'profissionais', element: }, + { path: 'profissionais/novo', element: }, + { path: 'profissionais/:id/editar', element: }, + { path: 'clientes/novo', element: }, + { path: 'clientes/:id/editar', element: }, + { path: 'clientes/:id/contratos/novo', element: }, + { + path: 'clientes/:id/itens-contrato/novo', + element: , + }, + { + path: 'clientes/:id/itens-contrato/:itemId/editar', + element: , + }, + { path: 'clientes/:id/projetos/novo', element: }, + { path: 'contratos/:id/editar', element: }, + { path: 'projetos/:id/editar', element: }, + ], + }, + // PO only + { + element: , + children: [{ path: 'po', element: }], + }, + // FISCAL_CONTRATO only + { + element: , + children: [{ path: 'fiscal-contrato', element: }], + }, + // GESTOR_CONTRATO only + { + element: , + children: [{ path: 'gestor-contrato', element: }], + }, + // ADMIN only + { + element: , + children: [ + { path: 'usuarios', element: }, + { path: 'usuarios/novo', element: }, + { path: 'usuarios/:id/editar', element: }, + { path: 'configuracoes', element: }, + { path: 'admin/integracoes/api-keys', element: }, + ], + }, + ], + }, + ], + }, + { path: '*', element: }, + ], + }, +]; diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..cc51a3d20ad4bc961b596a6adfd686685cd84bb0 GIT binary patch literal 44919 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 JPDHLkV1myZcL)Fg literal 0 HcmV?d00001 diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/components/layout/AppLayout.tsx b/src/components/layout/AppLayout.tsx new file mode 100644 index 0000000..f01bc98 --- /dev/null +++ b/src/components/layout/AppLayout.tsx @@ -0,0 +1,25 @@ +import { Outlet } from 'react-router-dom'; +import { AppSidebar } from './AppSidebar'; +import { AppTopbar } from './AppTopbar'; +import { useSidebar } from '../../hooks/useSidebar'; + +export function AppLayout() { + const { isExpanded } = useSidebar(); + + return ( +
    + + + +
    + +
    +
    + ); +} diff --git a/src/components/layout/AppSidebar.tsx b/src/components/layout/AppSidebar.tsx new file mode 100644 index 0000000..91723cf --- /dev/null +++ b/src/components/layout/AppSidebar.tsx @@ -0,0 +1,75 @@ +import { ChevronsLeft, ChevronsRight } from 'lucide-react'; +import { NavItem } from './NavItem'; +import { navigationItems } from '../../constants/navigation'; +import { useSidebar } from '../../hooks/useSidebar'; +import { usePermission } from '../../hooks/usePermission'; + +export function AppSidebar() { + const { isExpanded, isMobile, isMobileOpen, closeMobile, toggleSidebar } = useSidebar(); + const { canAccess } = usePermission(); + + const visibleItems = navigationItems.filter((item) => canAccess(item.to)); + + // Mobile sidebar always shows full content (icon + label); + // collapse only applies to desktop. + const collapsed = isMobile ? false : !isExpanded; + + return ( + <> + {/* Mobile backdrop */} + {isMobileOpen && ( +
    + )} + + {/* Sidebar */} + + + ); +} diff --git a/src/components/layout/AppTopbar.tsx b/src/components/layout/AppTopbar.tsx new file mode 100644 index 0000000..82c4c36 --- /dev/null +++ b/src/components/layout/AppTopbar.tsx @@ -0,0 +1,99 @@ +import { useState, useRef, useEffect, useCallback } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { Menu, LogOut } from 'lucide-react'; +import { ThemeSwitcher } from '../ui/ThemeSwitcher'; +import { usePageTitle } from '../../hooks/usePageTitle'; +import { useSidebar } from '../../hooks/useSidebar'; +import { useAuth } from '../../modules/auth'; + +const roleLabels: Record = { + ADMIN: 'Administrador', + OPERATOR: 'Operador', + CLIENT: 'Cliente', +}; + +export function AppTopbar() { + const { isExpanded, openMobile } = useSidebar(); + const { title, subtitle } = usePageTitle(); + const { user, logout } = useAuth(); + const navigate = useNavigate(); + const [menuOpen, setMenuOpen] = useState(false); + const menuRef = useRef(null); + + const handleLogout = useCallback(() => { + logout(); + navigate('/login'); + }, [logout, navigate]); + + useEffect(() => { + function handleClickOutside(e: MouseEvent) { + if (menuRef.current && !menuRef.current.contains(e.target as Node)) { + setMenuOpen(false); + } + } + if (menuOpen) { + document.addEventListener('mousedown', handleClickOutside); + } + return () => document.removeEventListener('mousedown', handleClickOutside); + }, [menuOpen]); + + const userInitial = user?.name?.charAt(0).toUpperCase() || 'U'; + + return ( +
    +
    + +
    +

    {title}

    + {subtitle && {subtitle}} +
    +
    + +
    + +
    + + + {menuOpen && ( +
    +
    +

    {user?.name}

    +

    + {roleLabels[user?.role ?? ''] ?? user?.role} +

    +
    + +
    + )} +
    +
    +
    + ); +} diff --git a/src/components/layout/FormCard.tsx b/src/components/layout/FormCard.tsx new file mode 100644 index 0000000..ee3a998 --- /dev/null +++ b/src/components/layout/FormCard.tsx @@ -0,0 +1,17 @@ +import type { ReactNode } from 'react'; + +interface FormCardProps { + title: string; + children: ReactNode; +} + +export function FormCard({ title, children }: FormCardProps) { + return ( +
    +
    +

    {title}

    + {children} +
    +
    + ); +} diff --git a/src/components/layout/NavItem.tsx b/src/components/layout/NavItem.tsx new file mode 100644 index 0000000..00265de --- /dev/null +++ b/src/components/layout/NavItem.tsx @@ -0,0 +1,28 @@ +import type { LucideIcon } from 'lucide-react'; +import { Link, useLocation } from 'react-router-dom'; + +interface NavItemProps { + icon: LucideIcon; + label: string; + to: string; + active?: boolean; + collapsed?: boolean; +} + +export function NavItem({ icon: Icon, label, to, active, collapsed = false }: NavItemProps) { + const location = useLocation(); + const isActive = active ?? location.pathname === to; + + return ( + + + {!collapsed && {label}} + + ); +} diff --git a/src/components/layout/PageContainer.tsx b/src/components/layout/PageContainer.tsx new file mode 100644 index 0000000..f145f4e --- /dev/null +++ b/src/components/layout/PageContainer.tsx @@ -0,0 +1,14 @@ +import type { ReactNode } from 'react'; + +interface PageContainerProps { + children: ReactNode; + className?: string; +} + +export function PageContainer({ children, className }: PageContainerProps) { + return ( +
    + {children} +
    + ); +} diff --git a/src/components/layout/PageHeader.tsx b/src/components/layout/PageHeader.tsx new file mode 100644 index 0000000..8f4c103 --- /dev/null +++ b/src/components/layout/PageHeader.tsx @@ -0,0 +1,26 @@ +import { type ReactNode, useEffect } from 'react'; + +import { usePageTitle } from '../../hooks/usePageTitle'; +import { Breadcrumbs, type BreadcrumbItem } from '../ui'; + +interface PageHeaderProps { + title: string; + subtitle?: string; + actions?: ReactNode; + breadcrumbs?: BreadcrumbItem[]; +} + +export function PageHeader({ title, subtitle, actions, breadcrumbs }: PageHeaderProps) { + const { setPageTitle } = usePageTitle(); + + useEffect(() => { + setPageTitle(title, subtitle); + }, [title, subtitle, setPageTitle]); + + return ( +
    +
    {breadcrumbs && breadcrumbs.length > 0 && }
    + {actions &&
    {actions}
    } +
    + ); +} diff --git a/src/components/layout/__tests__/PageHeader.test.tsx b/src/components/layout/__tests__/PageHeader.test.tsx new file mode 100644 index 0000000..dd4ae29 --- /dev/null +++ b/src/components/layout/__tests__/PageHeader.test.tsx @@ -0,0 +1,63 @@ +import { render, screen } from '@testing-library/react'; +import { MemoryRouter } from 'react-router-dom'; +import { describe, it, expect } from 'vitest'; +import { PageHeader } from '../PageHeader'; +import { PageTitleProvider } from '../../../modules/page-title/PageTitleContext'; + +function renderWithRouter(ui: React.ReactElement) { + return render( + + {ui} + , + ); +} + +describe('PageHeader', () => { + it('renderiza breadcrumbs quando prop fornecida', () => { + renderWithRouter( + , + ); + + expect(screen.getByRole('navigation', { name: 'Breadcrumb' })).toBeInTheDocument(); + expect(screen.getByText('Início')).toBeInTheDocument(); + expect(screen.getByText('Página')).toBeInTheDocument(); + }); + + it('não renderiza breadcrumbs quando prop ausente', () => { + renderWithRouter(); + + expect(screen.queryByRole('navigation', { name: 'Breadcrumb' })).not.toBeInTheDocument(); + }); + + it('não renderiza breadcrumbs quando array vazio', () => { + renderWithRouter(); + + expect(screen.queryByRole('navigation', { name: 'Breadcrumb' })).not.toBeInTheDocument(); + }); + + it('renderiza ações com breadcrumbs', () => { + renderWithRouter( + Ação} + breadcrumbs={[{ label: 'Início', to: '/' }, { label: 'Atual' }]} + />, + ); + + expect(screen.getByText('Ação')).toBeInTheDocument(); + expect(screen.getByRole('navigation', { name: 'Breadcrumb' })).toBeInTheDocument(); + }); + + it('renderiza ações sem breadcrumbs', () => { + renderWithRouter( + Ação} />, + ); + + expect(screen.getByText('Ação')).toBeInTheDocument(); + expect(screen.queryByRole('navigation', { name: 'Breadcrumb' })).not.toBeInTheDocument(); + }); +}); diff --git a/src/components/layout/__tests__/Sidebar.test.tsx b/src/components/layout/__tests__/Sidebar.test.tsx new file mode 100644 index 0000000..4461b9e --- /dev/null +++ b/src/components/layout/__tests__/Sidebar.test.tsx @@ -0,0 +1,184 @@ +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { MemoryRouter } from 'react-router-dom'; +import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { SidebarProvider } from '../../../app/providers/SidebarProvider'; +import { AppSidebar } from '../AppSidebar'; +import { AppTopbar } from '../AppTopbar'; +import { AppLayout } from '../AppLayout'; +import { ThemeProvider } from '../../../app/providers/ThemeProvider'; +import { PageTitleProvider } from '../../../modules/page-title/PageTitleContext'; + +vi.mock('../../../modules/auth', () => ({ + useAuth: vi.fn(() => ({ + user: { id: '1', name: 'Admin', email: 'admin@test.com', role: 'ADMIN' }, + token: 'token', + isAuthenticated: true, + isLoading: false, + login: vi.fn(), + logout: vi.fn(), + })), +})); + +function mockMatchMedia(matches: boolean) { + window.matchMedia = vi.fn().mockImplementation(() => ({ + matches, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + })); +} + +function renderWithProviders(ui: React.ReactNode, { mobile = false } = {}) { + mockMatchMedia(mobile); + return render( + + + + {ui} + + + , + ); +} + +beforeEach(() => { + localStorage.clear(); + mockMatchMedia(false); +}); + +describe('AppSidebar', () => { + it('renders expanded by default with labels', () => { + renderWithProviders(); + const sidebar = screen.getByTestId('app-sidebar'); + expect(sidebar.className).toContain('md:w-60'); + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + expect(screen.getByAltText('ISIS')).toBeInTheDocument(); + }); + + it('collapses on toggle click hiding labels', async () => { + const user = userEvent.setup(); + renderWithProviders(); + + const toggle = screen.getByTestId('sidebar-toggle'); + await user.click(toggle); + + const sidebar = screen.getByTestId('app-sidebar'); + expect(sidebar.className).toContain('md:w-16'); + expect(screen.queryByText('Dashboard')).not.toBeInTheDocument(); + }); + + it('expands again on second toggle click', async () => { + const user = userEvent.setup(); + renderWithProviders(); + + const toggle = screen.getByTestId('sidebar-toggle'); + await user.click(toggle); + await user.click(toggle); + + const sidebar = screen.getByTestId('app-sidebar'); + expect(sidebar.className).toContain('md:w-60'); + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + }); + + it('persists collapsed preference in localStorage', async () => { + const user = userEvent.setup(); + renderWithProviders(); + + await user.click(screen.getByTestId('sidebar-toggle')); + expect(localStorage.getItem('@iasis:sidebar-expanded')).toBe('false'); + }); + + it('shows tooltip on collapsed NavItem', async () => { + const user = userEvent.setup(); + renderWithProviders(); + + await user.click(screen.getByTestId('sidebar-toggle')); + + const dashboardLink = screen.getByTitle('Dashboard'); + expect(dashboardLink).toBeInTheDocument(); + }); +}); + +describe('AppSidebar — mobile', () => { + it('is hidden by default on mobile', () => { + renderWithProviders(, { mobile: true }); + const sidebar = screen.getByTestId('app-sidebar'); + expect(sidebar.className).toContain('-translate-x-full'); + }); + + it('shows backdrop and sidebar when mobile open', async () => { + const user = userEvent.setup(); + renderWithProviders( + <> + + + , + { mobile: true }, + ); + + await user.click(screen.getByTestId('mobile-menu-button')); + + const sidebar = screen.getByTestId('app-sidebar'); + expect(sidebar.className).toContain('translate-x-0'); + expect(screen.getByTestId('sidebar-backdrop')).toBeInTheDocument(); + }); + + it('closes sidebar when clicking backdrop', async () => { + const user = userEvent.setup(); + renderWithProviders( + <> + + + , + { mobile: true }, + ); + + await user.click(screen.getByTestId('mobile-menu-button')); + await user.click(screen.getByTestId('sidebar-backdrop')); + + const sidebar = screen.getByTestId('app-sidebar'); + expect(sidebar.className).toContain('-translate-x-full'); + }); +}); + +describe('AppTopbar', () => { + it('has left-60 offset when sidebar is expanded on desktop', () => { + renderWithProviders(); + const header = screen.getByRole('banner'); + expect(header.className).toContain('md:left-60'); + }); + + it('has left-16 offset when sidebar is collapsed on desktop', async () => { + const user = userEvent.setup(); + renderWithProviders( + <> + + + , + ); + + await user.click(screen.getByTestId('sidebar-toggle')); + const header = screen.getByRole('banner'); + expect(header.className).toContain('md:left-16'); + }); + + it('shows hamburger button on mobile', () => { + renderWithProviders(, { mobile: true }); + expect(screen.getByTestId('mobile-menu-button')).toBeInTheDocument(); + }); +}); + +describe('AppLayout', () => { + it('has ml-60 when sidebar expanded', () => { + renderWithProviders(); + const main = screen.getByRole('main'); + expect(main.className).toContain('md:ml-60'); + }); + + it('has ml-16 when sidebar collapsed', async () => { + localStorage.setItem('@iasis:sidebar-expanded', 'false'); + renderWithProviders(); + const main = screen.getByRole('main'); + expect(main.className).toContain('md:ml-16'); + }); +}); diff --git a/src/components/layout/__tests__/SidebarRoles.test.tsx b/src/components/layout/__tests__/SidebarRoles.test.tsx new file mode 100644 index 0000000..4ba3fe6 --- /dev/null +++ b/src/components/layout/__tests__/SidebarRoles.test.tsx @@ -0,0 +1,102 @@ +import { render, screen } from '@testing-library/react'; +import { MemoryRouter } from 'react-router-dom'; +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { SidebarProvider } from '../../../app/providers/SidebarProvider'; +import { ThemeProvider } from '../../../app/providers/ThemeProvider'; +import { AppSidebar } from '../AppSidebar'; +import type { UserRole } from '../../../types/auth.types'; + +const mockUser = { id: '1', name: 'Test', email: 'test@test.com', role: 'ADMIN' as UserRole }; + +vi.mock('../../../modules/auth', () => ({ + useAuth: vi.fn(() => ({ + user: mockUser, + token: 'token', + isAuthenticated: true, + isLoading: false, + login: vi.fn(), + logout: vi.fn(), + })), +})); + +const { useAuth } = await import('../../../modules/auth'); +const mockUseAuth = vi.mocked(useAuth); + +function setRole(role: UserRole) { + mockUseAuth.mockReturnValue({ + user: { ...mockUser, role }, + token: 'token', + isAuthenticated: true, + isLoading: false, + login: vi.fn(), + logout: vi.fn(), + updateUser: vi.fn(), + }); +} + +function mockMatchMedia() { + window.matchMedia = vi.fn().mockImplementation(() => ({ + matches: false, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + })); +} + +function renderSidebar() { + mockMatchMedia(); + return render( + + + + + + + , + ); +} + +beforeEach(() => { + localStorage.clear(); + setRole('ADMIN'); +}); + +describe('AppSidebar — role-based navigation', () => { + it('ADMIN sees all menu items', () => { + setRole('ADMIN'); + renderSidebar(); + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + expect(screen.getByText('Ordens de Serviço')).toBeInTheDocument(); + expect(screen.getByText('Entregáveis')).toBeInTheDocument(); + expect(screen.getByText('Clientes')).toBeInTheDocument(); + expect(screen.getByText('Sprints')).toBeInTheDocument(); + expect(screen.getByText('Profissionais')).toBeInTheDocument(); + expect(screen.getByText('Usuários')).toBeInTheDocument(); + expect(screen.getByText('API Keys')).toBeInTheDocument(); + }); + + it('GESTOR_PROJETOS does not see Usuários or API Keys', () => { + setRole('GESTOR_PROJETOS'); + renderSidebar(); + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + expect(screen.getByText('Ordens de Serviço')).toBeInTheDocument(); + expect(screen.getByText('Entregáveis')).toBeInTheDocument(); + expect(screen.getByText('Sprints')).toBeInTheDocument(); + expect(screen.getByText('Profissionais')).toBeInTheDocument(); + expect(screen.getByText('Clientes')).toBeInTheDocument(); + expect(screen.queryByText('Usuários')).not.toBeInTheDocument(); + expect(screen.queryByText('API Keys')).not.toBeInTheDocument(); + }); + + it('PO sees only its allowed routes', () => { + setRole('PO'); + renderSidebar(); + expect(screen.getByText('Dashboard')).toBeInTheDocument(); + expect(screen.getByText('Entregáveis')).toBeInTheDocument(); + expect(screen.getByText('Ordens de Serviço')).toBeInTheDocument(); + expect(screen.getByText('Clientes')).toBeInTheDocument(); + expect(screen.getByText('Sprints')).toBeInTheDocument(); + expect(screen.queryByText('Profissionais')).not.toBeInTheDocument(); + expect(screen.queryByText('Usuários')).not.toBeInTheDocument(); + expect(screen.queryByText('API Keys')).not.toBeInTheDocument(); + }); +}); diff --git a/src/components/layout/index.ts b/src/components/layout/index.ts new file mode 100644 index 0000000..b76ed77 --- /dev/null +++ b/src/components/layout/index.ts @@ -0,0 +1,7 @@ +export { FormCard } from './FormCard'; +export { PageContainer } from './PageContainer'; +export { PageHeader } from './PageHeader'; +export { NavItem } from './NavItem'; +export { AppLayout } from './AppLayout'; +export { AppSidebar } from './AppSidebar'; +export { AppTopbar } from './AppTopbar'; diff --git a/src/components/shared/.gitkeep b/src/components/shared/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/components/shared/PasswordStrengthIndicator.tsx b/src/components/shared/PasswordStrengthIndicator.tsx new file mode 100644 index 0000000..e839fab --- /dev/null +++ b/src/components/shared/PasswordStrengthIndicator.tsx @@ -0,0 +1,62 @@ +interface Rule { + label: string; + test: (password: string) => boolean; +} + +const rules: Rule[] = [ + { label: 'Mínimo 8 caracteres', test: (p) => p.length >= 8 }, + { label: 'Letra maiúscula', test: (p) => /[A-Z]/.test(p) }, + { label: 'Letra minúscula', test: (p) => /[a-z]/.test(p) }, + { label: 'Número', test: (p) => /[0-9]/.test(p) }, +]; + +interface PasswordStrengthIndicatorProps { + password: string; +} + +export function PasswordStrengthIndicator({ password }: PasswordStrengthIndicatorProps) { + const passed = rules.filter((r) => r.test(password)).length; + const total = rules.length; + const strengthPercent = (passed / total) * 100; + + const strengthColor = + passed === 0 + ? 'bg-white/10' + : passed < 2 + ? 'bg-red-500' + : passed < total + ? 'bg-yellow-500' + : 'bg-green-500'; + + return ( +
    +
    +
    +
    +
      + {rules.map((rule) => { + const ok = rule.test(password); + return ( +
    • + + {rule.label} +
    • + ); + })} +
    +
    + ); +} diff --git a/src/components/shared/StatusBadge.tsx b/src/components/shared/StatusBadge.tsx new file mode 100644 index 0000000..b07d52d --- /dev/null +++ b/src/components/shared/StatusBadge.tsx @@ -0,0 +1,18 @@ +import { Badge } from '../ui/Badge'; +import { getStatusConfig } from '../../constants/deliverable-status'; +import type { DeliverableStatus } from '../../types/deliverable.types'; + +interface StatusBadgeProps { + status: DeliverableStatus; + size?: 'sm' | 'md' | 'lg'; +} + +export function StatusBadge({ status, size }: StatusBadgeProps) { + const config = getStatusConfig(status); + + return ( + + {config.label} + + ); +} diff --git a/src/components/shared/StatusHistoryList.tsx b/src/components/shared/StatusHistoryList.tsx new file mode 100644 index 0000000..93e7952 --- /dev/null +++ b/src/components/shared/StatusHistoryList.tsx @@ -0,0 +1,68 @@ +import { ArrowRight } from 'lucide-react'; +import { useStatusHistory } from '../../hooks/useDeliverables'; +import { StatusBadge } from './StatusBadge'; + +interface StatusHistoryListProps { + serviceOrderId: string; +} + +function formatDateTime(dateString: string): string { + const date = new Date(dateString); + return date.toLocaleString('pt-BR', { + day: '2-digit', + month: '2-digit', + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + }); +} + +export function StatusHistoryList({ serviceOrderId }: StatusHistoryListProps) { + const { data: history = [], isLoading } = useStatusHistory(serviceOrderId); + + if (isLoading) { + return ( +
    + {[1, 2, 3].map((i) => ( +
    + ))} +
    + ); + } + + if (history.length === 0) { + return

    Nenhuma mudança de status registrada.

    ; + } + + return ( +
    + {history.map((item) => ( +
    +
    + {item.previousStatus && ( + <> + + + + )} + +
    + + {item.observation && ( +

    {item.observation}

    + )} + +
    + {formatDateTime(item.createdAt)} + {item.createdBy && ( + <> + · + {item.createdBy} + + )} +
    +
    + ))} +
    + ); +} diff --git a/src/components/shared/StatusTransitionModal.tsx b/src/components/shared/StatusTransitionModal.tsx new file mode 100644 index 0000000..48cdda8 --- /dev/null +++ b/src/components/shared/StatusTransitionModal.tsx @@ -0,0 +1,231 @@ +import { useState, useEffect, useCallback } from 'react'; +import { createPortal } from 'react-dom'; +import { Link } from 'react-router-dom'; +import { AlertTriangle } from 'lucide-react'; +import axios from 'axios'; +import { DeliverableStatus } from '../../types/deliverable.types'; +import { useAllowedTransitions, useChangeStatus } from '../../hooks/useDeliverables'; +import { useToast } from '../ui/Toast'; +import { Button } from '../ui/Button'; +import { StatusBadge } from './StatusBadge'; + +interface StatusTransitionModalProps { + isOpen: boolean; + onClose: () => void; + serviceOrderId: string; + currentStatus: DeliverableStatus; + sprintLinked?: boolean; + workOrderId?: string | null; +} + +const OBSERVATION_REQUIRED_TARGETS = new Set([ + DeliverableStatus.CANCELADA, + DeliverableStatus.GLOSADA, +]); + +function isObservationRequired(from: DeliverableStatus, to: DeliverableStatus): boolean { + if (OBSERVATION_REQUIRED_TARGETS.has(to)) return true; + if (from === DeliverableStatus.EM_REVISAO && to === DeliverableStatus.AGUARDANDO_VALIDACAO) { + return true; + } + return false; +} + +export function StatusTransitionModal({ + isOpen, + onClose, + serviceOrderId, + currentStatus, + sprintLinked = true, + workOrderId, +}: StatusTransitionModalProps) { + const [selectedStatus, setSelectedStatus] = useState(null); + const [observation, setObservation] = useState(''); + const [submissionError, setSubmissionError] = useState(null); + + const { data: allowedTransitions = [], isLoading: isLoadingTransitions } = + useAllowedTransitions(serviceOrderId); + const changeStatus = useChangeStatus(); + const { showToast } = useToast(); + + const observationRequired = + selectedStatus !== null && isObservationRequired(currentStatus, selectedStatus); + + const canSubmit = + selectedStatus !== null && + (!observationRequired || observation.trim().length > 0) && + !changeStatus.isPending; + + const handleClose = useCallback(() => { + if (changeStatus.isPending) return; + setSelectedStatus(null); + setObservation(''); + onClose(); + }, [onClose, changeStatus.isPending]); + + const handleKeyDown = useCallback( + (e: KeyboardEvent) => { + if (e.key === 'Escape') handleClose(); + }, + [handleClose], + ); + + useEffect(() => { + if (isOpen) { + document.addEventListener('keydown', handleKeyDown); + return () => document.removeEventListener('keydown', handleKeyDown); + } + }, [isOpen, handleKeyDown]); + + useEffect(() => { + if (!isOpen) { + setSelectedStatus(null); + setObservation(''); + setSubmissionError(null); + } + }, [isOpen]); + + const handleSubmit = () => { + if (!selectedStatus || !canSubmit) return; + setSubmissionError(null); + + changeStatus.mutate( + { + id: serviceOrderId, + data: { + status: selectedStatus, + observation: observation.trim() || undefined, + }, + }, + { + onSuccess: (response) => { + if (response.lowBalanceWarning) { + showToast('Atenção: o saldo da OS Mãe está abaixo de 20% após esta emissão', 'warning'); + } else { + showToast('Status atualizado com sucesso', 'success'); + } + handleClose(); + }, + onError: (err) => { + const message = axios.isAxiosError(err) + ? (err.response?.data?.message as string | undefined) + : undefined; + if (message?.includes('Saldo insuficiente no pool')) { + setSubmissionError(message); + } else { + showToast(message ?? 'Erro ao atualizar status', 'error'); + } + }, + }, + ); + }; + + if (!isOpen) return null; + + return createPortal( +
    +
    e.stopPropagation()} + > +

    Alterar Status

    +

    + Status atual: +

    + + {isLoadingTransitions ? ( +

    Carregando...

    + ) : allowedTransitions.length === 0 ? ( +

    + Não há transições disponíveis para este status. +

    + ) : ( + <> +
    + +
    + {allowedTransitions.map((status) => ( + + ))} +
    +
    + + {currentStatus === DeliverableStatus.RASCUNHO && !sprintLinked && ( +
    + +

    + Para emitir este entregável, vincule-o a uma sprint na tela de edição. +

    +
    + )} + +
    + + {observationRequired && ( +

    + Observação obrigatória para esta transição +

    + )} +