From 9d679cd029ee2f76d87941d8c051c801d462e4fe Mon Sep 17 00:00:00 2001 From: Damien Coles Date: Mon, 26 Jan 2026 11:25:38 -0500 Subject: [PATCH] public-ready-init --- .dockerignore | 35 + .env.example | 20 + .gitignore | 26 + .graphqlrc.yaml | 9 + .npmrc | 1 + .prettierignore | 9 + .prettierrc | 15 + Dockerfile | 56 + README.md | 154 + docker-compose.yml | 19 + eslint.config.js | 42 + houdini.config.js | 24 + package-lock.json | 6928 +++++++++++++++++ package.json | 50 + postcss.config.js | 5 + schema.graphql | 4333 +++++++++++ src/app.css | 49 + src/app.d.ts | 13 + src/app.html | 12 + src/lib/assets/favicon.svg | 1 + src/lib/auth.ts | 164 + src/lib/components/AuthenticatedImage.svelte | 50 + src/lib/components/AuthenticatedVideo.svelte | 119 + src/lib/components/OffCanvasLeft.svelte | 70 + src/lib/components/OffCanvasRight.svelte | 70 + .../components/accounts/AddressLabors.svelte | 98 + .../accounts/AddressLaborsCompact.svelte | 72 + .../accounts/AddressSchedules.svelte | 122 + .../accounts/AddressSchedulesCompact.svelte | 83 + .../components/accounts/CreateAccount.svelte | 11 + .../accounts/CreateAccountAddress.svelte | 151 + .../accounts/CreateAccountContact.svelte | 142 + .../accounts/CreateAccountLabor.svelte | 100 + .../accounts/CreateAccountRevenue.svelte | 104 + .../accounts/CreateAccountSchedule.svelte | 157 + .../components/accounts/EditAccount.svelte | 46 + .../accounts/EditAccountAddress.svelte | 136 + .../accounts/EditAccountContact.svelte | 139 + .../accounts/EditAccountLabor.svelte | 141 + .../accounts/EditAccountRevenue.svelte | 134 + .../accounts/EditAccountSchedule.svelte | 182 + .../customers/CreateCustomer.svelte | 10 + .../customers/CreateCustomerAddress.svelte | 150 + .../customers/CreateCustomerContact.svelte | 142 + .../components/customers/EditCustomer.svelte | 46 + .../customers/EditCustomerAddress.svelte | 157 + .../customers/EditCustomerContact.svelte | 139 + .../customers/ViewCustomerAccounts.svelte | 104 + .../factories/EntityListFactory.svelte | 356 + .../forms/accounts/AccountEditForm.svelte | 128 + .../forms/accounts/AccountForm.svelte | 131 + .../forms/calendar/EventEditForm.svelte | 356 + .../forms/calendar/EventForm.svelte | 301 + .../forms/calendar/EventProjectForm.svelte | 492 ++ .../forms/customers/CustomerEditForm.svelte | 155 + .../forms/customers/CustomerForm.svelte | 111 + .../NotificationRuleEditForm.svelte | 528 ++ .../notifications/NotificationRuleForm.svelte | 514 ++ .../forms/profile/ProfileEditForm.svelte | 170 + .../profiles/CustomerProfileCreateForm.svelte | 113 + .../profiles/CustomerProfileEditForm.svelte | 123 + .../profiles/TeamProfileCreateForm.svelte | 126 + .../forms/profiles/TeamProfileEditForm.svelte | 137 + .../ProjectCategoryEditForm.svelte | 122 + .../projectScopes/ProjectCategoryForm.svelte | 87 + .../projectScopes/ProjectScopeEditForm.svelte | 115 + .../projectScopes/ProjectScopeForm.svelte | 198 + .../projectScopes/ProjectTaskEditForm.svelte | 156 + .../projectScopes/ProjectTaskForm.svelte | 121 + .../ProjectCategoryTemplateForm.svelte | 50 + .../ProjectScopeTemplateEditForm.svelte | 66 + .../templates/ProjectScopeTemplateForm.svelte | 90 + .../templates/ProjectTaskTemplateForm.svelte | 88 + .../forms/projects/ProjectEditForm.svelte | 233 + .../forms/projects/ProjectForm.svelte | 347 + .../forms/reports/ReportEditForm.svelte | 125 + .../forms/reports/ReportForm.svelte | 96 + .../forms/scopes/AreaEditForm.svelte | 89 + .../components/forms/scopes/AreaForm.svelte | 77 + .../forms/scopes/ScopeEditForm.svelte | 97 + .../components/forms/scopes/ScopeForm.svelte | 163 + .../forms/scopes/TaskEditForm.svelte | 140 + .../components/forms/scopes/TaskForm.svelte | 124 + .../templates/AreaTemplateAddForm.svelte | 50 + .../templates/ScopeTemplateEditForm.svelte | 61 + .../scopes/templates/ScopeTemplateForm.svelte | 90 + .../templates/TaskTemplateAddForm.svelte | 89 + .../forms/services/ServiceEditForm.svelte | 172 + .../forms/services/ServiceForm.svelte | 156 + .../forms/services/ServiceGenerateForm.svelte | 263 + .../ProjectScopeTemplateListItem.svelte | 102 + .../templates/ProjectTaskTemplateList.svelte | 163 + .../ProjectTaskTemplateReadonlyList.svelte | 55 + .../templates/ScopeTemplateListItem.svelte | 98 + src/lib/components/media/MediaManager.svelte | 580 ++ .../components/media/MediaUploadZone.svelte | 100 + .../components/media/PhotoGalleryItem.svelte | 177 + .../components/media/VideoGalleryItem.svelte | 92 + .../components/messages/MessageBell.svelte | 42 + .../modals/accounts/AccountViewModal.svelte | 297 + .../modals/common/ConfirmDeleteModal.svelte | 64 + .../modals/common/DeleteModal.svelte | 105 + .../services/CompleteServiceModal.svelte | 102 + src/lib/components/nav/TopNav.svelte | 347 + .../notifications/NotificationBell.svelte | 52 + .../NotificationCenterContent.svelte | 174 + src/lib/components/profile/EditProfile.svelte | 50 + .../components/profiles/CreateProfile.svelte | 72 + .../profiles/EditCustomerProfile.svelte | 52 + .../profiles/EditTeamProfile.svelte | 52 + .../components/reports/CreateReport.svelte | 10 + src/lib/components/reports/EditReport.svelte | 65 + .../scope-builder/ClearConfirmModal.svelte | 23 + .../scope-builder/CollapsibleCard.svelte | 154 + .../DesktopRequiredScreen.svelte | 29 + .../scope-builder/EditingIndicator.svelte | 29 + .../scope-builder/EmptyState.svelte | 29 + .../scope-builder/ImportJsonModal.svelte | 178 + .../ImportJsonStepPreview.svelte | 65 + .../scope-builder/ImportJsonStepType.svelte | 39 + .../scope-builder/ImportJsonStepUpload.svelte | 46 + .../scope-builder/LoadTemplateModal.svelte | 116 + .../scope-builder/ProjectCategoryList.svelte | 436 ++ .../scope-builder/ScopeBuilderHeader.svelte | 183 + .../scope-builder/ScopeTemplateInfo.svelte | 57 + .../scope-builder/ServiceAreaList.svelte | 454 ++ .../components/scope-builder/TaskCard.svelte | 252 + .../scope-builder/TutorialSection.svelte | 43 + src/lib/components/scope-builder/index.ts | 24 + src/lib/components/scope-builder/types.ts | 66 + .../utils/jsonImportValidation.ts | 184 + .../scope-builder/utils/payloadBuilders.ts | 39 + .../scope-builder/utils/validation.ts | 53 + .../components/services/CreateService.svelte | 58 + .../components/services/EditService.svelte | 43 + .../services/EditServiceTeamMembers.svelte | 218 + .../services/GenerateServices.svelte | 58 + .../components/sessions/SessionNotes.svelte | 349 + src/lib/components/shared/HybridView.svelte | 142 + src/lib/config/entityConfig.ts | 205 + src/lib/constants/eventTypes.ts | 229 + src/lib/graphql/client.ts | 52 + src/lib/graphql/mutations/AddParticipant.gql | 15 + .../graphql/mutations/ArchiveConversation.gql | 5 + .../graphql/mutations/CreateConversation.gql | 23 + .../graphql/mutations/DeleteConversation.gql | 3 + src/lib/graphql/mutations/DeleteMessage.gql | 3 + .../mutations/MarkConversationAsRead.gql | 6 + .../graphql/mutations/MuteConversation.gql | 5 + src/lib/graphql/mutations/SendMessage.gql | 17 + .../mutations/accounts/CreateAccount.graphql | 42 + .../accounts/CreateAccountAddress.graphql | 13 + .../accounts/CreateAccountContact.graphql | 13 + .../mutations/accounts/DeleteAccount.graphql | 3 + .../accounts/DeleteAccountAddress.graphql | 3 + .../accounts/DeleteAccountContact.graphql | 3 + .../mutations/accounts/UpdateAccount.graphql | 11 + .../accounts/UpdateAccountAddress.graphql | 13 + .../accounts/UpdateAccountContact.graphql | 13 + .../customers/CreateCustomer.graphql | 33 + .../customers/CreateCustomerAddress.graphql | 12 + .../customers/CreateCustomerContact.graphql | 13 + .../customers/DeleteCustomer.graphql | 3 + .../customers/DeleteCustomerAddress.graphql | 3 + .../customers/DeleteCustomerContact.graphql | 3 + .../customers/UpdateCustomer.graphql | 12 + .../customers/UpdateCustomerAddress.graphql | 12 + .../customers/UpdateCustomerContact.graphql | 13 + .../mutations/labor/CreateLabor.graphql | 9 + .../mutations/labor/DeleteLabor.graphql | 3 + .../mutations/labor/UpdateLabor.graphql | 9 + .../CreateNotificationRule.graphql | 16 + .../notifications/DeleteNotification.graphql | 3 + .../DeleteNotificationRule.graphql | 3 + .../MarkAllNotificationsAsRead.graphql | 3 + .../MarkNotificationAsRead.graphql | 7 + .../UpdateNotificationRule.graphql | 10 + .../profiles/CreateCustomerProfile.graphql | 16 + .../profiles/CreateTeamProfile.graphql | 14 + .../profiles/DeleteCustomerProfile.graphql | 3 + .../profiles/DeleteTeamProfile.graphql | 3 + .../profiles/UpdateCustomerProfile.graphql | 16 + .../profiles/UpdateTeamProfile.graphql | 14 + .../CreateProjectCategory.graphql | 8 + .../projectScopes/CreateProjectScope.graphql | 11 + .../CreateProjectScopeFromTemplate.graphql | 9 + .../projectScopes/CreateProjectTask.graphql | 10 + .../CreateProjectTaskCompletion.graphql | 13 + .../DeleteProjectCategory.graphql | 3 + .../projectScopes/DeleteProjectScope.graphql | 3 + .../projectScopes/DeleteProjectTask.graphql | 3 + .../DeleteProjectTaskCompletion.graphql | 3 + .../UpdateProjectCategory.graphql | 8 + .../projectScopes/UpdateProjectScope.graphql | 11 + .../projectScopes/UpdateProjectTask.graphql | 10 + .../UpdateProjectTaskCompletion.graphql | 13 + .../CreateProjectCategoryTemplate.graphql | 8 + .../CreateProjectScopeTemplate.graphql | 8 + ...CreateProjectScopeTemplateFromJson.graphql | 8 + .../CreateProjectTaskTemplate.graphql | 10 + .../DeleteProjectCategoryTemplate.graphql | 3 + .../DeleteProjectScopeTemplate.graphql | 3 + .../DeleteProjectTaskTemplate.graphql | 3 + .../UpdateProjectCategoryTemplate.graphql | 8 + .../UpdateProjectScopeTemplate.graphql | 8 + .../UpdateProjectTaskTemplate.graphql | 10 + .../mutations/projects/CreateProject.graphql | 20 + .../mutations/projects/DeleteProject.graphql | 3 + .../mutations/projects/UpdateProject.graphql | 17 + .../mutations/reports/CreateReport.graphql | 10 + .../mutations/reports/DeleteReport.graphql | 3 + .../mutations/reports/UpdateReport.graphql | 23 + .../mutations/revenue/CreateRevenue.graphql | 9 + .../mutations/revenue/DeleteRevenue.graphql | 3 + .../mutations/revenue/UpdateRevenue.graphql | 9 + .../schedules/CreateSchedule.graphql | 18 + .../schedules/DeleteSchedule.graphql | 3 + .../schedules/UpdateSchedule.graphql | 18 + .../mutations/scopes/CreateArea.graphql | 8 + .../mutations/scopes/CreateScope.graphql | 10 + .../mutations/scopes/CreateTask.graphql | 12 + .../scopes/CreateTaskCompletion.graphql | 12 + .../mutations/scopes/DeleteArea.graphql | 3 + .../mutations/scopes/DeleteScope.graphql | 3 + .../mutations/scopes/DeleteTask.graphql | 3 + .../scopes/DeleteTaskCompletion.graphql | 3 + .../mutations/scopes/UpdateArea.graphql | 8 + .../mutations/scopes/UpdateScope.graphql | 10 + .../mutations/scopes/UpdateTask.graphql | 12 + .../scopes/UpdateTaskCompletion.graphql | 12 + .../templates/CreateAreaTemplate.graphql | 18 + .../templates/CreateScopeFromJson.graphql | 24 + .../templates/CreateScopeFromTemplate.graphql | 16 + .../templates/CreateScopeTemplate.graphql | 14 + .../templates/CreateTaskTemplate.graphql | 12 + .../templates/DeleteAreaTemplate.graphql | 3 + .../templates/DeleteScopeTemplate.graphql | 3 + .../templates/DeleteTaskTemplate.graphql | 3 + .../templates/UpdateAreaTemplate.graphql | 18 + .../templates/UpdateScopeTemplate.graphql | 14 + .../templates/UpdateTaskTemplate.graphql | 12 + .../mutations/services/CreateService.graphql | 12 + .../mutations/services/DeleteService.graphql | 3 + .../services/GenerateServicesByMonth.graphql | 9 + .../mutations/services/UpdateService.graphql | 12 + .../sessions/AddProjectTaskCompletion.graphql | 26 + .../sessions/AddTaskCompletion.graphql | 25 + .../sessions/CloseProjectSession.graphql | 17 + .../sessions/CloseServiceSession.graphql | 25 + .../sessions/OpenProjectSession.graphql | 17 + .../sessions/OpenServiceSession.graphql | 25 + .../RemoveProjectTaskCompletion.graphql | 26 + .../sessions/RemoveTaskCompletion.graphql | 25 + .../sessions/RevertProjectSession.graphql | 3 + .../sessions/RevertServiceSession.graphql | 3 + .../images/DeleteProjectSessionImage.graphql | 3 + .../images/DeleteServiceSessionImage.graphql | 3 + .../images/UpdateProjectSessionImage.graphql | 29 + .../images/UpdateServiceSessionImage.graphql | 29 + .../images/UploadProjectSessionImage.graphql | 29 + .../images/UploadServiceSessionImage.graphql | 29 + .../notes/CreateProjectSessionNote.graphql | 11 + .../notes/CreateServiceSessionNote.graphql | 11 + .../notes/DeleteProjectSessionNote.graphql | 3 + .../notes/DeleteServiceSessionNote.graphql | 3 + .../notes/UpdateProjectSessionNote.graphql | 11 + .../notes/UpdateServiceSessionNote.graphql | 11 + .../videos/DeleteProjectSessionVideo.graphql | 3 + .../videos/DeleteServiceSessionVideo.graphql | 3 + .../videos/UploadProjectSessionVideo.graphql | 34 + .../videos/UploadServiceSessionVideo.graphql | 34 + src/lib/graphql/queries/GetConversation.gql | 108 + .../queries/GetConversationsByEntity.gql | 25 + .../graphql/queries/GetMyConversations.gql | 63 + .../graphql/queries/GetUnreadMessageCount.gql | 3 + .../queries/accounts/GetAccount.graphql | 50 + .../accounts/GetAccountAddress.graphql | 23 + .../accounts/GetAccountContact.graphql | 13 + .../queries/accounts/GetAccounts.graphql | 54 + .../queries/customers/GetCustomer.graphql | 33 + .../customers/GetCustomerAddress.graphql | 12 + .../customers/GetCustomerContact.graphql | 13 + .../queries/customers/GetCustomers.graphql | 33 + .../graphql/queries/labor/GetLabor.graphql | 9 + .../graphql/queries/labor/GetLabors.graphql | 9 + .../notifications/GetMyNotifications.graphql | 24 + .../GetNotificationRules.graphql | 18 + .../GetUnreadNotificationCount.graphql | 3 + src/lib/graphql/queries/profile/GetMe.graphql | 31 + .../profiles/GetCustomerProfile.graphql | 16 + .../profiles/GetCustomerProfiles.graphql | 16 + .../queries/profiles/GetTeamProfile.graphql | 14 + .../queries/profiles/GetTeamProfiles.graphql | 14 + .../GetProjectCategories.graphql | 8 + .../projectScopes/GetProjectCategory.graphql | 8 + .../projectScopes/GetProjectScope.graphql | 23 + .../projectScopes/GetProjectScopes.graphql | 20 + .../projectScopes/GetProjectTask.graphql | 10 + .../GetProjectTaskCompletion.graphql | 11 + .../GetProjectTaskCompletions.graphql | 11 + .../projectScopes/GetProjectTasks.graphql | 10 + .../GetProjectCategoryTemplate.graphql | 8 + .../GetProjectCategoryTemplates.graphql | 34 + .../templates/GetProjectScopeTemplate.graphql | 8 + .../GetProjectScopeTemplates.graphql | 8 + .../templates/GetProjectTaskTemplate.graphql | 10 + .../templates/GetProjectTaskTemplates.graphql | 36 + .../queries/projects/GetProject.graphql | 21 + .../queries/projects/GetProjects.graphql | 21 + .../projects/GetProjectsByTeamMember.graphql | 43 + .../graphql/queries/reports/GetReport.graphql | 45 + .../queries/reports/GetReports.graphql | 10 + .../queries/revenue/GetRevenue.graphql | 9 + .../queries/revenue/GetRevenues.graphql | 9 + .../queries/schedules/GetSchedule.graphql | 18 + .../queries/schedules/GetSchedules.graphql | 18 + .../graphql/queries/scopes/GetArea.graphql | 18 + .../graphql/queries/scopes/GetAreas.graphql | 16 + .../graphql/queries/scopes/GetScope.graphql | 26 + .../graphql/queries/scopes/GetScopes.graphql | 26 + .../graphql/queries/scopes/GetTask.graphql | 12 + .../queries/scopes/GetTaskCompletion.graphql | 12 + .../queries/scopes/GetTaskCompletions.graphql | 12 + .../graphql/queries/scopes/GetTasks.graphql | 12 + .../scopes/templates/GetAreaTemplate.graphql | 18 + .../scopes/templates/GetAreaTemplates.graphql | 18 + .../scopes/templates/GetScopeTemplate.graphql | 24 + .../templates/GetScopeTemplates.graphql | 8 + .../scopes/templates/GetTaskTemplate.graphql | 12 + .../scopes/templates/GetTaskTemplates.graphql | 12 + .../queries/services/GetService.graphql | 13 + .../queries/services/GetServices.graphql | 13 + .../services/GetServicesByTeamMember.graphql | 38 + .../services/GetServicesWithDetails.graphql | 13 + .../sessions/GetActiveProjectSession.graphql | 26 + .../sessions/GetActiveServiceSession.graphql | 34 + .../sessions/GetProjectSession.graphql | 35 + .../sessions/GetProjectSessions.graphql | 17 + .../sessions/GetServiceSession.graphql | 34 + .../sessions/GetServiceSessions.graphql | 14 + .../images/GetProjectSessionImage.graphql | 30 + .../images/GetProjectSessionImages.graphql | 30 + .../images/GetServiceSessionImage.graphql | 30 + .../images/GetServiceSessionImages.graphql | 30 + .../notes/GetProjectSessionNotes.graphql | 11 + .../notes/GetServiceSessionNotes.graphql | 11 + .../videos/GetProjectSessionVideo.graphql | 30 + .../videos/GetProjectSessionVideos.graphql | 30 + .../videos/GetServiceSessionVideo.graphql | 30 + .../videos/GetServiceSessionVideos.graphql | 30 + src/lib/media.ts | 220 + src/lib/services/calendar.ts | 140 + src/lib/services/emailer.ts | 175 + src/lib/stores/offCanvas.ts | 85 + src/lib/types/entities.ts | 118 + src/lib/utils/date.ts | 175 + src/lib/utils/entityUtils.ts | 154 + src/lib/utils/offCanvas.ts | 18 + src/lib/utils/relay.ts | 38 + src/routes/+layout.svelte | 18 + src/routes/+page.svelte | 61 + src/routes/accounts/+page.svelte | 327 + src/routes/accounts/[id]/+page.svelte | 1171 +++ src/routes/calendar/+page.svelte | 231 + src/routes/calendar/[id]/+page.svelte | 217 + src/routes/calendar/create/+page.svelte | 25 + .../calendar/create/project/[id]/+page.svelte | 170 + src/routes/calendar/edit/[id]/+page.svelte | 66 + src/routes/customers/+page.svelte | 411 + src/routes/customers/[id]/+page.svelte | 812 ++ src/routes/login/+page.svelte | 50 + src/routes/notifications/+page.svelte | 241 + src/routes/profiles/+page.svelte | 399 + .../profiles/customer/[id]/+page.svelte | 193 + src/routes/profiles/team/[id]/+page.svelte | 219 + .../project-scopes/templates/+page.svelte | 220 + .../templates/[id]/+page.svelte | 208 + .../templates/edit/[id]/+page.svelte | 466 ++ src/routes/projects/+page.svelte | 362 + src/routes/projects/[id]/+page.svelte | 803 ++ src/routes/register/+page.svelte | 26 + src/routes/reports/+page.svelte | 277 + src/routes/reports/[id]/+page.svelte | 1305 ++++ src/routes/scope-builder/+page.svelte | 617 ++ .../[accountAddressId]/+page.svelte | 310 + src/routes/scopes/create/[id]/+page.svelte | 56 + .../scopes/create/area/[scopeId]/+page.svelte | 19 + .../scopes/create/task/[areaId]/+page.svelte | 19 + src/routes/scopes/edit/[id]/+page.svelte | 55 + src/routes/scopes/edit/area/[id]/+page.svelte | 55 + src/routes/scopes/edit/task/[id]/+page.svelte | 55 + src/routes/scopes/templates/+page.svelte | 218 + src/routes/scopes/templates/[id]/+page.svelte | 191 + .../scopes/templates/edit/[id]/+page.svelte | 441 ++ src/routes/services/+page.svelte | 307 + src/routes/services/assign/+page.svelte | 796 ++ src/routes/services/assign2/+page.svelte | 1472 ++++ src/routes/test-factory/+page.svelte | 53 + static/robots.txt | 3 + svelte.config.js | 17 + tailwind.config.ts | 14 + tsconfig.json | 15 + vite.config.ts | 11 + 403 files changed, 46024 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 .graphqlrc.yaml create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 eslint.config.js create mode 100644 houdini.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 schema.graphql create mode 100644 src/app.css create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/lib/assets/favicon.svg create mode 100644 src/lib/auth.ts create mode 100644 src/lib/components/AuthenticatedImage.svelte create mode 100644 src/lib/components/AuthenticatedVideo.svelte create mode 100644 src/lib/components/OffCanvasLeft.svelte create mode 100644 src/lib/components/OffCanvasRight.svelte create mode 100644 src/lib/components/accounts/AddressLabors.svelte create mode 100644 src/lib/components/accounts/AddressLaborsCompact.svelte create mode 100644 src/lib/components/accounts/AddressSchedules.svelte create mode 100644 src/lib/components/accounts/AddressSchedulesCompact.svelte create mode 100644 src/lib/components/accounts/CreateAccount.svelte create mode 100644 src/lib/components/accounts/CreateAccountAddress.svelte create mode 100644 src/lib/components/accounts/CreateAccountContact.svelte create mode 100644 src/lib/components/accounts/CreateAccountLabor.svelte create mode 100644 src/lib/components/accounts/CreateAccountRevenue.svelte create mode 100644 src/lib/components/accounts/CreateAccountSchedule.svelte create mode 100644 src/lib/components/accounts/EditAccount.svelte create mode 100644 src/lib/components/accounts/EditAccountAddress.svelte create mode 100644 src/lib/components/accounts/EditAccountContact.svelte create mode 100644 src/lib/components/accounts/EditAccountLabor.svelte create mode 100644 src/lib/components/accounts/EditAccountRevenue.svelte create mode 100644 src/lib/components/accounts/EditAccountSchedule.svelte create mode 100644 src/lib/components/customers/CreateCustomer.svelte create mode 100644 src/lib/components/customers/CreateCustomerAddress.svelte create mode 100644 src/lib/components/customers/CreateCustomerContact.svelte create mode 100644 src/lib/components/customers/EditCustomer.svelte create mode 100644 src/lib/components/customers/EditCustomerAddress.svelte create mode 100644 src/lib/components/customers/EditCustomerContact.svelte create mode 100644 src/lib/components/customers/ViewCustomerAccounts.svelte create mode 100644 src/lib/components/factories/EntityListFactory.svelte create mode 100644 src/lib/components/forms/accounts/AccountEditForm.svelte create mode 100644 src/lib/components/forms/accounts/AccountForm.svelte create mode 100644 src/lib/components/forms/calendar/EventEditForm.svelte create mode 100644 src/lib/components/forms/calendar/EventForm.svelte create mode 100644 src/lib/components/forms/calendar/EventProjectForm.svelte create mode 100644 src/lib/components/forms/customers/CustomerEditForm.svelte create mode 100644 src/lib/components/forms/customers/CustomerForm.svelte create mode 100644 src/lib/components/forms/notifications/NotificationRuleEditForm.svelte create mode 100644 src/lib/components/forms/notifications/NotificationRuleForm.svelte create mode 100644 src/lib/components/forms/profile/ProfileEditForm.svelte create mode 100644 src/lib/components/forms/profiles/CustomerProfileCreateForm.svelte create mode 100644 src/lib/components/forms/profiles/CustomerProfileEditForm.svelte create mode 100644 src/lib/components/forms/profiles/TeamProfileCreateForm.svelte create mode 100644 src/lib/components/forms/profiles/TeamProfileEditForm.svelte create mode 100644 src/lib/components/forms/projectScopes/ProjectCategoryEditForm.svelte create mode 100644 src/lib/components/forms/projectScopes/ProjectCategoryForm.svelte create mode 100644 src/lib/components/forms/projectScopes/ProjectScopeEditForm.svelte create mode 100644 src/lib/components/forms/projectScopes/ProjectScopeForm.svelte create mode 100644 src/lib/components/forms/projectScopes/ProjectTaskEditForm.svelte create mode 100644 src/lib/components/forms/projectScopes/ProjectTaskForm.svelte create mode 100644 src/lib/components/forms/projectScopes/templates/ProjectCategoryTemplateForm.svelte create mode 100644 src/lib/components/forms/projectScopes/templates/ProjectScopeTemplateEditForm.svelte create mode 100644 src/lib/components/forms/projectScopes/templates/ProjectScopeTemplateForm.svelte create mode 100644 src/lib/components/forms/projectScopes/templates/ProjectTaskTemplateForm.svelte create mode 100644 src/lib/components/forms/projects/ProjectEditForm.svelte create mode 100644 src/lib/components/forms/projects/ProjectForm.svelte create mode 100644 src/lib/components/forms/reports/ReportEditForm.svelte create mode 100644 src/lib/components/forms/reports/ReportForm.svelte create mode 100644 src/lib/components/forms/scopes/AreaEditForm.svelte create mode 100644 src/lib/components/forms/scopes/AreaForm.svelte create mode 100644 src/lib/components/forms/scopes/ScopeEditForm.svelte create mode 100644 src/lib/components/forms/scopes/ScopeForm.svelte create mode 100644 src/lib/components/forms/scopes/TaskEditForm.svelte create mode 100644 src/lib/components/forms/scopes/TaskForm.svelte create mode 100644 src/lib/components/forms/scopes/templates/AreaTemplateAddForm.svelte create mode 100644 src/lib/components/forms/scopes/templates/ScopeTemplateEditForm.svelte create mode 100644 src/lib/components/forms/scopes/templates/ScopeTemplateForm.svelte create mode 100644 src/lib/components/forms/scopes/templates/TaskTemplateAddForm.svelte create mode 100644 src/lib/components/forms/services/ServiceEditForm.svelte create mode 100644 src/lib/components/forms/services/ServiceForm.svelte create mode 100644 src/lib/components/forms/services/ServiceGenerateForm.svelte create mode 100644 src/lib/components/lists/projectScopes/templates/ProjectScopeTemplateListItem.svelte create mode 100644 src/lib/components/lists/projectScopes/templates/ProjectTaskTemplateList.svelte create mode 100644 src/lib/components/lists/projectScopes/templates/ProjectTaskTemplateReadonlyList.svelte create mode 100644 src/lib/components/lists/scopes/templates/ScopeTemplateListItem.svelte create mode 100644 src/lib/components/media/MediaManager.svelte create mode 100644 src/lib/components/media/MediaUploadZone.svelte create mode 100644 src/lib/components/media/PhotoGalleryItem.svelte create mode 100644 src/lib/components/media/VideoGalleryItem.svelte create mode 100644 src/lib/components/messages/MessageBell.svelte create mode 100644 src/lib/components/modals/accounts/AccountViewModal.svelte create mode 100644 src/lib/components/modals/common/ConfirmDeleteModal.svelte create mode 100644 src/lib/components/modals/common/DeleteModal.svelte create mode 100644 src/lib/components/modals/services/CompleteServiceModal.svelte create mode 100644 src/lib/components/nav/TopNav.svelte create mode 100644 src/lib/components/notifications/NotificationBell.svelte create mode 100644 src/lib/components/notifications/NotificationCenterContent.svelte create mode 100644 src/lib/components/profile/EditProfile.svelte create mode 100644 src/lib/components/profiles/CreateProfile.svelte create mode 100644 src/lib/components/profiles/EditCustomerProfile.svelte create mode 100644 src/lib/components/profiles/EditTeamProfile.svelte create mode 100644 src/lib/components/reports/CreateReport.svelte create mode 100644 src/lib/components/reports/EditReport.svelte create mode 100644 src/lib/components/scope-builder/ClearConfirmModal.svelte create mode 100644 src/lib/components/scope-builder/CollapsibleCard.svelte create mode 100644 src/lib/components/scope-builder/DesktopRequiredScreen.svelte create mode 100644 src/lib/components/scope-builder/EditingIndicator.svelte create mode 100644 src/lib/components/scope-builder/EmptyState.svelte create mode 100644 src/lib/components/scope-builder/ImportJsonModal.svelte create mode 100644 src/lib/components/scope-builder/ImportJsonStepPreview.svelte create mode 100644 src/lib/components/scope-builder/ImportJsonStepType.svelte create mode 100644 src/lib/components/scope-builder/ImportJsonStepUpload.svelte create mode 100644 src/lib/components/scope-builder/LoadTemplateModal.svelte create mode 100644 src/lib/components/scope-builder/ProjectCategoryList.svelte create mode 100644 src/lib/components/scope-builder/ScopeBuilderHeader.svelte create mode 100644 src/lib/components/scope-builder/ScopeTemplateInfo.svelte create mode 100644 src/lib/components/scope-builder/ServiceAreaList.svelte create mode 100644 src/lib/components/scope-builder/TaskCard.svelte create mode 100644 src/lib/components/scope-builder/TutorialSection.svelte create mode 100644 src/lib/components/scope-builder/index.ts create mode 100644 src/lib/components/scope-builder/types.ts create mode 100644 src/lib/components/scope-builder/utils/jsonImportValidation.ts create mode 100644 src/lib/components/scope-builder/utils/payloadBuilders.ts create mode 100644 src/lib/components/scope-builder/utils/validation.ts create mode 100644 src/lib/components/services/CreateService.svelte create mode 100644 src/lib/components/services/EditService.svelte create mode 100644 src/lib/components/services/EditServiceTeamMembers.svelte create mode 100644 src/lib/components/services/GenerateServices.svelte create mode 100644 src/lib/components/sessions/SessionNotes.svelte create mode 100644 src/lib/components/shared/HybridView.svelte create mode 100644 src/lib/config/entityConfig.ts create mode 100644 src/lib/constants/eventTypes.ts create mode 100644 src/lib/graphql/client.ts create mode 100644 src/lib/graphql/mutations/AddParticipant.gql create mode 100644 src/lib/graphql/mutations/ArchiveConversation.gql create mode 100644 src/lib/graphql/mutations/CreateConversation.gql create mode 100644 src/lib/graphql/mutations/DeleteConversation.gql create mode 100644 src/lib/graphql/mutations/DeleteMessage.gql create mode 100644 src/lib/graphql/mutations/MarkConversationAsRead.gql create mode 100644 src/lib/graphql/mutations/MuteConversation.gql create mode 100644 src/lib/graphql/mutations/SendMessage.gql create mode 100644 src/lib/graphql/mutations/accounts/CreateAccount.graphql create mode 100644 src/lib/graphql/mutations/accounts/CreateAccountAddress.graphql create mode 100644 src/lib/graphql/mutations/accounts/CreateAccountContact.graphql create mode 100644 src/lib/graphql/mutations/accounts/DeleteAccount.graphql create mode 100644 src/lib/graphql/mutations/accounts/DeleteAccountAddress.graphql create mode 100644 src/lib/graphql/mutations/accounts/DeleteAccountContact.graphql create mode 100644 src/lib/graphql/mutations/accounts/UpdateAccount.graphql create mode 100644 src/lib/graphql/mutations/accounts/UpdateAccountAddress.graphql create mode 100644 src/lib/graphql/mutations/accounts/UpdateAccountContact.graphql create mode 100644 src/lib/graphql/mutations/customers/CreateCustomer.graphql create mode 100644 src/lib/graphql/mutations/customers/CreateCustomerAddress.graphql create mode 100644 src/lib/graphql/mutations/customers/CreateCustomerContact.graphql create mode 100644 src/lib/graphql/mutations/customers/DeleteCustomer.graphql create mode 100644 src/lib/graphql/mutations/customers/DeleteCustomerAddress.graphql create mode 100644 src/lib/graphql/mutations/customers/DeleteCustomerContact.graphql create mode 100644 src/lib/graphql/mutations/customers/UpdateCustomer.graphql create mode 100644 src/lib/graphql/mutations/customers/UpdateCustomerAddress.graphql create mode 100644 src/lib/graphql/mutations/customers/UpdateCustomerContact.graphql create mode 100644 src/lib/graphql/mutations/labor/CreateLabor.graphql create mode 100644 src/lib/graphql/mutations/labor/DeleteLabor.graphql create mode 100644 src/lib/graphql/mutations/labor/UpdateLabor.graphql create mode 100644 src/lib/graphql/mutations/notifications/CreateNotificationRule.graphql create mode 100644 src/lib/graphql/mutations/notifications/DeleteNotification.graphql create mode 100644 src/lib/graphql/mutations/notifications/DeleteNotificationRule.graphql create mode 100644 src/lib/graphql/mutations/notifications/MarkAllNotificationsAsRead.graphql create mode 100644 src/lib/graphql/mutations/notifications/MarkNotificationAsRead.graphql create mode 100644 src/lib/graphql/mutations/notifications/UpdateNotificationRule.graphql create mode 100644 src/lib/graphql/mutations/profiles/CreateCustomerProfile.graphql create mode 100644 src/lib/graphql/mutations/profiles/CreateTeamProfile.graphql create mode 100644 src/lib/graphql/mutations/profiles/DeleteCustomerProfile.graphql create mode 100644 src/lib/graphql/mutations/profiles/DeleteTeamProfile.graphql create mode 100644 src/lib/graphql/mutations/profiles/UpdateCustomerProfile.graphql create mode 100644 src/lib/graphql/mutations/profiles/UpdateTeamProfile.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/CreateProjectCategory.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/CreateProjectScope.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/CreateProjectScopeFromTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/CreateProjectTask.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/CreateProjectTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/DeleteProjectCategory.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/DeleteProjectScope.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/DeleteProjectTask.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/DeleteProjectTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/UpdateProjectCategory.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/UpdateProjectScope.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/UpdateProjectTask.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/UpdateProjectTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/CreateProjectCategoryTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/CreateProjectScopeTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/CreateProjectScopeTemplateFromJson.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/CreateProjectTaskTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/DeleteProjectCategoryTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/DeleteProjectScopeTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/DeleteProjectTaskTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/UpdateProjectCategoryTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/UpdateProjectScopeTemplate.graphql create mode 100644 src/lib/graphql/mutations/projectScopes/templates/UpdateProjectTaskTemplate.graphql create mode 100644 src/lib/graphql/mutations/projects/CreateProject.graphql create mode 100644 src/lib/graphql/mutations/projects/DeleteProject.graphql create mode 100644 src/lib/graphql/mutations/projects/UpdateProject.graphql create mode 100644 src/lib/graphql/mutations/reports/CreateReport.graphql create mode 100644 src/lib/graphql/mutations/reports/DeleteReport.graphql create mode 100644 src/lib/graphql/mutations/reports/UpdateReport.graphql create mode 100644 src/lib/graphql/mutations/revenue/CreateRevenue.graphql create mode 100644 src/lib/graphql/mutations/revenue/DeleteRevenue.graphql create mode 100644 src/lib/graphql/mutations/revenue/UpdateRevenue.graphql create mode 100644 src/lib/graphql/mutations/schedules/CreateSchedule.graphql create mode 100644 src/lib/graphql/mutations/schedules/DeleteSchedule.graphql create mode 100644 src/lib/graphql/mutations/schedules/UpdateSchedule.graphql create mode 100644 src/lib/graphql/mutations/scopes/CreateArea.graphql create mode 100644 src/lib/graphql/mutations/scopes/CreateScope.graphql create mode 100644 src/lib/graphql/mutations/scopes/CreateTask.graphql create mode 100644 src/lib/graphql/mutations/scopes/CreateTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/scopes/DeleteArea.graphql create mode 100644 src/lib/graphql/mutations/scopes/DeleteScope.graphql create mode 100644 src/lib/graphql/mutations/scopes/DeleteTask.graphql create mode 100644 src/lib/graphql/mutations/scopes/DeleteTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/scopes/UpdateArea.graphql create mode 100644 src/lib/graphql/mutations/scopes/UpdateScope.graphql create mode 100644 src/lib/graphql/mutations/scopes/UpdateTask.graphql create mode 100644 src/lib/graphql/mutations/scopes/UpdateTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/CreateAreaTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/CreateScopeFromJson.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/CreateScopeFromTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/CreateScopeTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/CreateTaskTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/DeleteAreaTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/DeleteScopeTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/DeleteTaskTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/UpdateAreaTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/UpdateScopeTemplate.graphql create mode 100644 src/lib/graphql/mutations/scopes/templates/UpdateTaskTemplate.graphql create mode 100644 src/lib/graphql/mutations/services/CreateService.graphql create mode 100644 src/lib/graphql/mutations/services/DeleteService.graphql create mode 100644 src/lib/graphql/mutations/services/GenerateServicesByMonth.graphql create mode 100644 src/lib/graphql/mutations/services/UpdateService.graphql create mode 100644 src/lib/graphql/mutations/sessions/AddProjectTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/sessions/AddTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/sessions/CloseProjectSession.graphql create mode 100644 src/lib/graphql/mutations/sessions/CloseServiceSession.graphql create mode 100644 src/lib/graphql/mutations/sessions/OpenProjectSession.graphql create mode 100644 src/lib/graphql/mutations/sessions/OpenServiceSession.graphql create mode 100644 src/lib/graphql/mutations/sessions/RemoveProjectTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/sessions/RemoveTaskCompletion.graphql create mode 100644 src/lib/graphql/mutations/sessions/RevertProjectSession.graphql create mode 100644 src/lib/graphql/mutations/sessions/RevertServiceSession.graphql create mode 100644 src/lib/graphql/mutations/sessions/images/DeleteProjectSessionImage.graphql create mode 100644 src/lib/graphql/mutations/sessions/images/DeleteServiceSessionImage.graphql create mode 100644 src/lib/graphql/mutations/sessions/images/UpdateProjectSessionImage.graphql create mode 100644 src/lib/graphql/mutations/sessions/images/UpdateServiceSessionImage.graphql create mode 100644 src/lib/graphql/mutations/sessions/images/UploadProjectSessionImage.graphql create mode 100644 src/lib/graphql/mutations/sessions/images/UploadServiceSessionImage.graphql create mode 100644 src/lib/graphql/mutations/sessions/notes/CreateProjectSessionNote.graphql create mode 100644 src/lib/graphql/mutations/sessions/notes/CreateServiceSessionNote.graphql create mode 100644 src/lib/graphql/mutations/sessions/notes/DeleteProjectSessionNote.graphql create mode 100644 src/lib/graphql/mutations/sessions/notes/DeleteServiceSessionNote.graphql create mode 100644 src/lib/graphql/mutations/sessions/notes/UpdateProjectSessionNote.graphql create mode 100644 src/lib/graphql/mutations/sessions/notes/UpdateServiceSessionNote.graphql create mode 100644 src/lib/graphql/mutations/sessions/videos/DeleteProjectSessionVideo.graphql create mode 100644 src/lib/graphql/mutations/sessions/videos/DeleteServiceSessionVideo.graphql create mode 100644 src/lib/graphql/mutations/sessions/videos/UploadProjectSessionVideo.graphql create mode 100644 src/lib/graphql/mutations/sessions/videos/UploadServiceSessionVideo.graphql create mode 100644 src/lib/graphql/queries/GetConversation.gql create mode 100644 src/lib/graphql/queries/GetConversationsByEntity.gql create mode 100644 src/lib/graphql/queries/GetMyConversations.gql create mode 100644 src/lib/graphql/queries/GetUnreadMessageCount.gql create mode 100644 src/lib/graphql/queries/accounts/GetAccount.graphql create mode 100644 src/lib/graphql/queries/accounts/GetAccountAddress.graphql create mode 100644 src/lib/graphql/queries/accounts/GetAccountContact.graphql create mode 100644 src/lib/graphql/queries/accounts/GetAccounts.graphql create mode 100644 src/lib/graphql/queries/customers/GetCustomer.graphql create mode 100644 src/lib/graphql/queries/customers/GetCustomerAddress.graphql create mode 100644 src/lib/graphql/queries/customers/GetCustomerContact.graphql create mode 100644 src/lib/graphql/queries/customers/GetCustomers.graphql create mode 100644 src/lib/graphql/queries/labor/GetLabor.graphql create mode 100644 src/lib/graphql/queries/labor/GetLabors.graphql create mode 100644 src/lib/graphql/queries/notifications/GetMyNotifications.graphql create mode 100644 src/lib/graphql/queries/notifications/GetNotificationRules.graphql create mode 100644 src/lib/graphql/queries/notifications/GetUnreadNotificationCount.graphql create mode 100644 src/lib/graphql/queries/profile/GetMe.graphql create mode 100644 src/lib/graphql/queries/profiles/GetCustomerProfile.graphql create mode 100644 src/lib/graphql/queries/profiles/GetCustomerProfiles.graphql create mode 100644 src/lib/graphql/queries/profiles/GetTeamProfile.graphql create mode 100644 src/lib/graphql/queries/profiles/GetTeamProfiles.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectCategories.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectCategory.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectScope.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectScopes.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectTask.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectTaskCompletion.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectTaskCompletions.graphql create mode 100644 src/lib/graphql/queries/projectScopes/GetProjectTasks.graphql create mode 100644 src/lib/graphql/queries/projectScopes/templates/GetProjectCategoryTemplate.graphql create mode 100644 src/lib/graphql/queries/projectScopes/templates/GetProjectCategoryTemplates.graphql create mode 100644 src/lib/graphql/queries/projectScopes/templates/GetProjectScopeTemplate.graphql create mode 100644 src/lib/graphql/queries/projectScopes/templates/GetProjectScopeTemplates.graphql create mode 100644 src/lib/graphql/queries/projectScopes/templates/GetProjectTaskTemplate.graphql create mode 100644 src/lib/graphql/queries/projectScopes/templates/GetProjectTaskTemplates.graphql create mode 100644 src/lib/graphql/queries/projects/GetProject.graphql create mode 100644 src/lib/graphql/queries/projects/GetProjects.graphql create mode 100644 src/lib/graphql/queries/projects/GetProjectsByTeamMember.graphql create mode 100644 src/lib/graphql/queries/reports/GetReport.graphql create mode 100644 src/lib/graphql/queries/reports/GetReports.graphql create mode 100644 src/lib/graphql/queries/revenue/GetRevenue.graphql create mode 100644 src/lib/graphql/queries/revenue/GetRevenues.graphql create mode 100644 src/lib/graphql/queries/schedules/GetSchedule.graphql create mode 100644 src/lib/graphql/queries/schedules/GetSchedules.graphql create mode 100644 src/lib/graphql/queries/scopes/GetArea.graphql create mode 100644 src/lib/graphql/queries/scopes/GetAreas.graphql create mode 100644 src/lib/graphql/queries/scopes/GetScope.graphql create mode 100644 src/lib/graphql/queries/scopes/GetScopes.graphql create mode 100644 src/lib/graphql/queries/scopes/GetTask.graphql create mode 100644 src/lib/graphql/queries/scopes/GetTaskCompletion.graphql create mode 100644 src/lib/graphql/queries/scopes/GetTaskCompletions.graphql create mode 100644 src/lib/graphql/queries/scopes/GetTasks.graphql create mode 100644 src/lib/graphql/queries/scopes/templates/GetAreaTemplate.graphql create mode 100644 src/lib/graphql/queries/scopes/templates/GetAreaTemplates.graphql create mode 100644 src/lib/graphql/queries/scopes/templates/GetScopeTemplate.graphql create mode 100644 src/lib/graphql/queries/scopes/templates/GetScopeTemplates.graphql create mode 100644 src/lib/graphql/queries/scopes/templates/GetTaskTemplate.graphql create mode 100644 src/lib/graphql/queries/scopes/templates/GetTaskTemplates.graphql create mode 100644 src/lib/graphql/queries/services/GetService.graphql create mode 100644 src/lib/graphql/queries/services/GetServices.graphql create mode 100644 src/lib/graphql/queries/services/GetServicesByTeamMember.graphql create mode 100644 src/lib/graphql/queries/services/GetServicesWithDetails.graphql create mode 100644 src/lib/graphql/queries/sessions/GetActiveProjectSession.graphql create mode 100644 src/lib/graphql/queries/sessions/GetActiveServiceSession.graphql create mode 100644 src/lib/graphql/queries/sessions/GetProjectSession.graphql create mode 100644 src/lib/graphql/queries/sessions/GetProjectSessions.graphql create mode 100644 src/lib/graphql/queries/sessions/GetServiceSession.graphql create mode 100644 src/lib/graphql/queries/sessions/GetServiceSessions.graphql create mode 100644 src/lib/graphql/queries/sessions/images/GetProjectSessionImage.graphql create mode 100644 src/lib/graphql/queries/sessions/images/GetProjectSessionImages.graphql create mode 100644 src/lib/graphql/queries/sessions/images/GetServiceSessionImage.graphql create mode 100644 src/lib/graphql/queries/sessions/images/GetServiceSessionImages.graphql create mode 100644 src/lib/graphql/queries/sessions/notes/GetProjectSessionNotes.graphql create mode 100644 src/lib/graphql/queries/sessions/notes/GetServiceSessionNotes.graphql create mode 100644 src/lib/graphql/queries/sessions/videos/GetProjectSessionVideo.graphql create mode 100644 src/lib/graphql/queries/sessions/videos/GetProjectSessionVideos.graphql create mode 100644 src/lib/graphql/queries/sessions/videos/GetServiceSessionVideo.graphql create mode 100644 src/lib/graphql/queries/sessions/videos/GetServiceSessionVideos.graphql create mode 100644 src/lib/media.ts create mode 100644 src/lib/services/calendar.ts create mode 100644 src/lib/services/emailer.ts create mode 100644 src/lib/stores/offCanvas.ts create mode 100644 src/lib/types/entities.ts create mode 100644 src/lib/utils/date.ts create mode 100644 src/lib/utils/entityUtils.ts create mode 100644 src/lib/utils/offCanvas.ts create mode 100644 src/lib/utils/relay.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+page.svelte create mode 100644 src/routes/accounts/+page.svelte create mode 100644 src/routes/accounts/[id]/+page.svelte create mode 100644 src/routes/calendar/+page.svelte create mode 100644 src/routes/calendar/[id]/+page.svelte create mode 100644 src/routes/calendar/create/+page.svelte create mode 100644 src/routes/calendar/create/project/[id]/+page.svelte create mode 100644 src/routes/calendar/edit/[id]/+page.svelte create mode 100644 src/routes/customers/+page.svelte create mode 100644 src/routes/customers/[id]/+page.svelte create mode 100644 src/routes/login/+page.svelte create mode 100644 src/routes/notifications/+page.svelte create mode 100644 src/routes/profiles/+page.svelte create mode 100644 src/routes/profiles/customer/[id]/+page.svelte create mode 100644 src/routes/profiles/team/[id]/+page.svelte create mode 100644 src/routes/project-scopes/templates/+page.svelte create mode 100644 src/routes/project-scopes/templates/[id]/+page.svelte create mode 100644 src/routes/project-scopes/templates/edit/[id]/+page.svelte create mode 100644 src/routes/projects/+page.svelte create mode 100644 src/routes/projects/[id]/+page.svelte create mode 100644 src/routes/register/+page.svelte create mode 100644 src/routes/reports/+page.svelte create mode 100644 src/routes/reports/[id]/+page.svelte create mode 100644 src/routes/scope-builder/+page.svelte create mode 100644 src/routes/scopes/[accountId]/[accountAddressId]/+page.svelte create mode 100644 src/routes/scopes/create/[id]/+page.svelte create mode 100644 src/routes/scopes/create/area/[scopeId]/+page.svelte create mode 100644 src/routes/scopes/create/task/[areaId]/+page.svelte create mode 100644 src/routes/scopes/edit/[id]/+page.svelte create mode 100644 src/routes/scopes/edit/area/[id]/+page.svelte create mode 100644 src/routes/scopes/edit/task/[id]/+page.svelte create mode 100644 src/routes/scopes/templates/+page.svelte create mode 100644 src/routes/scopes/templates/[id]/+page.svelte create mode 100644 src/routes/scopes/templates/edit/[id]/+page.svelte create mode 100644 src/routes/services/+page.svelte create mode 100644 src/routes/services/assign/+page.svelte create mode 100644 src/routes/services/assign2/+page.svelte create mode 100644 src/routes/test-factory/+page.svelte create mode 100644 static/robots.txt create mode 100644 svelte.config.js create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..912b5fb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,35 @@ +# Dependencies (use image's npm ci instead) +node_modules + +# Build outputs +build +.svelte-kit +dist +coverage + +# Environment files (avoid baking secrets into images) +.env +.env.* +!.env.example + +# VCS +.git +.git/* +.gitignore + +# Editors/OS +.idea +.vscode +*.swp +*.swo +.DS_Store +Thumbs.db + +# Logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Caches +.cache \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..8f23958 --- /dev/null +++ b/.env.example @@ -0,0 +1,20 @@ +# GraphQL API +PUBLIC_GRAPHQL_URL=http://localhost:8000/graphql/ + +# Ory Kratos (Authentication) +PUBLIC_KRATOS_URL=http://localhost:4433 + +# Calendar Service +PUBLIC_CALENDAR_API_URL=http://localhost:8001 +PUBLIC_CALENDAR_API_KEY=your-calendar-api-key + +# Email Service +PUBLIC_EMAIL_API_URL=http://localhost:8002 +PUBLIC_EMAIL_API_KEY=your-email-api-key + +# Houdini Schema Introspection (development only) +# These headers are used to fetch the GraphQL schema +USER_ID=your-dev-user-id +USER_PROFILE_TYPE=TeamProfileType +OATHKEEPER_SECRET=your-oathkeeper-secret +DJANGO_PROFILE_ID=your-dev-profile-id diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b99eb9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +.houdini +.idea \ No newline at end of file diff --git a/.graphqlrc.yaml b/.graphqlrc.yaml new file mode 100644 index 0000000..5eb640e --- /dev/null +++ b/.graphqlrc.yaml @@ -0,0 +1,9 @@ +projects: + default: + schema: + - ./schema.graphql + - ./.houdini/graphql/schema.graphql + documents: + - '**/*.gql' + - '**/*.svelte' + - ./.houdini/graphql/documents.gql diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..7d74fe2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb + +# Miscellaneous +/static/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..7ebb855 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5725121 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,56 @@ +# Use the official Node.js runtime as base image +FROM node:22-alpine AS builder + +# Set working directory +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm ci + +# Make PUBLIC_ vars available at build time +ARG PUBLIC_CALENDAR_API_URL +ARG PUBLIC_CALENDAR_API_KEY +ENV PUBLIC_CALENDAR_API_URL=$PUBLIC_CALENDAR_API_URL +ENV PUBLIC_CALENDAR_API_KEY=$PUBLIC_CALENDAR_API_KEY + +# Copy source code +COPY . . + +# Build the application +RUN npm run build + +# Production stage +FROM node:22-alpine AS runner + +WORKDIR /app + +# Ensure production mode in runtime +ENV NODE_ENV=production +ENV HOST=0.0.0.0 +ENV PORT=3000 + +# Copy package files +COPY package*.json ./ + +# Install only production dependencies (modern flag) +RUN npm ci --omit=dev && npm cache clean --force + +# Copy built application from builder stage +COPY --from=builder /app/build build/ + +# Create a non-root user +RUN addgroup -g 1001 -S nodejs +RUN adduser -S svelte -u 1001 + +# Change ownership of the app directory +RUN chown -R svelte:nodejs /app +USER svelte + +# Expose the port your app runs on +EXPOSE 3000 + +# Start the application (ensure package.json has "start": "node build") +CMD ["npm", "start"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0c3cea0 --- /dev/null +++ b/README.md @@ -0,0 +1,154 @@ +# Nexus 5 Frontend 1 - Admin Dashboard + +Admin-focused dashboard for the Nexus 5 platform, providing comprehensive management controls for service businesses. + +## Overview + +This is the first iteration of the Nexus 5 frontend, built as an admin-focused dashboard with comprehensive controls for managing customers, accounts, services, projects, and more. + +## Tech Stack + +- **SvelteKit** - Meta-framework for building web applications +- **Houdini** - Type-safe GraphQL client with automatic code generation +- **Tailwind CSS** - Utility-first CSS framework +- **Flowbite Svelte** - UI component library +- **TypeScript** - Type-safe JavaScript + +## Evolution + +This represents the first SvelteKit frontend for Nexus 5, building on lessons learned from previous iterations: + +| Feature | nexus-4 (Rust+SvelteKit) | nexus-5-frontend-1 | +|---------|--------------------------|---------------------| +| **Framework** | SvelteKit + Houdini | SvelteKit + Houdini | +| **GraphQL** | Basic queries | Full Relay pagination | +| **UI Components** | Custom | Flowbite Svelte | +| **Authentication** | JWT | Ory Kratos integration | +| **Real-time** | None | WebSocket subscriptions | + +## Features + +- **Customer Management** - Create and manage customer profiles +- **Account Management** - Handle accounts with addresses, contacts, schedules +- **Service Scheduling** - Schedule and assign services +- **Project Management** - Track projects and project scopes +- **Scope Templates** - Create reusable scope templates with AI-assisted JSON import +- **Calendar Integration** - Schedule events and view calendar +- **Reports** - Generate and manage service reports +- **Profile Management** - Manage team and customer profiles +- **Notification Rules** - Configure notification triggers and channels +- **Real-time Updates** - Live notifications and messages + +## Getting Started + +### Prerequisites + +- Node.js 18+ +- Access to Nexus 5 GraphQL API + +### Development + +```bash +# Install dependencies +npm install + +# Start development server +npm run dev + +# Build for production +npm run build + +# Type checking +npm run check +``` + +### Environment Variables + +Create a `.env` file with: + +``` +PUBLIC_GRAPHQL_URL=http://localhost:8000/graphql/ +PUBLIC_KRATOS_URL=http://localhost:4433 +``` + +## Project Structure + +``` +src/ +├── lib/ +│ ├── components/ # Svelte components +│ │ ├── accounts/ # Account management +│ │ ├── customers/ # Customer management +│ │ ├── forms/ # Form components +│ │ ├── modals/ # Modal dialogs +│ │ ├── nav/ # Navigation +│ │ ├── notifications/ # Notification UI +│ │ ├── scope-builder/ # Scope template builder +│ │ ├── services/ # Service management +│ │ └── sessions/ # Work session UI +│ ├── graphql/ # GraphQL operations +│ │ ├── mutations/ # GraphQL mutations +│ │ └── queries/ # GraphQL queries +│ ├── stores/ # Svelte stores +│ └── utils/ # Utility functions +├── routes/ # SvelteKit routes +│ ├── accounts/ # Account pages +│ ├── calendar/ # Calendar pages +│ ├── customers/ # Customer pages +│ ├── notifications/ # Notification pages +│ ├── profiles/ # Profile pages +│ ├── projects/ # Project pages +│ ├── reports/ # Report pages +│ ├── scopes/ # Scope pages +│ └── services/ # Service pages +└── schema.graphql # GraphQL schema +``` + +## Key Patterns + +### GraphQL with Houdini + +Uses Houdini for type-safe GraphQL operations with automatic code generation: + +```typescript +import { GetAccountsStore } from '$houdini'; + +const accounts = new GetAccountsStore(); +await accounts.fetch({ policy: 'NetworkOnly' }); +``` + +### Relay-style Pagination + +Implements cursor-based pagination following the Relay specification: + +```graphql +query GetAccounts($first: Int, $after: String) { + accounts(first: $first, after: $after) { + edges { + node { + id + name + } + } + pageInfo { + hasNextPage + endCursor + } + } +} +``` + +### Off-Canvas Pattern + +Uses off-canvas panels for editing and creating entities without leaving the current page. + +## Related Repositories + +- **nexus-5** - Django GraphQL API backend +- **nexus-5-auth** - Ory Kratos/Oathkeeper authentication +- **nexus-5-frontend-2** - Streamlined team app +- **nexus-5-frontend-3** - Full-featured portal + +## License + +MIT License - See LICENSE file for details. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..43c1e38 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +services: + web: + build: + context: . + dockerfile: Dockerfile + args: + PUBLIC_CALENDAR_API_URL: ${PUBLIC_CALENDAR_API_URL} + PUBLIC_CALENDAR_API_KEY: ${PUBLIC_CALENDAR_API_KEY} + image: nexus-5-frontend-1:latest + container_name: nexus-5-frontend-1 + ports: + - '6000:3000' + env_file: + - .env + environment: + - NODE_ENV=production + - PORT=3000 + - HOST=0.0.0.0 + restart: unless-stopped diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..340aff1 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,42 @@ +import prettier from 'eslint-config-prettier'; +import { includeIgnoreFile } from '@eslint/compat'; +import js from '@eslint/js'; +import svelte from 'eslint-plugin-svelte'; +import globals from 'globals'; +import { fileURLToPath } from 'node:url'; +import ts from 'typescript-eslint'; +import svelteConfig from './svelte.config.js'; + +const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); + +export default ts.config( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs.recommended, + prettier, + ...svelte.configs.prettier, + { + languageOptions: { + globals: { ...globals.browser, ...globals.node } + }, + rules: { + // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. + // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + 'no-undef': 'off', + // Disable goto() promise resolution requirement - we intentionally use fire-and-forget navigation + 'svelte/no-navigation-without-resolve': 'off' + } + }, + { + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], + languageOptions: { + parserOptions: { + projectService: true, + extraFileExtensions: ['.svelte'], + parser: ts.parser, + svelteConfig + } + } + } +); diff --git a/houdini.config.js b/houdini.config.js new file mode 100644 index 0000000..1955357 --- /dev/null +++ b/houdini.config.js @@ -0,0 +1,24 @@ +/// + +/** @type {import('houdini').ConfigFile} */ +const config = { + watchSchema: { + url: 'http://192.168.100.174:5500/graphql/', + headers: { + 'X-USER-ID': (env) => env.USER_ID, + 'X-USER-PROFILE-TYPE': (env) => env.USER_PROFILE_TYPE, + 'X-OATHKEEPER-SECRET': (env) => env.OATHKEEPER_SECRET, + 'X-DJANGO-PROFILE-ID': (env) => env.DJANGO_PROFILE_ID + } + }, + schemaPath: './schema.graphql', + runtimeDir: '.houdini', + plugins: { + 'houdini-svelte': { + client: './src/lib/graphql/client.ts', + forceRunesMode: true + } + } +}; + +export default config; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..aed2e25 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6928 @@ +{ + "name": "nexus-5-frontend-1", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nexus-5-frontend-1", + "version": "0.0.1", + "dependencies": { + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "vite-plugin-mkcert": "^1.17.9" + }, + "devDependencies": { + "@eslint/compat": "^1.2.5", + "@eslint/js": "^9.18.0", + "@sveltejs/adapter-node": "^5.3.1", + "@sveltejs/kit": "^2.34.0", + "@sveltejs/vite-plugin-svelte": "^6.0.0", + "@tailwindcss/postcss": "^4.1.12", + "@tailwindcss/typography": "^0.5.14", + "autoprefixer": "^10.4.20", + "concurrently": "^9.2.0", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-svelte": "^3.0.0", + "flowbite-svelte": "^1.12.6", + "flowbite-svelte-icons": "^2.3.0", + "globals": "^16.0.0", + "houdini": "^2.0.0-next.6", + "houdini-svelte": "^3.0.0-next.9", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.5", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwindcss": "^4.1.12", + "typescript": "^5.0.0", + "typescript-eslint": "^8.20.0", + "vite": "^7.1.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "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/@clack/core": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.5.tgz", + "integrity": "sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.6.3.tgz", + "integrity": "sha512-AM+kFmAHawpUQv2q9+mcB6jLKxXGjgu/r2EQjEwujgpCdzrST6BJqYw00GRn56/L/Izw5U7ImoLmy00X/r80Pw==", + "bundleDependencies": [ + "is-unicode-supported" + ], + "dev": true, + "license": "MIT", + "dependencies": { + "@clack/core": "^0.3.2", + "is-unicode-supported": "*", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts/node_modules/is-unicode-supported": { + "version": "1.3.0", + "extraneous": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@envelop/core": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@envelop/core/-/core-4.0.3.tgz", + "integrity": "sha512-O0Vz8E0TObT6ijAob8jYFVJavcGywKThM3UAsxUIBBVPYZTMiqI9lo2gmAnbMUnrDcAYkUTZEW9FDYPRdF5l6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@envelop/types": "4.0.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@envelop/instrumentation": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz", + "integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@envelop/types": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@envelop/types/-/types-4.0.1.tgz", + "integrity": "sha512-ULo27/doEsP7uUhm2iTnElx13qTO6I5FKvmLoX41cpfuw8x6e0NUFknoqhEsLzAbgz8xVS5mjwcxGCXh4lDYzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "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/compat": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.0.tgz", + "integrity": "sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "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.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "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.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", + "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.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@graphql-tools/executor": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.4.9.tgz", + "integrity": "sha512-SAUlDT70JAvXeqV87gGzvDzUGofn39nvaVcVhNf12Dt+GfWHtNNO/RCn/Ea4VJaSLGzraUd41ObnN3i80EBU7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^10.9.1", + "@graphql-typed-document-node/core": "^3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.1.tgz", + "integrity": "sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^10.9.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema/node_modules/@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.9.1.tgz", + "integrity": "sha512-B1wwkXk9UvU7LCBkPs8513WxOQ2H8Fo5p8HR1+Id9WmYE5+bd51vqN+MbrqvWczHCH2gwkREgHJN88tE0n1FCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", + "dset": "^3.1.4", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-yoga/logger": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@graphql-yoga/logger/-/logger-1.0.0.tgz", + "integrity": "sha512-JYoxwnPggH2BfO+dWlWZkDeFhyFZqaTRGLvFhy+Pjp2UxitEW6nDrw+pEDw/K9tJwMjIFMmTT9VfTqrnESmBHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.5.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@graphql-yoga/subscription": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@graphql-yoga/subscription/-/subscription-4.0.0.tgz", + "integrity": "sha512-0qsN/BPPZNMoC2CZ8i+P6PgiJyHh1H35aKDt37qARBDaIOKDQuvEOq7+4txUKElcmXi7DYFo109FkhSQoEajrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-yoga/typed-event-target": "^2.0.0", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/events": "^0.1.0", + "tslib": "^2.5.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@graphql-yoga/typed-event-target": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@graphql-yoga/typed-event-target/-/typed-event-target-2.0.0.tgz", + "integrity": "sha512-oA/VGxGmaSDym1glOHrltw43qZsFwLLjBwvh57B79UKX/vo3+UQcRgOyE44c5RP7DCYjkrC2tuArZmb6jCzysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.5.2" + }, + "engines": { + "node": ">=16.0.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/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kamilkisiela/fast-url-parser": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz", + "integrity": "sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==", + "dev": true, + "license": "MIT" + }, + "node_modules/@kitql/helpers": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@kitql/helpers/-/helpers-0.8.13.tgz", + "integrity": "sha512-8Om4jxF3XLTrpCkrZ8q6kHco4o6u/zKisA7XjLdiUDeSX7VSprlq6fnG2xayrbrc1He+pHQkgj2cHqqUvEHTGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esm-env": "^1.2.2" + }, + "engines": { + "node": "^16.14 || >=18" + }, + "funding": { + "url": "https://github.com/sponsors/jycouet" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.6.tgz", + "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.9.tgz", + "integrity": "sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.6.tgz", + "integrity": "sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/adapter-node": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.4.0.tgz", + "integrity": "sha512-NMsrwGVPEn+J73zH83Uhss/hYYZN6zT3u31R3IHAn3MiKC3h8fjmIAhLfTSOeNHr5wPYfjjMg8E+1gyFgyrEcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-commonjs": "^28.0.1", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.0", + "rollup": "^4.9.5" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.4.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.48.0.tgz", + "integrity": "sha512-GAAbkWrbRJvysL7+HOWs5v/+TmnRcEQPeED2sUcDFTHpPvRYADEtScL6x8hWuKp0DKauJVaVJLTjQVy9e7cMiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/cookie": "^0.6.0", + "acorn": "^8.14.1", + "cookie": "^0.6.0", + "devalue": "^5.3.2", + "esm-env": "^1.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^3.0.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.1.tgz", + "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", + "debug": "^4.4.1", + "deepmerge": "^4.3.1", + "magic-string": "^0.30.17", + "vitefu": "^1.1.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.1.tgz", + "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.js": "^3.2.4" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@svgdotjs/svg.js": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz", + "integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Fuzzyma" + } + }, + "node_modules/@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.select.js": "^4.0.1" + } + }, + "node_modules/@svgdotjs/svg.select.js": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", + "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.16.tgz", + "integrity": "sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.19", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.16" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.16.tgz", + "integrity": "sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.16", + "@tailwindcss/oxide-darwin-arm64": "4.1.16", + "@tailwindcss/oxide-darwin-x64": "4.1.16", + "@tailwindcss/oxide-freebsd-x64": "4.1.16", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.16", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.16", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.16", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.16", + "@tailwindcss/oxide-linux-x64-musl": "4.1.16", + "@tailwindcss/oxide-wasm32-wasi": "4.1.16", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.16", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.16" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.16.tgz", + "integrity": "sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.16.tgz", + "integrity": "sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.16.tgz", + "integrity": "sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.16.tgz", + "integrity": "sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.16.tgz", + "integrity": "sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.16.tgz", + "integrity": "sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.16.tgz", + "integrity": "sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.16.tgz", + "integrity": "sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.16.tgz", + "integrity": "sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.16.tgz", + "integrity": "sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.7", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.16.tgz", + "integrity": "sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.16.tgz", + "integrity": "sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.16.tgz", + "integrity": "sha512-Qn3SFGPXYQMKR/UtqS+dqvPrzEeBZHrFA92maT4zijCVggdsXnDBMsPFJo1eArX3J+O+Gi+8pV4PkqjLCNBk3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.16", + "@tailwindcss/oxide": "4.1.16", + "postcss": "^8.4.41", + "tailwindcss": "4.1.16" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@types/braces": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.5.tgz", + "integrity": "sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "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==", + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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/micromatch": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.10.tgz", + "integrity": "sha512-5jOhFDElqr4DKTrTEbnW8DZ4Hz5LRUEmyrGpCMrD/NphYv3nUnaF08xmSLx1rGGnyEs/kFnhiw6dCgcDqMr5PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/braces": "*" + } + }, + "node_modules/@types/node": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", + "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.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.46.2", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.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.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4" + }, + "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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", + "debug": "^4.3.4" + }, + "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.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" + }, + "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.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "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.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", + "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.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "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.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" + }, + "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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@whatwg-node/disposablestack": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", + "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/events": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.2.tgz", + "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.11.tgz", + "integrity": "sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.8.0", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.1.tgz", + "integrity": "sha512-cQmQEo7IsI0EPX9VrwygXVzrVlX43Jb7/DBZSmpnC7xH4xkyOnn/HykHpTaQk7TUs7zh59A5uTGqx3p2Ouzffw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^3.1.1", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/promise-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", + "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@whatwg-node/server": { + "version": "0.10.13", + "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.10.13.tgz", + "integrity": "sha512-Otmxo+0mp8az3B48pLI1I4msNOXPIoP7TLm6h5wOEQmynqHt8oP9nR6NJUeJk6iI5OtFpQtkbJFwfGkmplvc3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@envelop/instrumentation": "^1.0.0", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/fetch": "^0.10.10", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "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/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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/apexcharts": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-5.3.5.tgz", + "integrity": "sha512-I04DY/WBZbJgJD2uixeV5EzyiL+J5LgKQXEu8rctqAwyRmKv44aDVeofJoLdTJe3ao4r2KEQfCgtVzXn6pqirg==", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "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.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "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.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "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.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "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.8.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz", + "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "dev": true, + "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.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "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/caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "dev": true, + "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/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/chalk/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/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "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": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "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/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-inspect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.1.tgz", + "integrity": "sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "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", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-tz": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", + "license": "MIT", + "peerDependencies": { + "date-fns": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.4.2.tgz", + "integrity": "sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.240", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz", + "integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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-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/esbuild": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "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.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", + "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.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "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.2", + "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", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-svelte": { + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.12.5.tgz", + "integrity": "sha512-4KRG84eAHQfYd9OjZ1K7sCHy0nox+9KwT+s5WCCku3jTim5RV4tVENob274nCwIaApXsYPKAUAZFBxKZ3Wyfjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.6.1", + "@jridgewell/sourcemap-codec": "^1.5.0", + "esutils": "^2.0.3", + "globals": "^16.0.0", + "known-css-properties": "^0.37.0", + "postcss": "^8.4.49", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^7.0.0", + "semver": "^7.6.3", + "svelte-eslint-parser": "^1.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": "^8.57.1 || ^9.0.0", + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "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/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true, + "license": "MIT" + }, + "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/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.1.tgz", + "integrity": "sha512-ebTT9B6lOtZGMgJ3o5r12wBacHctG7oEWazIda8UlPfA3HD/Wrv8FdXoVo73vzdpwCxNyXjPauyN2bbJzMkB9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "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": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "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/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "dev": true, + "license": "MIT" + }, + "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-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "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==", + "dev": true, + "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/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "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/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "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==", + "dev": true, + "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.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/flowbite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-3.1.2.tgz", + "integrity": "sha512-MkwSgbbybCYgMC+go6Da5idEKUFfMqc/AmSjm/2ZbdmvoKf5frLPq/eIhXc9P+rC8t9boZtUXzHDgt5whZ6A/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@popperjs/core": "^2.9.3", + "flowbite-datepicker": "^1.3.1", + "mini-svg-data-uri": "^1.4.3", + "postcss": "^8.5.1" + } + }, + "node_modules/flowbite-datepicker": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/flowbite-datepicker/-/flowbite-datepicker-1.3.2.tgz", + "integrity": "sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-node-resolve": "^15.2.3", + "flowbite": "^2.0.0" + } + }, + "node_modules/flowbite-datepicker/node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/flowbite-datepicker/node_modules/flowbite": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.5.2.tgz", + "integrity": "sha512-kwFD3n8/YW4EG8GlY3Od9IoKND97kitO+/ejISHSqpn3vw2i5K/+ZI8Jm2V+KC4fGdnfi0XZ+TzYqQb4Q1LshA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@popperjs/core": "^2.9.3", + "flowbite-datepicker": "^1.3.0", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/flowbite-svelte": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/flowbite-svelte/-/flowbite-svelte-1.19.1.tgz", + "integrity": "sha512-8wa5jnXKvnNkwtq74d/VvzWCcNt4InzIoVxxS460oCiMUNT+VWs/zbeZSA+7c4zR6twlsR5qrHyMUx8AlEoJMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4", + "@floating-ui/utils": "^0.2.10", + "apexcharts": "^5.3.5", + "clsx": "^2.1.1", + "date-fns": "^4.1.0", + "esm-env": "^1.2.2", + "flowbite": "^3.1.2", + "tailwind-merge": "^3.3.1", + "tailwind-variants": "^3.1.1" + }, + "peerDependencies": { + "svelte": "^5.29.0", + "tailwindcss": "^4.1.4" + } + }, + "node_modules/flowbite-svelte-icons": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/flowbite-svelte-icons/-/flowbite-svelte-icons-2.3.0.tgz", + "integrity": "sha512-D7EeVAGt3NtufTjps8xKRYyZpAaQbuX+8PkohVqG07RsJf9pWJHwZ+RPBi3kUlECnq0WtYU/3jnLuz7Km4Y79g==", + "dev": true, + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "tailwind-merge": "^3.3.1" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "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/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "dev": true, + "license": "Unlicense" + }, + "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/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "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/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "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/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/graphql": { + "version": "16.11.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", + "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-yoga": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/graphql-yoga/-/graphql-yoga-4.0.5.tgz", + "integrity": "sha512-vIbJU9QX5RP4PoxbMCHcfOlt/3EsC/0uLdAOlKaiUvlwJDTFCaIHo2X10vL4i/27Gw8g90ECIwm2YbmeLDwcqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@envelop/core": "^4.0.0", + "@graphql-tools/executor": "^1.0.0", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "@graphql-yoga/logger": "^1.0.0", + "@graphql-yoga/subscription": "^4.0.0", + "@whatwg-node/fetch": "^0.9.7", + "@whatwg-node/server": "^0.9.1", + "dset": "^3.1.1", + "lru-cache": "^10.0.0", + "tslib": "^2.5.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^15.2.0 || ^16.0.0" + } + }, + "node_modules/graphql-yoga/node_modules/@graphql-tools/schema": { + "version": "10.0.25", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.25.tgz", + "integrity": "sha512-/PqE8US8kdQ7lB9M5+jlW8AyVjRGCKU7TSktuW3WNKSKmDO0MK1wakvb5gGdyT49MjAIb4a3LWxIpwo5VygZuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/merge": "^9.1.1", + "@graphql-tools/utils": "^10.9.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/graphql-yoga/node_modules/@whatwg-node/fetch": { + "version": "0.9.23", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.23.tgz", + "integrity": "sha512-7xlqWel9JsmxahJnYVUj/LLxWcnA93DR4c9xlw3U814jWTiYalryiH1qToik1hOxweKKRLi4haXHM5ycRksPBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.6.0", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/graphql-yoga/node_modules/@whatwg-node/node-fetch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.6.0.tgz", + "integrity": "sha512-tcZAhrpx6oVlkEsRngeTEEE7I5/QdLjeEz4IlekabGaESP7+Dkm/6a9KcF1KdCBB7mO9PXtBkwCuTCt8+UPg8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", + "busboy": "^1.6.0", + "fast-querystring": "^1.1.1", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/graphql-yoga/node_modules/@whatwg-node/server": { + "version": "0.9.71", + "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.9.71.tgz", + "integrity": "sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/fetch": "^0.10.5", + "@whatwg-node/promise-helpers": "^1.2.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/graphql-yoga/node_modules/@whatwg-node/server/node_modules/@whatwg-node/fetch": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.11.tgz", + "integrity": "sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.8.0", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/graphql-yoga/node_modules/@whatwg-node/server/node_modules/@whatwg-node/node-fetch": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.1.tgz", + "integrity": "sha512-cQmQEo7IsI0EPX9VrwygXVzrVlX43Jb7/DBZSmpnC7xH4xkyOnn/HykHpTaQk7TUs7zh59A5uTGqx3p2Ouzffw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^3.1.1", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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/houdini": { + "version": "2.0.0-next.11", + "resolved": "https://registry.npmjs.org/houdini/-/houdini-2.0.0-next.11.tgz", + "integrity": "sha512-XrksBpHcUZwJn6cUulwIAXMTEmvTDIXSizEKc6WbDYezzoPQKiH4hk5RB4mNevzMbDbxoKy55MBAq/rYuYUljA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@clack/prompts": "^0.6.3", + "@graphql-tools/merge": "^9.0.6", + "@graphql-tools/schema": "^9.0.4", + "@kitql/helpers": "^0.8.10", + "@types/estree": "^1.0.7", + "@types/fs-extra": "^9.0.13", + "@types/micromatch": "^4.0.2", + "@ungap/structured-clone": "^1.0.2", + "@whatwg-node/server": "^0.10.5", + "ast-types": "^0.16.1", + "commander": "^9.4.0", + "deepmerge": "^4.2.2", + "estree-walker": "3.0.1", + "fs-extra": "^10.1.0", + "glob": "^11.0.1", + "graphql": "^16.10.0", + "graphql-yoga": "^4.0.4", + "memfs": "^3.4.7", + "micromatch": "^4.0.8", + "minimatch": "^5.1.0", + "node-fetch": "^3.2.10", + "npx-import": "^1.1.3", + "recast": "0.23.8" + }, + "bin": { + "houdini": "build/cmd-esm/index.js" + }, + "funding": { + "url": "https://github.com/sponsors/HoudiniGraphql" + }, + "peerDependencies": { + "vite": "^7.0.0" + } + }, + "node_modules/houdini-svelte": { + "version": "3.0.0-next.13", + "resolved": "https://registry.npmjs.org/houdini-svelte/-/houdini-svelte-3.0.0-next.13.tgz", + "integrity": "sha512-jCJjGNdDGuxAld7SxpsX8JJm/Ik4c/+IymORbH9c4bS4WlWgd9Q5IfTn6EUYac1hXj9Uqmi6Coputqr/yGe18w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@kitql/helpers": "^0.8.2", + "ast-types": "^0.16.1", + "estree-walker": "^3.0.1", + "graphql": "^16.10.0", + "houdini": "^2.0.0-next.10", + "recast": "0.23.8", + "rollup": "^4.39.0" + }, + "funding": { + "url": "https://github.com/sponsors/HoudiniGraphql" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.9.0", + "svelte": "^5.0.0", + "vite": "^7.0.0" + } + }, + "node_modules/houdini-svelte/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/houdini/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/houdini/node_modules/estree-walker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/houdini/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.20.0" + } + }, + "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/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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.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/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/known-css-properties": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", + "dev": true, + "license": "MIT" + }, + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "devOptional": 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.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "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.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "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": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, + "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": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "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/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "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/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT" + }, + "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-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-releases": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npx-import": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/npx-import/-/npx-import-1.1.4.tgz", + "integrity": "sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==", + "dev": true, + "license": "ISC", + "dependencies": { + "execa": "^6.1.0", + "parse-package-name": "^1.0.0", + "semver": "^7.3.7", + "validate-npm-package-name": "^4.0.0" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-package-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-package-name/-/parse-package-name-1.0.0.tgz", + "integrity": "sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "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.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "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-plugin-svelte": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.0.tgz", + "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "prettier": "^3.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz", + "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-hermes": "*", + "@prettier/plugin-oxc": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-hermes": { + "optional": true + }, + "@prettier/plugin-oxc": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "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==", + "dev": true, + "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/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recast": { + "version": "0.23.8", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.8.tgz", + "integrity": "sha512-D8izEmRtY34O+B5k2kgNmPx4b/be4MGPGFiNzWUGtezDCWDyj/1w1uQQvzySRzAO/b+6TD05FwGPuYR4X52sVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "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==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "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/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "dev": true, + "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/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "5.42.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.42.2.tgz", + "integrity": "sha512-iSry5jsBHispVczyt9UrBX/1qu3HQ/UyKPAIjqlvlu3o/eUvc+kpyMyRS2O4HLLx4MvLurLGIUOyyP11pyD59g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "esm-env": "^1.2.1", + "esrap": "^2.1.0", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.3.tgz", + "integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/svelte-eslint-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.4.0.tgz", + "integrity": "sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.0", + "postcss": "^8.4.49", + "postcss-scss": "^4.0.9", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0", + "pnpm": "10.18.3" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/svelte-eslint-parser/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svelte/node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/tailwind-merge": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-variants": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.1.1.tgz", + "integrity": "sha512-ftLXe3krnqkMHsuBTEmaVUXYovXtPyTK7ckEfDRXS8PBZx0bAUas+A0jYxuKA5b8qg++wvQ3d2MQ7l/xeZxbZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwind-merge": ">=3.0.0", + "tailwindcss": "*" + }, + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + } + } + }, + "node_modules/tailwindcss": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz", + "integrity": "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "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" + }, + "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.46.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.2.tgz", + "integrity": "sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.46.2", + "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2" + }, + "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", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "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/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/vite": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "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", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.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 + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "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/vite-plugin-mkcert": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.9.tgz", + "integrity": "sha512-SwI7yqp2Cq4r2XItarnHRCj2uzHPqevbxFNMLpyN+LDXd5w1vmZeM4l5X/wCZoP4mjPQYN+9+4kmE6e3nPO5fg==", + "license": "MIT", + "dependencies": { + "axios": "^1.12.2", + "debug": "^4.4.3", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v16.7.0" + }, + "peerDependencies": { + "vite": ">=3" + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "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/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/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/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/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..07a42a9 --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "nexus-5-frontend-1", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "start": "node build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint ." + }, + "devDependencies": { + "@eslint/compat": "^1.2.5", + "@eslint/js": "^9.18.0", + "@sveltejs/adapter-node": "^5.3.1", + "@sveltejs/kit": "^2.34.0", + "@sveltejs/vite-plugin-svelte": "^6.0.0", + "@tailwindcss/postcss": "^4.1.12", + "@tailwindcss/typography": "^0.5.14", + "autoprefixer": "^10.4.20", + "concurrently": "^9.2.0", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-svelte": "^3.0.0", + "flowbite-svelte": "^1.12.6", + "flowbite-svelte-icons": "^2.3.0", + "globals": "^16.0.0", + "houdini": "^2.0.0-next.6", + "houdini-svelte": "^3.0.0-next.9", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", + "prettier-plugin-tailwindcss": "^0.6.5", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwindcss": "^4.1.12", + "typescript": "^5.0.0", + "typescript-eslint": "^8.20.0", + "vite": "^7.1.0" + }, + "dependencies": { + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "vite-plugin-mkcert": "^1.17.9" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..85b958c --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {} + } +}; diff --git a/schema.graphql b/schema.graphql new file mode 100644 index 0000000..1bcb34f --- /dev/null +++ b/schema.graphql @@ -0,0 +1,4333 @@ +input AccountAddressInput { + accountId: ID! + city: String! + isActive: Boolean! = true + isPrimary: Boolean! = false + name: String! + notes: String! = "" + state: String! + streetAddress: String! + zipCode: String! +} + +"""Physical address information for an account""" +type AccountAddressType implements Node { + accountId: UUID! + city: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + isPrimary: Boolean! + labors: [LaborType!]! + name: String! + notes: String! + schedules: [ScheduleType!]! + scopes: [ScopeType!]! + services: [ServiceType!]! + state: String! + streetAddress: String! + zipCode: String! +} + +input AccountAddressUpdateInput { + city: String = null + id: ID! + isActive: Boolean = null + isPrimary: Boolean = null + name: String = null + notes: String = null + state: String = null + streetAddress: String = null + zipCode: String = null +} + +"""Contact information for an account""" +input AccountContactFilter { + AND: AccountContactFilter + DISTINCT: Boolean + NOT: AccountContactFilter + OR: AccountContactFilter + accountId: UUID + id: UUID + isActive: Boolean + isPrimary: Boolean +} + +input AccountContactInput { + accountId: ID! + email: String = null + firstName: String! + isActive: Boolean! = true + isPrimary: Boolean! = false + lastName: String! + notes: String! = "" + phone: String = null +} + +"""Contact information for an account""" +type AccountContactType implements Node { + accountId: UUID! + email: String! + firstName: String! + fullName: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + isPrimary: Boolean! + lastName: String! + notes: String! + phone: String +} + +input AccountContactUpdateInput { + email: String = null + firstName: String = null + id: ID! + isActive: Boolean = null + isPrimary: Boolean = null + lastName: String = null + notes: String = null + phone: String = null +} + +"""Account model belonging to a customer""" +input AccountFilter { + AND: AccountFilter + DISTINCT: Boolean + NOT: AccountFilter + OR: AccountFilter + customerId: UUID + id: UUID + isActive: Boolean + name: String + search: String +} + +input AccountInput { + customerId: ID! + endDate: Date = null + name: String! + startDate: Date! + status: String! +} + +"""Punchlist records for accounts""" +input AccountPunchlistFilter { + AND: AccountPunchlistFilter + DISTINCT: Boolean + NOT: AccountPunchlistFilter + OR: AccountPunchlistFilter + accountId: UUID + id: UUID +} + +input AccountPunchlistInput { + accountId: ID! + date: Date! +} + +"""Punchlist records for accounts""" +type AccountPunchlistType implements Node { + accountId: UUID! + date: Date! + + """The Globally Unique ID of this object""" + id: ID! +} + +input AccountPunchlistUpdateInput { + accountId: ID = null + date: Date = null + id: ID! +} + +"""Account model belonging to a customer""" +type AccountType implements Node { + addresses: [AccountAddressType!]! + contacts: [AccountContactType!]! + customerId: UUID! + endDate: Date + + """The Globally Unique ID of this object""" + id: ID! + + """Check if the account is currently active based on dates and status""" + isActive: Boolean! + name: String! + + """Get the primary address for this account""" + primaryAddress: AccountAddressType + revenues: [RevenueType!]! + startDate: Date! + + """Current status of the account""" + status: StatusChoices! +} + +input AccountUpdateInput { + customerId: ID = null + endDate: Date = null + id: ID! + name: String = null + startDate: Date = null + status: String = null +} + +input AddParticipantInput { + conversationId: ID! + participantId: ID! +} + +"""Address choices for a customer""" +enum AddressChoices { + BILLING + OFFICE + OTHER + SHIPPING +} + +input ArchiveConversationInput { + conversationId: ID! + isArchived: Boolean! +} + +"""Area within a scope (e.g., Kitchen, Restrooms, Lobby)""" +input AreaFilter { + AND: AreaFilter + DISTINCT: Boolean + NOT: AreaFilter + OR: AreaFilter + id: UUID + scopeId: UUID +} + +input AreaInput { + name: String! + order: Int! = 0 + scopeId: ID! +} + +"""Reusable area definition belonging to a ScopeTemplate""" +input AreaTemplateFilter { + AND: AreaTemplateFilter + DISTINCT: Boolean + NOT: AreaTemplateFilter + OR: AreaTemplateFilter + id: UUID + scopeTemplateId: UUID + + """Case-insensitive search on name""" + search: String = null +} + +input AreaTemplateInput { + name: String! + order: Int = 0 + scopeTemplateId: ID! +} + +"""Reusable area definition belonging to a ScopeTemplate""" +type AreaTemplateType implements Node { + """The Globally Unique ID of this object""" + id: ID! + name: String! + order: Int! + scopeTemplateId: UUID! + taskTemplates: [TaskTemplateType!]! +} + +input AreaTemplateUpdateInput { + id: ID! + name: String = null + order: Int = null +} + +"""Area within a scope (e.g., Kitchen, Restrooms, Lobby)""" +type AreaType implements Node { + """The Globally Unique ID of this object""" + id: ID! + name: String! + order: Int! + scopeId: UUID! + tasks: [TaskType!]! +} + +input AreaUpdateInput { + id: ID! + name: String = null + order: Int = null + scopeId: ID = null +} + +input BoolBaseFilterLookup { + """Exact match. Filter will be skipped on `null` value""" + exact: Boolean + + """ + Exact match of items in a given list. Filter will be skipped on `null` value + """ + inList: [Boolean!] + + """Assignment test. Filter will be skipped on `null` value""" + isNull: Boolean +} + +input CloseServiceSessionInput { + serviceId: ID! + taskIds: [ID!]! +} + +""" +Conversation thread that groups messages together. +Can be linked to specific entities (Project, Service, Account, etc.) for context. +""" +input ConversationFilter { + AND: ConversationFilter + DISTINCT: Boolean + NOT: ConversationFilter + OR: ConversationFilter + + """Type of conversation (DIRECT, GROUP, SUPPORT)""" + conversationType: ConversationTypeChoicesFilterLookup + createdAt: DatetimeDatetimeFilterLookup + id: UUIDFilterLookup + + """Whether this conversation is archived (system-wide)""" + isArchived: BoolBaseFilterLookup + + """Timestamp of most recent message""" + lastMessageAt: DatetimeDatetimeFilterLookup +} + +input ConversationInput { + conversationType: String! + entityId: ID = null + entityType: String = null + metadata: String = null + participantIds: [ID!]! + subject: String! +} + +""" +Links users (TeamProfile or CustomerProfile) to conversations. +Tracks per-user read status and preferences. +""" +type ConversationParticipantType implements Node { + """Conversation this participant belongs to""" + conversationId: UUID! + createdAt: DateTime! + + """The Globally Unique ID of this object""" + id: ID! + + """Whether participant has archived this conversation (user-specific)""" + isArchived: Boolean! + + """Whether participant has muted notifications for this conversation""" + isMuted: Boolean! + + """When participant joined the conversation""" + joinedAt: DateTime! + + """Timestamp when participant last read messages in this conversation""" + lastReadAt: DateTime + participant: ParticipantType! + + """Number of unread messages for this participant""" + unreadCount: Int! + updatedAt: DateTime! +} + +""" +Conversation thread that groups messages together. +Can be linked to specific entities (Project, Service, Account, etc.) for context. +""" +type ConversationType implements Node { + canDelete: Boolean! + + """Type of conversation (DIRECT, GROUP, SUPPORT)""" + conversationType: ConversationTypeChoices! + createdAt: DateTime! + createdBy: ParticipantType + entity: EntityType + + """The Globally Unique ID of this object""" + id: ID! + + """Whether this conversation is archived (system-wide)""" + isArchived: Boolean! + + """Timestamp of most recent message""" + lastMessageAt: DateTime + messageCount: Int! + messages(limit: Int = 50, offset: Int = 0): [MessageType!]! + + """Additional conversation metadata""" + metadata: JSON! + participants: [ConversationParticipantType!]! + + """Conversation subject/title""" + subject: String! + unreadCount: Int! + updatedAt: DateTime! +} + +"""Type of conversation""" +enum ConversationTypeChoices { + DIRECT + GROUP + SUPPORT +} + +input ConversationTypeChoicesFilterLookup { + """ + Case-sensitive containment test. Filter will be skipped on `null` value + """ + contains: ConversationTypeChoices + + """Case-sensitive ends-with. Filter will be skipped on `null` value""" + endsWith: ConversationTypeChoices + + """Exact match. Filter will be skipped on `null` value""" + exact: ConversationTypeChoices + + """ + Case-insensitive containment test. Filter will be skipped on `null` value + """ + iContains: ConversationTypeChoices + + """Case-insensitive ends-with. Filter will be skipped on `null` value""" + iEndsWith: ConversationTypeChoices + + """Case-insensitive exact match. Filter will be skipped on `null` value""" + iExact: ConversationTypeChoices + + """ + Case-insensitive regular expression match. Filter will be skipped on `null` value + """ + iRegex: ConversationTypeChoices + + """Case-insensitive starts-with. Filter will be skipped on `null` value""" + iStartsWith: ConversationTypeChoices + + """ + Exact match of items in a given list. Filter will be skipped on `null` value + """ + inList: [ConversationTypeChoices!] + + """Assignment test. Filter will be skipped on `null` value""" + isNull: Boolean + + """ + Case-sensitive regular expression match. Filter will be skipped on `null` value + """ + regex: ConversationTypeChoices + + """Case-sensitive starts-with. Filter will be skipped on `null` value""" + startsWith: ConversationTypeChoices +} + +"""A connection to a list of items.""" +type ConversationTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [ConversationTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type ConversationTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: ConversationType! +} + +input ConversationUpdateInput { + id: ID! + isArchived: Boolean = null + metadata: String = null + subject: String = null +} + +input CreateProjectScopeFromTemplateInput { + accountAddressId: ID = null + accountId: ID = null + description: String = null + isActive: Boolean = true + name: String = null + projectId: ID! + templateId: ID! +} + +input CreateScopeFromTemplateInput { + accountAddressId: ID = null + accountId: ID! + description: String = null + isActive: Boolean = true + name: String = null + templateId: ID! +} + +input CustomerAddressInput { + addressType: String! + city: String! + customerId: ID! + isActive: Boolean! = true + isPrimary: Boolean! = false + state: String! + streetAddress: String! + zipCode: String! +} + +"""Address information for a customer""" +type CustomerAddressType implements Node { + """Type of address""" + addressType: AddressChoices! + city: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + isPrimary: Boolean! + state: String! + streetAddress: String! + zipCode: String! +} + +input CustomerAddressUpdateInput { + addressType: String = null + city: String = null + id: ID! + isActive: Boolean = null + isPrimary: Boolean = null + state: String = null + streetAddress: String = null + zipCode: String = null +} + +"""Contact information for a customer""" +input CustomerContactFilter { + AND: CustomerContactFilter + DISTINCT: Boolean + NOT: CustomerContactFilter + OR: CustomerContactFilter + customerId: UUID + id: UUID + isActive: Boolean + isPrimary: Boolean +} + +input CustomerContactInput { + customerId: ID! + email: String! + firstName: String! + isActive: Boolean! = true + isPrimary: Boolean! = false + lastName: String! + notes: String! = "" + phone: String! +} + +"""Contact information for a customer""" +type CustomerContactType implements Node { + email: String! + firstName: String! + fullName: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + isPrimary: Boolean! + lastName: String! + notes: String! + phone: String +} + +input CustomerContactUpdateInput { + email: String = null + firstName: String = null + id: ID! + isActive: Boolean = null + isPrimary: Boolean = null + lastName: String = null + notes: String = null + phone: String = null +} + +"""Customer model with contact information""" +input CustomerFilter { + AND: CustomerFilter + DISTINCT: Boolean + NOT: CustomerFilter + OR: CustomerFilter + id: UUID + + """Check if the customer is currently active based on dates and status""" + isActive: Boolean = null + search: String = null +} + +input CustomerInput { + billingEmail: String! + billingTerms: String! + endDate: Date = null + name: String! + startDate: Date! + status: String! +} + +"""External/public-facing customer accounts""" +input CustomerProfileFilter { + AND: CustomerProfileFilter + DISTINCT: Boolean + NOT: CustomerProfileFilter + OR: CustomerProfileFilter + + """Customers this profile has access to""" + customers: DjangoModelFilterInput + id: UUID +} + +input CustomerProfileInput { + customerIds: [ID!] = null + email: String = null + firstName: String! + lastName: String! + notes: String = "" + phone: String = null + status: String! = "PENDING" + userId: ID = null +} + +"""External/public-facing customer accounts""" +type CustomerProfileType implements Node { + """Customers this profile has access to""" + customers: [CustomerType!]! + email: String + firstName: String! + fullName: String! + + """The Globally Unique ID of this object""" + id: ID! + lastName: String! + notes: String! + + """Unique identifier from Ory Kratos authentication system""" + oryKratosId: String + phone: String + + """Current status of the profile""" + status: StatusChoices! +} + +union CustomerProfileTypeTeamProfileType = CustomerProfileType | TeamProfileType + +input CustomerProfileUpdateInput { + customerIds: [ID!] = null + email: String = null + firstName: String = null + id: ID! + lastName: String = null + notes: String = null + phone: String = null + status: String = null + userId: ID = null +} + +"""Customer model with contact information""" +type CustomerType implements Node { + accounts: [AccountType!]! + addresses: [CustomerAddressType!]! + billingEmail: String! + billingTerms: String! + contacts: [CustomerContactType!]! + endDate: Date + + """The Globally Unique ID of this object""" + id: ID! + + """Check if the customer is currently active based on dates and status""" + isActive: Boolean! + name: String! + startDate: Date! + + """Current status of the customer""" + status: StatusChoices! +} + +input CustomerUpdateInput { + billingEmail: String = null + billingTerms: String = null + endDate: Date = null + id: ID! + name: String = null + startDate: Date = null + status: String = null +} + +"""Date (isoformat)""" +scalar Date + +input DateDateFilterLookup { + day: IntComparisonFilterLookup + + """Exact match. Filter will be skipped on `null` value""" + exact: Date + + """Greater than. Filter will be skipped on `null` value""" + gt: Date + + """Greater than or equal to. Filter will be skipped on `null` value""" + gte: Date + + """ + Exact match of items in a given list. Filter will be skipped on `null` value + """ + inList: [Date!] + + """Assignment test. Filter will be skipped on `null` value""" + isNull: Boolean + isoWeekDay: IntComparisonFilterLookup + isoYear: IntComparisonFilterLookup + + """Less than. Filter will be skipped on `null` value""" + lt: Date + + """Less than or equal to. Filter will be skipped on `null` value""" + lte: Date + month: IntComparisonFilterLookup + quarter: IntComparisonFilterLookup + + """Inclusive range test (between)""" + range: DateRangeLookup + week: IntComparisonFilterLookup + weekDay: IntComparisonFilterLookup + year: IntComparisonFilterLookup +} + +enum DateOrdering { + ASC + DESC +} + +input DateRangeLookup { + end: Date = null + start: Date = null +} + +"""Date with time (isoformat)""" +scalar DateTime + +input DatetimeDatetimeFilterLookup { + date: IntComparisonFilterLookup + day: IntComparisonFilterLookup + + """Exact match. Filter will be skipped on `null` value""" + exact: DateTime + + """Greater than. Filter will be skipped on `null` value""" + gt: DateTime + + """Greater than or equal to. Filter will be skipped on `null` value""" + gte: DateTime + hour: IntComparisonFilterLookup + + """ + Exact match of items in a given list. Filter will be skipped on `null` value + """ + inList: [DateTime!] + + """Assignment test. Filter will be skipped on `null` value""" + isNull: Boolean + isoWeekDay: IntComparisonFilterLookup + isoYear: IntComparisonFilterLookup + + """Less than. Filter will be skipped on `null` value""" + lt: DateTime + + """Less than or equal to. Filter will be skipped on `null` value""" + lte: DateTime + minute: IntComparisonFilterLookup + month: IntComparisonFilterLookup + quarter: IntComparisonFilterLookup + + """Inclusive range test (between)""" + range: DatetimeRangeLookup + second: IntComparisonFilterLookup + time: IntComparisonFilterLookup + week: IntComparisonFilterLookup + weekDay: IntComparisonFilterLookup + year: IntComparisonFilterLookup +} + +input DatetimeRangeLookup { + end: DateTime = null + start: DateTime = null +} + +"""Decimal (fixed-point)""" +scalar Decimal + +enum DeliveryStatusChoices { + BOUNCED + DELIVERED + FAILED + PENDING + QUEUED + SENDING + SENT +} + +type DjangoFileType { + name: String! + path: String! + size: Int! + url: String! +} + +type DjangoImageType { + height: Int! + name: String! + path: String! + size: Int! + url: String! + width: Int! +} + +input DjangoModelFilterInput { + pk: ID! +} + +type DjangoModelType { + pk: ID! +} + +type EntityType { + account: AccountType + customer: CustomerType + entityId: ID! + entityType: String! + project: ProjectType + service: ServiceType +} + +""" +Event model to track system events that may trigger notifications. +Provides audit trail and basis for notification system. +""" +type EventType { + createdAt: DateTime! + + """UUID of the entity that triggered this event""" + entityId: ID! + + """Type of entity (e.g., 'Project', 'Report', 'Invoice')""" + entityType: String! + + """Type of event that occurred""" + eventType: EventTypeChoices! + id: ID! + + """ + Additional event metadata (e.g., old_status, new_status, changed_fields) + """ + metadata: JSON! + triggeredById: ID + triggeredByType: String + updatedAt: DateTime! +} + +enum EventTypeChoices { + ACCOUNT_ADDRESS_CREATED + ACCOUNT_ADDRESS_DELETED + ACCOUNT_ADDRESS_UPDATED + ACCOUNT_CONTACT_CREATED + ACCOUNT_CONTACT_DELETED + ACCOUNT_CONTACT_UPDATED + ACCOUNT_CREATED + ACCOUNT_DELETED + ACCOUNT_PUNCHLIST_CREATED + ACCOUNT_PUNCHLIST_DELETED + ACCOUNT_PUNCHLIST_UPDATED + ACCOUNT_STATUS_CHANGED + ACCOUNT_UPDATED + AREA_CREATED + AREA_DELETED + AREA_TEMPLATE_CREATED + AREA_TEMPLATE_DELETED + AREA_TEMPLATE_UPDATED + AREA_UPDATED + CONVERSATION_ARCHIVED + CONVERSATION_CREATED + CONVERSATION_PARTICIPANT_ADDED + CONVERSATION_PARTICIPANT_REMOVED + CUSTOMER_ADDRESS_CREATED + CUSTOMER_ADDRESS_DELETED + CUSTOMER_ADDRESS_UPDATED + CUSTOMER_CONTACT_CREATED + CUSTOMER_CONTACT_DELETED + CUSTOMER_CONTACT_UPDATED + CUSTOMER_CREATED + CUSTOMER_DELETED + CUSTOMER_PROFILE_ACCESS_GRANTED + CUSTOMER_PROFILE_ACCESS_REVOKED + CUSTOMER_PROFILE_CREATED + CUSTOMER_PROFILE_DELETED + CUSTOMER_PROFILE_UPDATED + CUSTOMER_STATUS_CHANGED + CUSTOMER_UPDATED + INVOICE_CANCELLED + INVOICE_GENERATED + INVOICE_OVERDUE + INVOICE_PAID + INVOICE_SENT + LABOR_RATE_CREATED + LABOR_RATE_DELETED + LABOR_RATE_UPDATED + MESSAGE_DELETED + MESSAGE_READ + MESSAGE_RECEIVED + MESSAGE_SENT + PROJECT_CANCELLED + PROJECT_COMPLETED + PROJECT_CREATED + PROJECT_PUNCHLIST_CREATED + PROJECT_PUNCHLIST_DELETED + PROJECT_PUNCHLIST_UPDATED + PROJECT_SCOPE_CATEGORY_CREATED + PROJECT_SCOPE_CATEGORY_DELETED + PROJECT_SCOPE_CATEGORY_UPDATED + PROJECT_SCOPE_CREATED + PROJECT_SCOPE_DELETED + PROJECT_SCOPE_TASK_CREATED + PROJECT_SCOPE_TASK_DELETED + PROJECT_SCOPE_TASK_UPDATED + PROJECT_SCOPE_TEMPLATE_INSTANTIATED + PROJECT_SCOPE_UPDATED + PROJECT_SESSION_CLOSED + PROJECT_SESSION_OPENED + PROJECT_SESSION_REVERTED + PROJECT_STATUS_CHANGED + PROJECT_TASK_COMPLETED + PROJECT_TASK_UNCOMPLETED + PROJECT_UPDATED + PUNCHLIST_PRIORITY_CHANGED + PUNCHLIST_STATUS_CHANGED + REPORT_APPROVED + REPORT_CREATED + REPORT_SUBMITTED + REVENUE_RATE_CREATED + REVENUE_RATE_DELETED + REVENUE_RATE_UPDATED + SCHEDULE_CREATED + SCHEDULE_DELETED + SCHEDULE_FREQUENCY_CHANGED + SCHEDULE_UPDATED + SCOPE_CREATED + SCOPE_DELETED + SCOPE_TEMPLATE_CREATED + SCOPE_TEMPLATE_DELETED + SCOPE_TEMPLATE_INSTANTIATED + SCOPE_TEMPLATE_UPDATED + SCOPE_UPDATED + SERVICES_BULK_GENERATED + SERVICE_CANCELLED + SERVICE_COMPLETED + SERVICE_CREATED + SERVICE_DELETED + SERVICE_SESSION_CLOSED + SERVICE_SESSION_OPENED + SERVICE_SESSION_REVERTED + SERVICE_STATUS_CHANGED + SERVICE_TASK_COMPLETED + SERVICE_TASK_UNCOMPLETED + SERVICE_TEAM_ASSIGNED + SERVICE_TEAM_UNASSIGNED + SERVICE_UPDATED + SESSION_IMAGE_DELETED + SESSION_IMAGE_UPDATED + SESSION_IMAGE_UPLOADED + SESSION_MEDIA_INTERNAL_FLAGGED + SESSION_NOTE_CREATED + SESSION_NOTE_DELETED + SESSION_NOTE_UPDATED + SESSION_VIDEO_DELETED + SESSION_VIDEO_UPDATED + SESSION_VIDEO_UPLOADED + TASK_COMPLETION_RECORDED + TASK_CREATED + TASK_DELETED + TASK_TEMPLATE_CREATED + TASK_TEMPLATE_DELETED + TASK_TEMPLATE_UPDATED + TASK_UPDATED + TEAM_PROFILE_CREATED + TEAM_PROFILE_DELETED + TEAM_PROFILE_ROLE_CHANGED + TEAM_PROFILE_UPDATED +} + +"""Hungry Howies location records""" +input HungryHowiesLocationFilter { + AND: HungryHowiesLocationFilter + DISTINCT: Boolean + NOT: HungryHowiesLocationFilter + OR: HungryHowiesLocationFilter + accountId: UUID + id: UUID + ovenType: HungryHowiesOvenChoices + storeNumber: String +} + +input HungryHowiesLocationInput { + accountId: ID! + ovenType: String = null + storeNumber: String! +} + +""" +HungryHowiesLocationNote(id, created_at, updated_at, content, author, internal, location) +""" +input HungryHowiesLocationNoteFilter { + AND: HungryHowiesLocationNoteFilter + DISTINCT: Boolean + NOT: HungryHowiesLocationNoteFilter + OR: HungryHowiesLocationNoteFilter + authorId: UUID + contentContains: String = null + createdAfter: DateTime = null + createdBefore: DateTime = null + id: UUID + + """Internal notes are only visible to team members, not customers""" + internal: Boolean + locationId: UUID +} + +input HungryHowiesLocationNoteInput { + authorId: ID = null + content: String! + internal: Boolean! = true + locationId: ID! +} + +""" +HungryHowiesLocationNote(id, created_at, updated_at, content, author, internal, location) +""" +type HungryHowiesLocationNoteType implements Node { + authorId: UUID + content: String! + createdAt: DateTime! + + """The Globally Unique ID of this object""" + id: ID! + + """Internal notes are only visible to team members, not customers""" + internal: Boolean! + locationId: UUID! + updatedAt: DateTime! +} + +input HungryHowiesLocationNoteUpdateInput { + authorId: ID = null + content: String = null + id: ID! + internal: Boolean = null +} + +"""Hungry Howies location records""" +type HungryHowiesLocationType implements Node { + account: AccountType! + + """The Globally Unique ID of this object""" + id: ID! + notes: [HungryHowiesLocationNoteType!]! + ovenType: HungryHowiesOvenChoices + storeNumber: String! +} + +input HungryHowiesLocationUpdateInput { + accountId: ID = null + id: ID! + ovenType: String = null + storeNumber: String = null +} + +enum HungryHowiesOvenChoices { + MIDDLEBY_MARSHALL + OTHER + XLT +} + +"""Punchlist records for Hungry Howies projects""" +input HungryHowiesPunchlistFilter { + AND: HungryHowiesPunchlistFilter + DISTINCT: Boolean + NOT: HungryHowiesPunchlistFilter + OR: HungryHowiesPunchlistFilter + id: UUID + projectId: UUID +} + +input HungryHowiesPunchlistInput { + backCeiling: Boolean! = false + backVents: Boolean! = false + date: Date! + endClean: Boolean! = false + endLock: Boolean! = false + endTrash: Boolean! = false + equip: Boolean! = false + equipCut: Boolean! = false + equipDelivery: Boolean! = false + equipDisp: Boolean! = false + equipDough: Boolean! = false + equipHotbox: Boolean! = false + equipMake: Boolean! = false + equipManager: Boolean! = false + equipOther: Boolean! = false + equipSinks: Boolean! = false + equipSub: Boolean! = false + exportedAt: DateTime = null + kitchenCeiling: Boolean! = false + kitchenOven: String! = "" + kitchenOvenAlerts: Boolean! = false + kitchenOvenDisassemble: Boolean! = false + kitchenOvenExterior: Boolean! = false + kitchenOvenReassemble: Boolean! = false + kitchenPos: Boolean! = false + kitchenQt: Boolean! = false + kitchenVents: Boolean! = false + kitchenWalls: Boolean! = false + lobbyCeiling: Boolean! = false + lobbyCounter: Boolean! = false + lobbyPos: Boolean! = false + lobbyVents: Boolean! = false + notes: String! = "" + pdfUrl: String = null + projectId: ID! + secondDate: DateTime = null + secondVisit: Boolean! = false + sheetUrl: String = null +} + +"""Punchlist records for Hungry Howies projects""" +type HungryHowiesPunchlistType implements Node { + backCeiling: Boolean! + backVents: Boolean! + date: Date! + endClean: Boolean! + endLock: Boolean! + endTrash: Boolean! + equip: Boolean! + equipCut: Boolean! + equipDelivery: Boolean! + equipDisp: Boolean! + equipDough: Boolean! + equipHotbox: Boolean! + equipMake: Boolean! + equipManager: Boolean! + equipOther: Boolean! + equipSinks: Boolean! + equipSub: Boolean! + exportedAt: DateTime + + """The Globally Unique ID of this object""" + id: ID! + kitchenCeiling: Boolean! + kitchenOven: String! + kitchenOvenAlerts: Boolean! + kitchenOvenDisassemble: Boolean! + kitchenOvenExterior: Boolean! + kitchenOvenReassemble: Boolean! + kitchenPos: Boolean! + kitchenQt: Boolean! + kitchenVents: Boolean! + kitchenWalls: Boolean! + lobbyCeiling: Boolean! + lobbyCounter: Boolean! + lobbyPos: Boolean! + lobbyVents: Boolean! + notes: String! + pdfUrl: String + projectId: UUID! + secondDate: DateTime + secondVisit: Boolean! + sheetUrl: String +} + +input HungryHowiesPunchlistUpdateInput { + backCeiling: Boolean = null + backVents: Boolean = null + date: Date = null + endClean: Boolean = null + endLock: Boolean = null + endTrash: Boolean = null + equip: Boolean = null + equipCut: Boolean = null + equipDelivery: Boolean = null + equipDisp: Boolean = null + equipDough: Boolean = null + equipHotbox: Boolean = null + equipMake: Boolean = null + equipManager: Boolean = null + equipOther: Boolean = null + equipSinks: Boolean = null + equipSub: Boolean = null + exportedAt: DateTime = null + id: ID! + kitchenCeiling: Boolean = null + kitchenOven: String = null + kitchenOvenAlerts: Boolean = null + kitchenOvenDisassemble: Boolean = null + kitchenOvenExterior: Boolean = null + kitchenOvenReassemble: Boolean = null + kitchenPos: Boolean = null + kitchenQt: Boolean = null + kitchenVents: Boolean = null + kitchenWalls: Boolean = null + lobbyCeiling: Boolean = null + lobbyCounter: Boolean = null + lobbyPos: Boolean = null + lobbyVents: Boolean = null + notes: String = null + pdfUrl: String = null + projectId: ID = null + secondDate: DateTime = null + secondVisit: Boolean = null + sheetUrl: String = null +} + +input IntComparisonFilterLookup { + """Exact match. Filter will be skipped on `null` value""" + exact: Int + + """Greater than. Filter will be skipped on `null` value""" + gt: Int + + """Greater than or equal to. Filter will be skipped on `null` value""" + gte: Int + + """ + Exact match of items in a given list. Filter will be skipped on `null` value + """ + inList: [Int!] + + """Assignment test. Filter will be skipped on `null` value""" + isNull: Boolean + + """Less than. Filter will be skipped on `null` value""" + lt: Int + + """Less than or equal to. Filter will be skipped on `null` value""" + lte: Int + + """Inclusive range test (between)""" + range: IntRangeLookup +} + +input IntRangeLookup { + end: Int = null + start: Int = null +} + +"""Status choices for an invoice""" +enum InvoiceChoices { + CANCELLED + DRAFT + OVERDUE + PAID + SENT +} + +"""Invoice records""" +input InvoiceFilter { + AND: InvoiceFilter + DISTINCT: Boolean + NOT: InvoiceFilter + OR: InvoiceFilter + customerId: UUID + id: UUID + + """Current status of the invoice""" + status: InvoiceChoices +} + +input InvoiceInput { + customerId: ID! + date: Date! + datePaid: Date = null + paymentType: String = null + projectIds: [ID!] = null + revenueIds: [ID!] = null + status: String! +} + +"""Invoice records""" +type InvoiceType implements Node { + customerId: UUID! + date: Date! + datePaid: Date + + """The Globally Unique ID of this object""" + id: ID! + paymentType: PaymentChoices + projects: [ProjectType!]! + revenues: [RevenueType!]! + + """Current status of the invoice""" + status: InvoiceChoices! +} + +input InvoiceUpdateInput { + customerId: ID = null + date: Date = null + datePaid: Date = null + id: ID! + paymentType: String = null + projectIds: [ID!] = null + revenueIds: [ID!] = null + status: String = null +} + +""" +The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf). +""" +scalar JSON + +type LaborBreakdown { + grandTotal: Decimal! + projects: [LaborBreakdownProject!]! + projectsTotal: Decimal! + services: [LaborBreakdownService!]! + servicesTotal: Decimal! + teamMemberId: ID! + teamMemberName: String! +} + +type LaborBreakdownProject { + isTeamMemberAssigned: Boolean! + laborShare: Decimal! + projectId: ID! + projectName: String! + teamMemberCount: Int! + totalLaborAmount: Decimal! +} + +type LaborBreakdownService { + isTeamMemberAssigned: Boolean! + laborShare: Decimal! + serviceId: ID! + teamMemberCount: Int! + totalLaborRate: Decimal! +} + +"""Labor records for accounts""" +input LaborFilter { + AND: LaborFilter + DISTINCT: Boolean + NOT: LaborFilter + OR: LaborFilter + accountAddressId: UUID + id: UUID +} + +input LaborInput { + accountAddressId: ID! + amount: Float! + endDate: Date = null + startDate: Date! +} + +"""Labor records for accounts""" +type LaborType implements Node { + accountAddressId: UUID + amount: Decimal! + endDate: Date + + """The Globally Unique ID of this object""" + id: ID! + startDate: Date! +} + +input LaborUpdateInput { + accountAddressId: ID = null + amount: Float = null + endDate: Date = null + id: ID! + startDate: Date = null +} + +input MarkAsReadInput { + conversationId: ID! +} + +"""Individual message within a conversation.""" +input MessageFilter { + AND: MessageFilter + DISTINCT: Boolean + NOT: MessageFilter + OR: MessageFilter + + """Conversation this message belongs to""" + conversationId: UUIDFilterLookup + createdAt: DatetimeDatetimeFilterLookup + id: UUIDFilterLookup + + """Whether this is an automated system message""" + isSystemMessage: BoolBaseFilterLookup +} + +input MessageInput { + attachments: String = null + body: String! + conversationId: ID! + metadata: String = null + replyToId: ID = null +} + +""" +Tracks when individual messages are read by specific participants. +Allows for fine-grained read tracking beyond conversation-level. +""" +type MessageReadReceiptType implements Node { + createdAt: DateTime! + + """The Globally Unique ID of this object""" + id: ID! + + """Message that was read""" + messageId: UUID! + + """When the message was read""" + readAt: DateTime! + reader: ParticipantType! + updatedAt: DateTime! +} + +"""Individual message within a conversation.""" +type MessageType implements Node { + """Array of attachment metadata (file paths, names, sizes, types)""" + attachments: JSON! + + """Message content""" + body: String! + canDelete: Boolean! + + """Conversation this message belongs to""" + conversationId: UUID! + createdAt: DateTime! + + """The Globally Unique ID of this object""" + id: ID! + + """Whether this is an automated system message""" + isSystemMessage: Boolean! + + """Additional message metadata (formatting, mentions, etc.)""" + metadata: JSON! + readBy: [MessageReadReceiptType!]! + replyTo: MessageType + + """Message this is replying to (for threading)""" + replyToId: UUID + sender: ParticipantType! + updatedAt: DateTime! +} + +"""A connection to a list of items.""" +type MessageTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [MessageTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type MessageTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: MessageType! +} + +type Mutation { + """Add a participant to a conversation""" + addParticipant(input: AddParticipantInput!): ConversationParticipantType! + + """Add a task completion to an active project session""" + addProjectTaskCompletion(notes: String = null, projectId: ID!, taskId: ID!): ProjectSessionType! + + """Add a task completion to an active service session""" + addTaskCompletion(notes: String = null, serviceId: ID!, taskId: ID!): ServiceSessionType! + + """Archive or unarchive a conversation""" + archiveConversation(input: ArchiveConversationInput!): ConversationType! + + """Close the active ProjectSession""" + closeProjectSession(input: ProjectSessionCloseInput!): ProjectSessionType! + + """Close the active service session and record completed tasks""" + closeServiceSession(input: CloseServiceSessionInput!): ServiceSessionType! + + """Create a new account""" + createAccount(input: AccountInput!): AccountType! + + """Create a new account address""" + createAccountAddress(input: AccountAddressInput!): AccountAddressType! + + """Create a new account contact""" + createAccountContact(input: AccountContactInput!): AccountContactType! + + """Create a new account punchlist""" + createAccountPunchlist(input: AccountPunchlistInput!): AccountPunchlistType! + + """Create a new area""" + createArea(input: AreaInput!): AreaType! + + """Create a new area template""" + createAreaTemplate(input: AreaTemplateInput!): AreaTemplateType! + + """Create a new conversation""" + createConversation(input: ConversationInput!): ConversationType! + + """Create a new customer""" + createCustomer(input: CustomerInput!): CustomerType! + + """Create a new customer address""" + createCustomerAddress(input: CustomerAddressInput!): CustomerAddressType! + + """Create a new customer contact""" + createCustomerContact(input: CustomerContactInput!): CustomerContactType! + + """Create a new customer profile""" + createCustomerProfile(input: CustomerProfileInput!): CustomerProfileType! + + """Create a new hungry howies punchlist""" + createHhPunchlist(input: HungryHowiesPunchlistInput!): HungryHowiesPunchlistType! + + """Create a new Hungry Howies location""" + createHungryHowiesLocation(input: HungryHowiesLocationInput!): HungryHowiesLocationType! + + """Create a new Hungry Howies location note""" + createHungryHowiesLocationNote(input: HungryHowiesLocationNoteInput!): HungryHowiesLocationNoteType! + + """Create a new invoice""" + createInvoice(input: InvoiceInput!): InvoiceType! + + """Create a new labor rate""" + createLabor(input: LaborInput!): LaborType! + + """Create a notification rule (Admin only)""" + createNotificationRule(input: NotificationRuleInput!): NotificationRuleType! + + """Create a new project""" + createProject(input: ProjectInput!): ProjectType! + + """Create a Project Area Template""" + createProjectAreaTemplate(input: ProjectAreaTemplateInput!): ProjectAreaTemplateType! + + """Create a new project punchlist""" + createProjectPunchlist(input: ProjectPunchlistInput!): ProjectPunchlistType! + + """Create a new ProjectScope""" + createProjectScope(input: ProjectScopeInput!): ProjectScopeType! + + """Create a ProjectScopeCategory""" + createProjectScopeCategory(input: ProjectScopeCategoryInput!): ProjectScopeCategoryType! + + """ + Instantiate a ProjectScope (with Categories and Tasks) from a ProjectScopeTemplate + """ + createProjectScopeFromTemplate(input: CreateProjectScopeFromTemplateInput!): ProjectScopeType! + + """Create a ProjectScopeTask""" + createProjectScopeTask(input: ProjectScopeTaskInput!): ProjectScopeTaskType! + + """Create a new Project Scope Template""" + createProjectScopeTemplate(input: ProjectScopeTemplateInput!): ProjectScopeTemplateType! + + """ + Create a ProjectScopeTemplate (and nested Categories/Tasks) from a JSON payload + """ + createProjectScopeTemplateFromJson(payload: JSON!, replace: Boolean! = false): ProjectScopeTemplateType! + + """Create a new project session note""" + createProjectSessionNote(input: ProjectSessionNoteInput!): ProjectSessionNoteType! + + """Create a Project Task Template""" + createProjectTaskTemplate(input: ProjectTaskTemplateInput!): ProjectTaskTemplateType! + + """Create a new report""" + createReport(input: ReportInput!): ReportType! + + """Create a new revenue rate""" + createRevenue(input: RevenueInput!): RevenueType! + + """Create a new service schedule""" + createSchedule(input: ScheduleInput!): ScheduleType! + + """Create a new scope""" + createScope(input: ScopeInput!): ScopeType! + + """Instantiate a Scope (with Areas and Tasks) from a ScopeTemplate""" + createScopeFromTemplate(input: CreateScopeFromTemplateInput!): ScopeType! + + """Create a new scope template""" + createScopeTemplate(input: ScopeTemplateInput!): ScopeTemplateType! + + """Create a ScopeTemplate (and nested Areas/Tasks) from a JSON payload""" + createScopeTemplateFromJson(payload: JSON!, replace: Boolean! = false): ScopeTemplateType! + + """Create a new service visit""" + createService(input: ServiceInput!): ServiceType! + + """Create a new service session note""" + createServiceSessionNote(input: ServiceSessionNoteInput!): ServiceSessionNoteType! + + """Create a new task""" + createTask(input: TaskInput!): TaskType! + + """Create a new task completion""" + createTaskCompletion(input: TaskCompletionInput!): TaskCompletionType! + + """Create a new task template""" + createTaskTemplate(input: TaskTemplateInput!): TaskTemplateType! + + """Create a new team profile""" + createTeamProfile(input: TeamProfileInput!): TeamProfileType! + + """Delete an existing account""" + deleteAccount(id: ID!): ID! + + """Delete an existing account address""" + deleteAccountAddress(id: ID!): ID! + + """Delete an existing account contact""" + deleteAccountContact(id: ID!): ID! + + """Delete an existing account punchlist""" + deleteAccountPunchlist(id: ID!): ID! + + """Delete an existing area""" + deleteArea(id: ID!): ID! + + """Delete an existing area template""" + deleteAreaTemplate(id: ID!): ID! + + """Delete a conversation""" + deleteConversation(id: ID!): ID! + + """Delete an existing customer""" + deleteCustomer(id: ID!): ID! + + """Delete an existing customer address""" + deleteCustomerAddress(id: ID!): ID! + + """Delete an existing customer contact""" + deleteCustomerContact(id: ID!): ID! + + """Delete an existing customer profile""" + deleteCustomerProfile(id: ID!): ID! + + """Delete an existing hungry howies punchlist""" + deleteHhPunchlist(id: ID!): ID! + + """Delete a Hungry Howies location""" + deleteHungryHowiesLocation(id: ID!): ID! + + """Delete a Hungry Howies location note""" + deleteHungryHowiesLocationNote(id: ID!): ID! + + """Delete an existing invoice""" + deleteInvoice(id: ID!): ID! + + """Delete an existing labor rate""" + deleteLabor(id: ID!): ID! + + """Delete a message""" + deleteMessage(id: ID!): ID! + + """Delete a notification""" + deleteNotification(id: ID!): ID! + + """Delete a notification rule (Admin only)""" + deleteNotificationRule(id: ID!): ID! + + """Delete an existing project""" + deleteProject(id: ID!): ID! + + """Delete a Project Area Template""" + deleteProjectAreaTemplate(id: ID!): ID! + + """Delete an existing project punchlist""" + deleteProjectPunchlist(id: ID!): ID! + + """Delete a ProjectScope""" + deleteProjectScope(id: ID!): ID! + + """Delete a ProjectScopeCategory""" + deleteProjectScopeCategory(id: ID!): ID! + + """Delete a ProjectScopeTask""" + deleteProjectScopeTask(id: ID!): ID! + + """Delete a Project Scope Template""" + deleteProjectScopeTemplate(id: ID!): ID! + + """Delete a ProjectSession image""" + deleteProjectSessionImage(id: ID!): ID! + + """Delete a project session note""" + deleteProjectSessionNote(id: ID!): ID! + + """Delete a ProjectSession video""" + deleteProjectSessionVideo(id: ID!): ID! + + """Delete a Project Task Template""" + deleteProjectTaskTemplate(id: ID!): ID! + + """Delete an existing report""" + deleteReport(id: ID!): ID! + + """Delete an existing revenue rate""" + deleteRevenue(id: ID!): ID! + + """Delete an existing service schedule""" + deleteSchedule(id: ID!): ID! + + """Delete an existing scope""" + deleteScope(id: ID!): ID! + + """Delete an existing scope template""" + deleteScopeTemplate(id: ID!): ID! + + """Delete an existing service visit""" + deleteService(id: ID!): ID! + + """Delete a ServiceSession image""" + deleteServiceSessionImage(id: ID!): ID! + + """Delete a service session note""" + deleteServiceSessionNote(id: ID!): ID! + + """Delete a ServiceSession video""" + deleteServiceSessionVideo(id: ID!): ID! + + """Delete an existing task""" + deleteTask(id: ID!): ID! + + """Delete an existing task completion""" + deleteTaskCompletion(id: ID!): ID! + + """Delete an existing task template""" + deleteTaskTemplate(id: ID!): ID! + + """Delete an existing team profile""" + deleteTeamProfile(id: ID!): ID! + + """Generate service visits for a given month (all-or-nothing)""" + generateServicesByMonth(input: ServiceGenerationInput!): [ServiceType!]! + + """Mark all notifications as read for current user""" + markAllNotificationsAsRead: Int! + + """Mark conversation as read""" + markConversationAsRead(input: MarkAsReadInput!): ConversationType! + + """Mark notification as read""" + markNotificationAsRead(id: ID!): NotificationType! + + """Mute or unmute a conversation""" + muteConversation(input: MuteConversationInput!): ConversationType! + + """Start a new ProjectSession for a scheduled project""" + openProjectSession(input: ProjectSessionStartInput!): ProjectSessionType! + + """Open a service session for a scheduled service""" + openServiceSession(input: OpenServiceSessionInput!): ServiceSessionType! + + """Remove a participant from a conversation""" + removeParticipant(input: RemoveParticipantInput!): ID! + + """Remove a task completion from an active project session""" + removeProjectTaskCompletion(projectId: ID!, taskId: ID!): ProjectSessionType! + + """Remove a task completion from an active service session""" + removeTaskCompletion(serviceId: ID!, taskId: ID!): ServiceSessionType! + + """ + Revert the active ProjectSession back to scheduled (deletes the active session) + """ + revertProjectSession(input: ProjectSessionRevertInput!): Boolean! + + """ + Revert an active service session back to scheduled (deletes the active session) + """ + revertServiceSession(input: RevertServiceSessionInput!): Boolean! + + """Send a message in a conversation""" + sendMessage(input: MessageInput!): MessageType! + + """Update an existing account""" + updateAccount(input: AccountUpdateInput!): AccountType! + + """Update an existing account address""" + updateAccountAddress(input: AccountAddressUpdateInput!): AccountAddressType! + + """Update an existing account contact""" + updateAccountContact(input: AccountContactUpdateInput!): AccountContactType! + + """Update an existing account punchlist""" + updateAccountPunchlist(input: AccountPunchlistUpdateInput!): AccountPunchlistType! + + """Update an existing area""" + updateArea(input: AreaUpdateInput!): AreaType! + + """Update an existing area template""" + updateAreaTemplate(input: AreaTemplateUpdateInput!): AreaTemplateType! + + """Update a conversation""" + updateConversation(input: ConversationUpdateInput!): ConversationType! + + """Update an existing customer""" + updateCustomer(input: CustomerUpdateInput!): CustomerType! + + """Update an existing customer address""" + updateCustomerAddress(input: CustomerAddressUpdateInput!): CustomerAddressType! + + """Update an existing customer contact""" + updateCustomerContact(input: CustomerContactUpdateInput!): CustomerContactType! + + """Update an existing customer profile""" + updateCustomerProfile(input: CustomerProfileUpdateInput!): CustomerProfileType! + + """Update an existing hungry howies punchlist""" + updateHhPunchlist(input: HungryHowiesPunchlistUpdateInput!): HungryHowiesPunchlistType! + + """Update an existing Hungry Howies location""" + updateHungryHowiesLocation(input: HungryHowiesLocationUpdateInput!): HungryHowiesLocationType! + + """Update an existing Hungry Howies location note""" + updateHungryHowiesLocationNote(input: HungryHowiesLocationNoteUpdateInput!): HungryHowiesLocationNoteType! + + """Update an existing invoice""" + updateInvoice(input: InvoiceUpdateInput!): InvoiceType! + + """Update an existing labor rate""" + updateLabor(input: LaborUpdateInput!): LaborType! + + """Update a notification rule (Admin only)""" + updateNotificationRule(input: NotificationRuleUpdateInput!): NotificationRuleType! + + """Update an existing project""" + updateProject(input: ProjectUpdateInput!): ProjectType! + + """Update a Project Area Template""" + updateProjectAreaTemplate(input: ProjectAreaTemplateUpdateInput!): ProjectAreaTemplateType! + + """Update an existing project punchlist""" + updateProjectPunchlist(input: ProjectPunchlistUpdateInput!): ProjectPunchlistType! + + """Update an existing ProjectScope""" + updateProjectScope(input: ProjectScopeUpdateInput!): ProjectScopeType! + + """Update a ProjectScopeCategory""" + updateProjectScopeCategory(input: ProjectScopeCategoryUpdateInput!): ProjectScopeCategoryType! + + """Update a ProjectScopeTask""" + updateProjectScopeTask(input: ProjectScopeTaskUpdateInput!): ProjectScopeTaskType! + + """Update an existing Project Scope Template""" + updateProjectScopeTemplate(input: ProjectScopeTemplateUpdateInput!): ProjectScopeTemplateType! + + """Update an existing ProjectSession image (e.g., title)""" + updateProjectSessionImage(input: ProjectSessionImageUpdateInput!): ProjectSessionImageType! + + """Update an existing project session note""" + updateProjectSessionNote(input: ProjectSessionNoteUpdateInput!): ProjectSessionNoteType! + + """Update an existing ProjectSession video (e.g., title)""" + updateProjectSessionVideo(input: ProjectSessionVideoUpdateInput!): ProjectSessionVideoType! + + """Update a Project Task Template""" + updateProjectTaskTemplate(input: ProjectTaskTemplateUpdateInput!): ProjectTaskTemplateType! + + """Update an existing report""" + updateReport(input: ReportUpdateInput!): ReportType! + + """Update an existing revenue rate""" + updateRevenue(input: RevenueUpdateInput!): RevenueType! + + """Update an existing service schedule""" + updateSchedule(input: ScheduleUpdateInput!): ScheduleType! + + """Update an existing scope""" + updateScope(input: ScopeUpdateInput!): ScopeType! + + """Update an existing scope template""" + updateScopeTemplate(input: ScopeTemplateUpdateInput!): ScopeTemplateType! + + """Update an existing service visit""" + updateService(input: ServiceUpdateInput!): ServiceType! + + """Update an existing ServiceSession image (e.g., title)""" + updateServiceSessionImage(input: ServiceSessionImageUpdateInput!): ServiceSessionImageType! + + """Update an existing service session note""" + updateServiceSessionNote(input: ServiceSessionNoteUpdateInput!): ServiceSessionNoteType! + + """Update an existing ServiceSession video (e.g., title)""" + updateServiceSessionVideo(input: ServiceSessionVideoUpdateInput!): ServiceSessionVideoType! + + """Update an existing task""" + updateTask(input: TaskUpdateInput!): TaskType! + + """Update an existing task completion""" + updateTaskCompletion(input: TaskCompletionUpdateInput!): TaskCompletionType! + + """Update an existing task template""" + updateTaskTemplate(input: TaskTemplateUpdateInput!): TaskTemplateType! + + """Update an existing team profile""" + updateTeamProfile(input: TeamProfileUpdateInput!): TeamProfileType! + + """Upload an image to a ProjectSession""" + uploadProjectSessionImage(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ProjectSessionImageType! + + """Upload a video to a ProjectSession""" + uploadProjectSessionVideo(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ProjectSessionVideoType! + + """Upload an image to a ServiceSession""" + uploadServiceSessionImage(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ServiceSessionImageType! + + """Upload a video to a ServiceSession""" + uploadServiceSessionVideo(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ServiceSessionVideoType! +} + +input MuteConversationInput { + conversationId: ID! + isMuted: Boolean! +} + +"""An object with a Globally Unique ID""" +interface Node { + """The Globally Unique ID of this object""" + id: ID! +} + +enum NotificationChannelChoices { + EMAIL + IN_APP + SMS +} + +"""Track delivery attempts for a notification via specific channels.""" +type NotificationDeliveryType { + """Number of delivery attempts""" + attempts: Int! + + """Delivery channel (IN_APP, EMAIL, SMS)""" + channel: NotificationChannelChoices! + createdAt: DateTime! + + """Timestamp when delivery was confirmed (if supported by channel)""" + deliveredAt: DateTime + + """Error message from failed delivery attempts""" + errorMessage: String! + + """External service ID (e.g., Twilio message SID, email message ID)""" + externalId: String! + id: ID! + + """Timestamp of last delivery attempt""" + lastAttemptAt: DateTime + + """Additional delivery metadata""" + metadata: JSON! + + """Notification being delivered""" + notification: NotificationType! + + """Timestamp when successfully sent""" + sentAt: DateTime + + """Current delivery status""" + status: DeliveryStatusChoices! + updatedAt: DateTime! +} + +input NotificationRuleInput { + channels: [NotificationChannelChoices!]! + conditions: JSON = null + description: String = "" + eventTypes: [EventTypeChoices!]! + isActive: Boolean = true + name: String! + targetCustomerProfileIds: [ID!] = null + targetRoles: [RoleChoices!] = null + targetTeamProfileIds: [ID!] = null + templateBody: String = "" + templateSubject: String = "" +} + +"""Admin-defined rules for generating notifications based on events.""" +type NotificationRuleType { + """Delivery channels for notifications (IN_APP, EMAIL, SMS)""" + channels: [NotificationChannelChoices!]! + + """ + Additional conditions for when this rule applies (e.g., {'status': 'COMPLETED'}) + """ + conditions: JSON! + createdAt: DateTime! + + """Description of when and how this rule applies""" + description: String! + + """List of event types that trigger this rule""" + eventTypes: [EventTypeChoices!]! + id: ID! + + """Whether this rule is currently active""" + isActive: Boolean! + + """Descriptive name for this notification rule""" + name: String! + targetCustomerProfileIds: [ID!]! + + """ + Roles that should receive notifications (empty = all authenticated users) + """ + targetRoles: [RoleChoices!]! + targetTeamProfileIds: [ID!]! + + """Template for notification body (supports variables)""" + templateBody: String! + + """Template for notification subject (supports variables)""" + templateSubject: String! + updatedAt: DateTime! +} + +input NotificationRuleUpdateInput { + channels: [NotificationChannelChoices!] = null + conditions: JSON = null + description: String = null + eventTypes: [EventTypeChoices!] = null + id: ID! + isActive: Boolean = null + name: String = null + targetCustomerProfileIds: [ID!] = null + targetRoles: [RoleChoices!] = null + targetTeamProfileIds: [ID!] = null + templateBody: String = null + templateSubject: String = null +} + +enum NotificationStatusChoices { + FAILED + PENDING + READ + SENT +} + +"""Individual notification instance sent to a specific recipient.""" +type NotificationType { + """Optional URL for action button (e.g., link to project detail)""" + actionUrl: String! + + """Notification body content""" + body: String! + createdAt: DateTime! + + """Event that triggered this notification""" + event: EventType! + id: ID! + isRead: Boolean! + + """Additional notification metadata""" + metadata: JSON! + + """Timestamp when notification was marked as read""" + readAt: DateTime + recipientId: ID! + recipientType: String! + + """Rule that generated this notification""" + rule: NotificationRuleType + + """Current status of the notification""" + status: NotificationStatusChoices! + + """Notification subject line""" + subject: String! + updatedAt: DateTime! +} + +input OpenServiceSessionInput { + serviceId: ID! +} + +"""Information to aid in pagination.""" +type PageInfo { + """When paginating forwards, the cursor to continue.""" + endCursor: String + + """When paginating forwards, are there more items?""" + hasNextPage: Boolean! + + """When paginating backwards, are there more items?""" + hasPreviousPage: Boolean! + + """When paginating backwards, the cursor to continue.""" + startCursor: String +} + +type ParticipantType { + customerProfile: CustomerProfileType + teamProfile: TeamProfileType +} + +"""Payment choices for a transaction""" +enum PaymentChoices { + BANK_TRANSFER + CASH + CHECK + CREDIT_CARD +} + +"""Reusable category definition belonging to a ProjectScopeTemplate""" +input ProjectAreaTemplateFilter { + AND: ProjectAreaTemplateFilter + DISTINCT: Boolean + NOT: ProjectAreaTemplateFilter + OR: ProjectAreaTemplateFilter + id: UUID + + """Case-insensitive search on name""" + nameSearch: String = null + order: Int + scopeTemplateId: UUID +} + +input ProjectAreaTemplateInput { + name: String! + order: Int! = 0 + scopeTemplateId: ID! +} + +"""Reusable category definition belonging to a ProjectScopeTemplate""" +type ProjectAreaTemplateType implements Node { + """The Globally Unique ID of this object""" + id: ID! + name: String! + order: Int! + scopeTemplateId: UUID! + taskTemplates: [ProjectTaskTemplateType!]! +} + +"""A connection to a list of items.""" +type ProjectAreaTemplateTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [ProjectAreaTemplateTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type ProjectAreaTemplateTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: ProjectAreaTemplateType! +} + +input ProjectAreaTemplateUpdateInput { + id: ID! + name: String = null + order: Int = null +} + +"""Project records for customers""" +input ProjectFilter { + AND: ProjectFilter + DISTINCT: Boolean + NOT: ProjectFilter + OR: ProjectFilter + + """ + If set, the project uses this account address; otherwise, fill the address fields below + """ + accountAddressId: UUIDFilterLookup + customerId: UUIDFilterLookup + date: DateDateFilterLookup + id: UUIDFilterLookup + + """Current status of the project""" + status: ServiceChoicesFilterLookup + teamMembers: DjangoModelFilterInput +} + +input ProjectInput { + accountAddressId: ID = null + amount: Float! + city: String = null + customerId: ID! + date: Date! + labor: Float! + name: String! + notes: String = null + scopeId: ID = null + state: String = null + status: String! + streetAddress: String = null + teamMemberIds: [ID!] = null + zipCode: String = null +} + +"""Punchlist records for projects""" +input ProjectPunchlistFilter { + AND: ProjectPunchlistFilter + DISTINCT: Boolean + NOT: ProjectPunchlistFilter + OR: ProjectPunchlistFilter + id: UUID + projectId: UUID +} + +input ProjectPunchlistInput { + date: Date! + projectId: ID! +} + +"""Punchlist records for projects""" +type ProjectPunchlistType implements Node { + date: Date! + + """The Globally Unique ID of this object""" + id: ID! + projectId: UUID! +} + +input ProjectPunchlistUpdateInput { + date: Date = null + id: ID! + projectId: ID = null +} + +"""Category of work definition for a project""" +input ProjectScopeCategoryFilter { + AND: ProjectScopeCategoryFilter + DISTINCT: Boolean + NOT: ProjectScopeCategoryFilter + OR: ProjectScopeCategoryFilter + id: UUID + order: Int + scopeId: UUID +} + +input ProjectScopeCategoryInput { + name: String! + order: Int! = 0 + scopeId: ID! +} + +"""Category of work definition for a project""" +type ProjectScopeCategoryType implements Node { + """The Globally Unique ID of this object""" + id: ID! + name: String! + order: Int! + projectTasks: [ProjectScopeTaskType!]! + scopeId: UUID! +} + +"""A connection to a list of items.""" +type ProjectScopeCategoryTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [ProjectScopeCategoryTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type ProjectScopeCategoryTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: ProjectScopeCategoryType! +} + +input ProjectScopeCategoryUpdateInput { + id: ID! + name: String = null + order: Int = null +} + +"""Scope of work definition for a project""" +input ProjectScopeFilter { + AND: ProjectScopeFilter + DISTINCT: Boolean + NOT: ProjectScopeFilter + OR: ProjectScopeFilter + accountAddressId: UUID + accountId: UUID + id: UUID + isActive: Boolean + projectId: UUID +} + +input ProjectScopeInput { + accountAddressId: ID = null + accountId: ID = null + description: String = null + isActive: Boolean = true + name: String! + projectId: ID! +} + +"""Record of a task template being completed during a project""" +input ProjectScopeTaskCompletionFilter { + AND: ProjectScopeTaskCompletionFilter + DISTINCT: Boolean + NOT: ProjectScopeTaskCompletionFilter + OR: ProjectScopeTaskCompletionFilter + accountAddressId: UUID + accountId: UUID + completedById: UUID + id: UUID + projectId: UUID + taskId: UUID +} + +"""Record of a task template being completed during a project""" +type ProjectScopeTaskCompletionType implements Node { + accountAddressId: UUID + completedAt: DateTime! + completedById: UUID! + + """The Globally Unique ID of this object""" + id: ID! + notes: String! + projectId: UUID! + taskId: UUID! +} + +"""Specific task definition for a project""" +input ProjectScopeTaskFilter { + AND: ProjectScopeTaskFilter + DISTINCT: Boolean + NOT: ProjectScopeTaskFilter + OR: ProjectScopeTaskFilter + categoryId: UUID + id: UUID + order: Int +} + +input ProjectScopeTaskInput { + categoryId: ID! + checklistDescription: String = "" + description: String! + estimatedMinutes: Int = null + order: Int! = 0 +} + +"""Specific task definition for a project""" +type ProjectScopeTaskType implements Node { + categoryId: UUID! + checklistDescription: String! + description: String! + estimatedMinutes: Int + + """The Globally Unique ID of this object""" + id: ID! + order: Int! +} + +"""A connection to a list of items.""" +type ProjectScopeTaskTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [ProjectScopeTaskTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type ProjectScopeTaskTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: ProjectScopeTaskType! +} + +input ProjectScopeTaskUpdateInput { + checklistDescription: String = null + description: String = null + estimatedMinutes: Int = null + id: ID! + order: Int = null +} + +""" +Reusable blueprint for creating a ProjectScope with Categories and Tasks +""" +input ProjectScopeTemplateFilter { + AND: ProjectScopeTemplateFilter + DISTINCT: Boolean + NOT: ProjectScopeTemplateFilter + OR: ProjectScopeTemplateFilter + + """Case-insensitive search on description""" + descriptionSearch: String = null + id: UUID + isActive: Boolean + + """Case-insensitive search on name""" + nameSearch: String = null +} + +input ProjectScopeTemplateInput { + description: String = "" + isActive: Boolean = true + name: String! +} + +""" +Reusable blueprint for creating a ProjectScope with Categories and Tasks +""" +type ProjectScopeTemplateType implements Node { + categoryTemplates: [ProjectAreaTemplateType!]! + description: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + name: String! +} + +input ProjectScopeTemplateUpdateInput { + description: String = null + id: ID! + isActive: Boolean = null + name: String = null +} + +"""Scope of work definition for a project""" +type ProjectScopeType implements Node { + accountAddressId: UUID + accountId: UUID + description: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + name: String! + projectAreas: [ProjectScopeCategoryType!]! + projectId: UUID! +} + +input ProjectScopeUpdateInput { + accountAddressId: ID = null + accountId: ID = null + description: String = null + id: ID! + isActive: Boolean = null + name: String = null +} + +input ProjectSessionCloseInput { + completedTaskIds: [ID!] = null + projectId: ID! +} + +"""Project session records""" +input ProjectSessionFilter { + AND: ProjectSessionFilter + DISTINCT: Boolean + NOT: ProjectSessionFilter + OR: ProjectSessionFilter + accountAddressId: UUIDFilterLookup + accountId: UUIDFilterLookup + createdById: UUIDFilterLookup + customerId: UUIDFilterLookup + date: DateDateFilterLookup + end: DatetimeDatetimeFilterLookup + id: UUIDFilterLookup + projectId: UUIDFilterLookup + scopeId: UUIDFilterLookup + start: DatetimeDatetimeFilterLookup + teamMemberId: String +} + +""" +ProjectSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, project_session, image, thumbnail) +""" +input ProjectSessionImageFilter { + AND: ProjectSessionImageFilter + DISTINCT: Boolean + NOT: ProjectSessionImageFilter + OR: ProjectSessionImageFilter + createdAfter: DateTime = null + createdBefore: DateTime = null + id: UUID + projectSessionId: UUID + titleContains: String = null + uploadedByTeamProfileId: UUID +} + +""" +ProjectSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, project_session, image, thumbnail) +""" +type ProjectSessionImageType implements Node { + contentType: String! + createdAt: DateTime! + height: Int! + + """The Globally Unique ID of this object""" + id: ID! + image: DjangoImageType! + internal: Boolean! + notes: String! + projectSessionId: UUID! + thumbnail: DjangoImageType + title: String! + uploadedByTeamProfileId: UUID + width: Int! +} + +input ProjectSessionImageUpdateInput { + id: ID! + notes: String = null + title: String = null +} + +"""Notes attached to project sessions""" +input ProjectSessionNoteFilter { + AND: ProjectSessionNoteFilter + DISTINCT: Boolean + NOT: ProjectSessionNoteFilter + OR: ProjectSessionNoteFilter + authorId: UUID + contentContains: String = null + createdAfter: DateTime = null + createdBefore: DateTime = null + id: UUID + + """Internal notes are only visible to team members, not customers""" + internal: Boolean + sessionId: UUID +} + +input ProjectSessionNoteInput { + authorId: ID = null + content: String! + internal: Boolean! = true + sessionId: ID! +} + +"""Notes attached to project sessions""" +type ProjectSessionNoteType implements Node { + authorId: UUID + content: String! + createdAt: DateTime! + + """The Globally Unique ID of this object""" + id: ID! + + """Internal notes are only visible to team members, not customers""" + internal: Boolean! + sessionId: UUID! + updatedAt: DateTime! +} + +input ProjectSessionNoteUpdateInput { + authorId: ID = null + content: String = null + id: ID! + internal: Boolean = null +} + +input ProjectSessionRevertInput { + projectId: ID! +} + +input ProjectSessionStartInput { + projectId: ID! +} + +"""Project session records""" +type ProjectSessionType implements Node { + accountAddressId: UUID + accountId: UUID + closedById: UUID + completedTasks: [ProjectScopeTaskCompletionType!]! + createdById: UUID! + customerId: UUID! + date: Date! + durationSeconds: Int! + end: DateTime + + """The Globally Unique ID of this object""" + id: ID! + + """A session is active if it has not been closed.""" + isActive: Boolean! + notes: [ProjectSessionNoteType!]! + photos: [ProjectSessionImageType!]! + projectId: UUID! + scopeId: UUID! + start: DateTime! + videos: [ProjectSessionVideoType!]! +} + +"""Video attached to a ProjectSession for documentation.""" +input ProjectSessionVideoFilter { + AND: ProjectSessionVideoFilter + DISTINCT: Boolean + NOT: ProjectSessionVideoFilter + OR: ProjectSessionVideoFilter + createdAfter: DateTime = null + createdBefore: DateTime = null + id: UUID + internal: Boolean + maxDuration: Int = null + minDuration: Int = null + projectSessionId: UUID + titleContains: String = null + uploadedByTeamProfileId: UUID +} + +"""Video attached to a ProjectSession for documentation.""" +type ProjectSessionVideoType implements Node { + contentType: String! + createdAt: DateTime! + + """Video duration in seconds""" + durationSeconds: Int! + + """File size in bytes""" + fileSizeBytes: Int! + height: Int! + + """The Globally Unique ID of this object""" + id: ID! + internal: Boolean! + notes: String! + projectSessionId: UUID! + thumbnail: DjangoImageType + title: String! + uploadedByTeamProfileId: UUID + video: DjangoFileType! + width: Int! +} + +input ProjectSessionVideoUpdateInput { + id: ID! + notes: String = null + title: String = null +} + +"""Reusable task definition belonging to a ProjectAreaTemplate""" +input ProjectTaskTemplateFilter { + AND: ProjectTaskTemplateFilter + DISTINCT: Boolean + NOT: ProjectTaskTemplateFilter + OR: ProjectTaskTemplateFilter + areaTemplateId: UUID + + """Case-insensitive search on description""" + descriptionSearch: String = null + estimatedMinutes: Int + id: UUID + order: Int +} + +input ProjectTaskTemplateInput { + areaTemplateId: ID! + checklistDescription: String = "" + description: String! + estimatedMinutes: Int = null + order: Int! = 0 +} + +"""Reusable task definition belonging to a ProjectAreaTemplate""" +type ProjectTaskTemplateType implements Node { + areaTemplateId: UUID! + checklistDescription: String! + description: String! + estimatedMinutes: Int + + """The Globally Unique ID of this object""" + id: ID! + order: Int! +} + +"""A connection to a list of items.""" +type ProjectTaskTemplateTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [ProjectTaskTemplateTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type ProjectTaskTemplateTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: ProjectTaskTemplateType! +} + +input ProjectTaskTemplateUpdateInput { + checklistDescription: String = null + description: String = null + estimatedMinutes: Int = null + id: ID! + order: Int = null +} + +"""Project records for customers""" +type ProjectType implements Node { + """ + If set, the project uses this account address; otherwise, fill the address fields below + """ + accountAddressId: UUID + amount: Decimal! + city: String + customerId: UUID! + date: Date! + + """The Globally Unique ID of this object""" + id: ID! + labor: Decimal! + name: String! + notes: String + scopeId: UUID + state: String + + """Current status of the project""" + status: ServiceChoices! + streetAddress: String + teamMembers: [DjangoModelType!]! + zipCode: String +} + +"""A connection to a list of items.""" +type ProjectTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [ProjectTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type ProjectTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: ProjectType! +} + +input ProjectUpdateInput { + accountAddressId: ID = null + amount: Float = null + city: String = null + customerId: ID = null + date: Date = null + id: ID! + labor: Float = null + name: String = null + notes: String = null + scopeId: ID = null + state: String = null + status: String = null + streetAddress: String = null + teamMemberIds: [ID!] = null + zipCode: String = null +} + +type Query { + account( + """The ID of the object.""" + id: ID! + ): AccountType + accountAddress( + """The ID of the object.""" + id: ID! + ): AccountAddressType + accountContact( + """The ID of the object.""" + id: ID! + ): AccountContactType + accountContacts(filters: AccountContactFilter): [AccountContactType!]! + accountPunchlist( + """The ID of the object.""" + id: ID! + ): AccountPunchlistType + accountPunchlists(filters: AccountPunchlistFilter): [AccountPunchlistType!]! + accounts(filters: AccountFilter): [AccountType!]! + + """Get the active project session for a given project""" + activeProjectSession(projectId: UUID!): ProjectSessionType + + """Get the active service session for a given service""" + activeServiceSession(serviceId: UUID!): ServiceSessionType + area( + """The ID of the object.""" + id: ID! + ): AreaType + areaTemplate( + """The ID of the object.""" + id: ID! + ): AreaTemplateType + areaTemplates(filters: AreaTemplateFilter): [AreaTemplateType!]! + areas(filters: AreaFilter): [AreaType!]! + conversation( + """The ID of the object.""" + id: ID! + ): ConversationType + conversations(filters: ConversationFilter): [ConversationType!]! + customer( + """The ID of the object.""" + id: ID! + ): CustomerType + customerAddress( + """The ID of the object.""" + id: ID! + ): CustomerAddressType + customerContact( + """The ID of the object.""" + id: ID! + ): CustomerContactType + customerContacts(filters: CustomerContactFilter): [CustomerContactType!]! + customerProfile( + """The ID of the object.""" + id: ID! + ): CustomerProfileType + customerProfiles(filters: CustomerProfileFilter): [CustomerProfileType!]! + customers(filters: CustomerFilter): [CustomerType!]! + + """Get event by ID""" + event(id: ID!): EventType + + """Get all events""" + events(limit: Int = 50, offset: Int = 0): [EventType!]! + + """ + Return conversations linked to a specific entity (Project, Service, Account, etc.) + """ + getConversationsByEntity( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + entityId: ID! + entityType: String! + filters: ConversationFilter + + """Returns the first n items from the list.""" + first: Int = null + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + ): ConversationTypeCursorConnection! + + """Return messages for a specific conversation""" + getMessagesByConversation( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + conversationId: ID! + filters: MessageFilter + + """Returns the first n items from the list.""" + first: Int = null + includeSystem: Boolean! = true + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + ): MessageTypeCursorConnection! + + """Return conversations for the authenticated user (inbox)""" + getMyConversations( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + filters: ConversationFilter + + """Returns the first n items from the list.""" + first: Int = null + includeArchived: Boolean! = false + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + ): ConversationTypeCursorConnection! + + """Return area templates for a given ProjectScopeTemplate""" + getProjectAreaTemplates( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + filters: ProjectAreaTemplateFilter + + """Returns the first n items from the list.""" + first: Int = null + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + scopeTemplateId: ID! + ): ProjectAreaTemplateTypeCursorConnection! + + """Return categories for a given ProjectScope""" + getProjectScopeCategories( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + filters: ProjectScopeCategoryFilter + + """Returns the first n items from the list.""" + first: Int = null + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + scopeId: ID! + ): ProjectScopeCategoryTypeCursorConnection! + + """Return tasks for a given ProjectScopeCategory""" + getProjectScopeTasks( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + categoryId: ID! + filters: ProjectScopeTaskFilter + + """Returns the first n items from the list.""" + first: Int = null + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + ): ProjectScopeTaskTypeCursorConnection! + + """Return task templates for a given ProjectAreaTemplate""" + getProjectTaskTemplates( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + areaTemplateId: ID! + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + filters: ProjectTaskTemplateFilter + + """Returns the first n items from the list.""" + first: Int = null + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + ): ProjectTaskTemplateTypeCursorConnection! + + """Return projects that include the given TeamProfile ID as a team member""" + getProjectsByTeamMember( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + filters: ProjectFilter + + """Returns the first n items from the list.""" + first: Int = null + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + ordering: DateOrdering = DESC + teamProfileId: ID! + ): ProjectTypeCursorConnection! + + """Return services that include the given TeamProfile ID as a team member""" + getServicesByTeamMember( + """Returns the items in the list that come after the specified cursor.""" + after: String = null + + """Returns the items in the list that come before the specified cursor.""" + before: String = null + filters: ServiceFilter + + """Returns the first n items from the list.""" + first: Int = null + + """Returns the items in the list that come after the specified cursor.""" + last: Int = null + ordering: DateOrdering = DESC + teamProfileId: ID! + ): ServiceTypeCursorConnection! + hhPunchlist( + """The ID of the object.""" + id: ID! + ): HungryHowiesPunchlistType + hhPunchlists(filters: HungryHowiesPunchlistFilter): [HungryHowiesPunchlistType!]! + hungryHowiesLocation( + """The ID of the object.""" + id: ID! + ): HungryHowiesLocationType + hungryHowiesLocationNote( + """The ID of the object.""" + id: ID! + ): HungryHowiesLocationNoteType + hungryHowiesLocationNotes(filters: HungryHowiesLocationNoteFilter): [HungryHowiesLocationNoteType!]! + hungryHowiesLocations(filters: HungryHowiesLocationFilter): [HungryHowiesLocationType!]! + invoice( + """The ID of the object.""" + id: ID! + ): InvoiceType + invoices(filters: InvoiceFilter): [InvoiceType!]! + labor( + """The ID of the object.""" + id: ID! + ): LaborType + labors(filters: LaborFilter): [LaborType!]! + + """Get the currently authenticated user's profile""" + me: CustomerProfileTypeTeamProfileType + message( + """The ID of the object.""" + id: ID! + ): MessageType + messages(filters: MessageFilter): [MessageType!]! + + """Get notifications for current user""" + myNotifications(limit: Int = 50, offset: Int = 0, unreadOnly: Boolean = false): [NotificationType!]! + + """Get unread notification count for current user""" + myUnreadNotificationCount: Int! + + """Get notification by ID""" + notification(id: ID!): NotificationType + + """Get notification delivery status""" + notificationDeliveries(notificationId: ID!): [NotificationDeliveryType!]! + + """Get notification rule by ID""" + notificationRule(id: ID!): NotificationRuleType + + """Get all notification rules""" + notificationRules(isActive: Boolean = null): [NotificationRuleType!]! + project( + """The ID of the object.""" + id: ID! + ): ProjectType + projectAreaTemplate( + """The ID of the object.""" + id: ID! + ): ProjectAreaTemplateType + projectAreaTemplates(filters: ProjectAreaTemplateFilter): [ProjectAreaTemplateType!]! + projectPunchlist( + """The ID of the object.""" + id: ID! + ): ProjectPunchlistType + projectPunchlists(filters: ProjectPunchlistFilter): [ProjectPunchlistType!]! + projectScope( + """The ID of the object.""" + id: ID! + ): ProjectScopeType + projectScopeCategories(filters: ProjectScopeCategoryFilter): [ProjectScopeCategoryType!]! + projectScopeCategory( + """The ID of the object.""" + id: ID! + ): ProjectScopeCategoryType + projectScopeTask( + """The ID of the object.""" + id: ID! + ): ProjectScopeTaskType + projectScopeTaskCompletion( + """The ID of the object.""" + id: ID! + ): ProjectScopeTaskCompletionType + projectScopeTaskCompletions(filters: ProjectScopeTaskCompletionFilter): [ProjectScopeTaskCompletionType!]! + projectScopeTasks(filters: ProjectScopeTaskFilter): [ProjectScopeTaskType!]! + projectScopeTemplate( + """The ID of the object.""" + id: ID! + ): ProjectScopeTemplateType + projectScopeTemplates(filters: ProjectScopeTemplateFilter): [ProjectScopeTemplateType!]! + projectScopes(filters: ProjectScopeFilter): [ProjectScopeType!]! + projectSession( + """The ID of the object.""" + id: ID! + ): ProjectSessionType + projectSessionImage( + """The ID of the object.""" + id: ID! + ): ProjectSessionImageType + projectSessionImages(filters: ProjectSessionImageFilter): [ProjectSessionImageType!]! + projectSessionNote( + """The ID of the object.""" + id: ID! + ): ProjectSessionNoteType + projectSessionNotes(filters: ProjectSessionNoteFilter): [ProjectSessionNoteType!]! + projectSessionVideo( + """The ID of the object.""" + id: ID! + ): ProjectSessionVideoType + projectSessionVideos(filters: ProjectSessionVideoFilter): [ProjectSessionVideoType!]! + projectSessions(filters: ProjectSessionFilter): [ProjectSessionType!]! + projectTaskTemplate( + """The ID of the object.""" + id: ID! + ): ProjectTaskTemplateType + projectTaskTemplates(filters: ProjectTaskTemplateFilter): [ProjectTaskTemplateType!]! + projects(filters: ProjectFilter): [ProjectType!]! + report( + """The ID of the object.""" + id: ID! + ): ReportType + reports(filters: ReportFilter): [ReportType!]! + revenue( + """The ID of the object.""" + id: ID! + ): RevenueType + revenues(filters: RevenueFilter): [RevenueType!]! + schedule( + """The ID of the object.""" + id: ID! + ): ScheduleType + schedules(filters: ScheduleFilter): [ScheduleType!]! + scope( + """The ID of the object.""" + id: ID! + ): ScopeType + scopeTemplate( + """The ID of the object.""" + id: ID! + ): ScopeTemplateType + scopeTemplates(filters: ScopeTemplateFilter): [ScopeTemplateType!]! + scopes(filters: ScopeFilter): [ScopeType!]! + service( + """The ID of the object.""" + id: ID! + ): ServiceType + serviceSession( + """The ID of the object.""" + id: ID! + ): ServiceSessionType + serviceSessionImage( + """The ID of the object.""" + id: ID! + ): ServiceSessionImageType + serviceSessionImages(filters: ServiceSessionImageFilter): [ServiceSessionImageType!]! + serviceSessionNote( + """The ID of the object.""" + id: ID! + ): ServiceSessionNoteType + serviceSessionNotes(filters: ServiceSessionNoteFilter): [ServiceSessionNoteType!]! + serviceSessionVideo( + """The ID of the object.""" + id: ID! + ): ServiceSessionVideoType + serviceSessionVideos(filters: ServiceSessionVideoFilter): [ServiceSessionVideoType!]! + serviceSessions(filters: ServiceSessionFilter): [ServiceSessionType!]! + services(filters: ServiceFilter): [ServiceType!]! + task( + """The ID of the object.""" + id: ID! + ): TaskType + taskCompletion( + """The ID of the object.""" + id: ID! + ): TaskCompletionType + taskCompletions(filters: TaskCompletionFilter): [TaskCompletionType!]! + taskTemplate( + """The ID of the object.""" + id: ID! + ): TaskTemplateType + taskTemplates(filters: TaskTemplateFilter): [TaskTemplateType!]! + tasks(filters: TaskFilter): [TaskType!]! + teamProfile( + """The ID of the object.""" + id: ID! + ): TeamProfileType + teamProfiles: [TeamProfileType!]! + + """Get unread message count for the authenticated user""" + unreadMessageCount: Int! +} + +input RemoveParticipantInput { + conversationId: ID! + participantId: ID! +} + +"""Report records""" +input ReportFilter { + AND: ReportFilter + DISTINCT: Boolean + NOT: ReportFilter + OR: ReportFilter + date: Date + id: UUID + teamMemberId: UUID +} + +input ReportInput { + date: Date! + projectIds: [ID!] = null + serviceIds: [ID!] = null + teamMemberId: ID! +} + +"""Report records""" +type ReportType implements Node { + date: Date! + + """The Globally Unique ID of this object""" + id: ID! + laborBreakdown: LaborBreakdown! + projects: [ProjectType!]! + projectsLaborTotal: Decimal! + services: [ServiceType!]! + servicesLaborTotal: Decimal! + teamMemberId: UUID! + totalLaborValue: Decimal! +} + +input ReportUpdateInput { + date: Date = null + id: ID! + projectIds: [ID!] = null + serviceIds: [ID!] = null + teamMemberId: ID = null +} + +"""Revenue records for accounts""" +input RevenueFilter { + AND: RevenueFilter + DISTINCT: Boolean + NOT: RevenueFilter + OR: RevenueFilter + accountId: UUID + id: UUID +} + +input RevenueInput { + accountId: ID! + amount: Float! + endDate: Date = null + startDate: Date! +} + +"""Revenue records for accounts""" +type RevenueType implements Node { + accountId: UUID! + amount: Decimal! + endDate: Date + + """The Globally Unique ID of this object""" + id: ID! + startDate: Date! +} + +input RevenueUpdateInput { + accountId: ID = null + amount: Float = null + endDate: Date = null + id: ID! + startDate: Date = null +} + +input RevertServiceSessionInput { + serviceId: ID! +} + +enum RoleChoices { + ADMIN + TEAM_LEADER + TEAM_MEMBER +} + +"""Service schedules for accounts.""" +input ScheduleFilter { + AND: ScheduleFilter + DISTINCT: Boolean + NOT: ScheduleFilter + OR: ScheduleFilter + accountAddressId: UUID + id: UUID +} + +input ScheduleInput { + accountAddressId: ID! + endDate: Date = null + fridayService: Boolean! = false + mondayService: Boolean! = false + name: String = null + saturdayService: Boolean! = false + scheduleException: String = null + startDate: Date! + sundayService: Boolean! = false + thursdayService: Boolean! = false + tuesdayService: Boolean! = false + wednesdayService: Boolean! = false + weekendService: Boolean! = false +} + +"""Service schedules for accounts.""" +type ScheduleType implements Node { + accountAddressId: UUID + + """Optional date when this schedule expires""" + endDate: Date + fridayService: Boolean! + + """The Globally Unique ID of this object""" + id: ID! + mondayService: Boolean! + name: String + saturdayService: Boolean! + + """Notes about any exceptions or special requirements for this schedule""" + scheduleException: String + + """Date when this schedule becomes active""" + startDate: Date! + sundayService: Boolean! + thursdayService: Boolean! + tuesdayService: Boolean! + wednesdayService: Boolean! + + """ + When enabled, represents a single service visit on Friday that can be performed any time between Friday-Sunday and verified by Monday morning. Individual Fri/Sat/Sun service flags must be disabled when this is enabled. + """ + weekendService: Boolean! +} + +input ScheduleUpdateInput { + accountAddressId: ID + endDate: Date = null + fridayService: Boolean = null + id: ID! + mondayService: Boolean = null + name: String = null + saturdayService: Boolean = null + scheduleException: String = null + startDate: Date = null + sundayService: Boolean = null + thursdayService: Boolean = null + tuesdayService: Boolean = null + wednesdayService: Boolean = null + weekendService: Boolean = null +} + +"""Scope of work definition for an account address""" +input ScopeFilter { + AND: ScopeFilter + DISTINCT: Boolean + NOT: ScopeFilter + OR: ScopeFilter + accountAddressId: UUID + accountId: UUID + id: UUID + isActive: Boolean + search: String = null +} + +input ScopeInput { + accountAddressId: ID = null + accountId: ID! + description: String! = "" + isActive: Boolean! = true + name: String! +} + +"""Reusable blueprint for creating a Scope with Areas and Tasks""" +input ScopeTemplateFilter { + AND: ScopeTemplateFilter + DISTINCT: Boolean + NOT: ScopeTemplateFilter + OR: ScopeTemplateFilter + id: UUID + isActive: Boolean = null + + """Case-insensitive search on name or description""" + search: String = null +} + +input ScopeTemplateInput { + description: String = null + isActive: Boolean = true + name: String! +} + +"""Reusable blueprint for creating a Scope with Areas and Tasks""" +type ScopeTemplateType implements Node { + areaTemplates: [AreaTemplateType!]! + description: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + name: String! +} + +input ScopeTemplateUpdateInput { + description: String = null + id: ID! + isActive: Boolean = null + name: String = null +} + +"""Scope of work definition for an account address""" +type ScopeType implements Node { + accountAddressId: UUID + accountId: UUID! + areas: [AreaType!]! + description: String! + + """The Globally Unique ID of this object""" + id: ID! + isActive: Boolean! + name: String! +} + +input ScopeUpdateInput { + accountAddressId: ID = null + accountId: ID = null + description: String = null + id: ID! + isActive: Boolean = null + name: String = null +} + +"""Status choices for a service workflow""" +enum ServiceChoices { + CANCELLED + COMPLETED + IN_PROGRESS + SCHEDULED +} + +input ServiceChoicesFilterLookup { + """ + Case-sensitive containment test. Filter will be skipped on `null` value + """ + contains: ServiceChoices + + """Case-sensitive ends-with. Filter will be skipped on `null` value""" + endsWith: ServiceChoices + + """Exact match. Filter will be skipped on `null` value""" + exact: ServiceChoices + + """ + Case-insensitive containment test. Filter will be skipped on `null` value + """ + iContains: ServiceChoices + + """Case-insensitive ends-with. Filter will be skipped on `null` value""" + iEndsWith: ServiceChoices + + """Case-insensitive exact match. Filter will be skipped on `null` value""" + iExact: ServiceChoices + + """ + Case-insensitive regular expression match. Filter will be skipped on `null` value + """ + iRegex: ServiceChoices + + """Case-insensitive starts-with. Filter will be skipped on `null` value""" + iStartsWith: ServiceChoices + + """ + Exact match of items in a given list. Filter will be skipped on `null` value + """ + inList: [ServiceChoices!] + + """Assignment test. Filter will be skipped on `null` value""" + isNull: Boolean + + """ + Case-sensitive regular expression match. Filter will be skipped on `null` value + """ + regex: ServiceChoices + + """Case-sensitive starts-with. Filter will be skipped on `null` value""" + startsWith: ServiceChoices +} + +"""Service records for accounts""" +input ServiceFilter { + AND: ServiceFilter + DISTINCT: Boolean + NOT: ServiceFilter + OR: ServiceFilter + accountAddressId: UUIDFilterLookup + accountId: UUIDFilterLookup + date: DateDateFilterLookup + id: UUIDFilterLookup + + """Current status of the service""" + status: ServiceChoicesFilterLookup + teamMembers: DjangoModelFilterInput +} + +input ServiceGenerationInput { + accountAddressId: ID! + month: Int! + scheduleId: ID! + year: Int! +} + +input ServiceInput { + accountAddressId: ID! + accountId: ID = null + date: Date! + notes: String = null + status: String! + teamMemberIds: [ID!] = null +} + +"""Service session records""" +input ServiceSessionFilter { + AND: ServiceSessionFilter + DISTINCT: Boolean + NOT: ServiceSessionFilter + OR: ServiceSessionFilter + accountAddressId: UUIDFilterLookup + createdById: UUIDFilterLookup + end: DatetimeDatetimeFilterLookup + id: UUIDFilterLookup + + """A session is active if it has not been closed.""" + isActive: Boolean = null + serviceId: UUIDFilterLookup + start: DatetimeDatetimeFilterLookup + teamMemberId: String +} + +""" +ServiceSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, service_session, image, thumbnail) +""" +input ServiceSessionImageFilter { + AND: ServiceSessionImageFilter + DISTINCT: Boolean + NOT: ServiceSessionImageFilter + OR: ServiceSessionImageFilter + createdAfter: DateTime = null + createdBefore: DateTime = null + id: UUID + serviceSessionId: UUID + titleContains: String = null + uploadedByTeamProfileId: UUID +} + +""" +ServiceSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, service_session, image, thumbnail) +""" +type ServiceSessionImageType implements Node { + contentType: String! + createdAt: DateTime! + height: Int! + + """The Globally Unique ID of this object""" + id: ID! + image: DjangoImageType! + internal: Boolean! + notes: String! + serviceSessionId: UUID! + thumbnail: DjangoImageType + title: String! + uploadedByTeamProfileId: UUID + width: Int! +} + +input ServiceSessionImageUpdateInput { + id: ID! + notes: String = null + title: String = null +} + +"""Notes attached to service sessions""" +input ServiceSessionNoteFilter { + AND: ServiceSessionNoteFilter + DISTINCT: Boolean + NOT: ServiceSessionNoteFilter + OR: ServiceSessionNoteFilter + authorId: UUID + contentContains: String = null + createdAfter: DateTime = null + createdBefore: DateTime = null + id: UUID + + """Internal notes are only visible to team members, not customers""" + internal: Boolean + sessionId: UUID +} + +input ServiceSessionNoteInput { + authorId: ID = null + content: String! + internal: Boolean! = true + sessionId: ID! +} + +"""Notes attached to service sessions""" +type ServiceSessionNoteType implements Node { + authorId: UUID + content: String! + createdAt: DateTime! + + """The Globally Unique ID of this object""" + id: ID! + + """Internal notes are only visible to team members, not customers""" + internal: Boolean! + sessionId: UUID! + updatedAt: DateTime! +} + +input ServiceSessionNoteUpdateInput { + authorId: ID = null + content: String = null + id: ID! + internal: Boolean = null +} + +"""Service session records""" +type ServiceSessionType implements Node { + accountAddressId: UUID! + accountId: UUID! + completedTasks: [TaskCompletionType!]! + customerId: UUID! + durationSeconds: Int! + end: DateTime + + """The Globally Unique ID of this object""" + id: ID! + + """A session is active if it has not been closed.""" + isActive: Boolean! + notes: [ServiceSessionNoteType!]! + photos: [ServiceSessionImageType!]! + scopeId: UUID! + serviceId: UUID! + start: DateTime! + videos: [ServiceSessionVideoType!]! +} + +"""Video attached to a ServiceSession for documentation.""" +input ServiceSessionVideoFilter { + AND: ServiceSessionVideoFilter + DISTINCT: Boolean + NOT: ServiceSessionVideoFilter + OR: ServiceSessionVideoFilter + createdAfter: DateTime = null + createdBefore: DateTime = null + id: UUID + internal: Boolean + maxDuration: Int = null + minDuration: Int = null + serviceSessionId: UUID + titleContains: String = null + uploadedByTeamProfileId: UUID +} + +"""Video attached to a ServiceSession for documentation.""" +type ServiceSessionVideoType implements Node { + contentType: String! + createdAt: DateTime! + + """Video duration in seconds""" + durationSeconds: Int! + + """File size in bytes""" + fileSizeBytes: Int! + height: Int! + + """The Globally Unique ID of this object""" + id: ID! + internal: Boolean! + notes: String! + serviceSessionId: UUID! + thumbnail: DjangoImageType + title: String! + uploadedByTeamProfileId: UUID + video: DjangoFileType! + width: Int! +} + +input ServiceSessionVideoUpdateInput { + id: ID! + notes: String = null + title: String = null +} + +"""Service records for accounts""" +type ServiceType implements Node { + accountAddressId: UUID + accountId: UUID + date: Date! + + """The Globally Unique ID of this object""" + id: ID! + notes: String + + """Current status of the service""" + status: ServiceChoices! + teamMembers: [DjangoModelType!]! +} + +"""A connection to a list of items.""" +type ServiceTypeCursorConnection { + """Contains the nodes in this connection""" + edges: [ServiceTypeCursorEdge!]! + + """Pagination data for this connection""" + pageInfo: PageInfo! + + """Total quantity of existing nodes.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type ServiceTypeCursorEdge { + """A cursor for use in pagination""" + cursor: String! + + """The item at the end of the edge""" + node: ServiceType! +} + +input ServiceUpdateInput { + accountAddressId: ID = null + accountId: ID = null + date: Date = null + id: ID! + notes: String = null + status: String = null + teamMemberIds: [ID!] = null +} + +"""Status choices for a Customer, Account, or a future model""" +enum StatusChoices { + ACTIVE + INACTIVE + PENDING +} + +type Subscription { + """Subscribe to account address creation events""" + accountAddressCreated: AccountAddressType! + + """Subscribe to account address deletion events""" + accountAddressDeleted: ID! + + """Subscribe to account address updates""" + accountAddressUpdated: AccountAddressType! + + """Subscribe to account contact creation events""" + accountContactCreated: AccountContactType! + + """Subscribe to account contact deletion events""" + accountContactDeleted: ID! + + """Subscribe to account contact updates""" + accountContactUpdated: AccountContactType! + + """Subscribe to account creation events""" + accountCreated: AccountType! + + """Subscribe to account deletion events""" + accountDeleted: ID! + + """Subscribe to account punchlist creation events""" + accountPunchlistCreated: AccountPunchlistType! + + """Subscribe to account punchlist deletion events""" + accountPunchlistDeleted: ID! + + """Subscribe to account punchlist updates""" + accountPunchlistUpdated: AccountPunchlistType! + + """Subscribe to account updates""" + accountUpdated: AccountType! + + """Subscribe to area creation events""" + areaCreated: AreaType! + + """Subscribe to area deletion events""" + areaDeleted: ID! + + """Subscribe to area template creation events""" + areaTemplateCreated: AreaTemplateType! + + """Subscribe to area template deletion events""" + areaTemplateDeleted: ID! + + """Subscribe to area template updates""" + areaTemplateUpdated: AreaTemplateType! + + """Subscribe to area updates""" + areaUpdated: AreaType! + + """Subscribe to new conversations""" + conversationCreated: ConversationType! + + """Subscribe to conversation deletion events""" + conversationDeleted: ID! + + """Subscribe to conversation read events""" + conversationRead(conversationId: ID!): ConversationType! + + """Subscribe to conversation updates""" + conversationUpdated: ConversationType! + + """Subscribe to customer address creation events""" + customerAddressCreated: CustomerAddressType! + + """Subscribe to customer address deletion events""" + customerAddressDeleted: ID! + + """Subscribe to customer address updates""" + customerAddressUpdated: CustomerAddressType! + + """Subscribe to customer contact creation events""" + customerContactCreated: CustomerContactType! + + """Subscribe to customer contact deletion events""" + customerContactDeleted: ID! + + """Subscribe to customer contact updates""" + customerContactUpdated: CustomerContactType! + + """Subscribe to customer creation events""" + customerCreated: CustomerType! + + """Subscribe to customer deletion events""" + customerDeleted: ID! + + """Subscribe to customer profile creation events""" + customerProfileCreated: CustomerProfileType! + + """Subscribe to customer profile deletion events""" + customerProfileDeleted: ID! + + """Subscribe to customer profile updates""" + customerProfileUpdated: CustomerProfileType! + + """Subscribe to customer updates""" + customerUpdated: CustomerType! + + """Subscribe to hungry howies punchlist creation events""" + hhPunchlistCreated: HungryHowiesPunchlistType! + + """Subscribe to hungry howies punchlist deletion events""" + hhPunchlistDeleted: ID! + + """Subscribe to hungry howies punchlist updates""" + hhPunchlistUpdated: HungryHowiesPunchlistType! + + """Subscribe to invoice creation events""" + invoiceCreated: InvoiceType! + + """Subscribe to invoice deletion events""" + invoiceDeleted: ID! + + """Subscribe to invoice updates""" + invoiceUpdated: InvoiceType! + + """Subscribe to labor creation events""" + laborCreated: LaborType! + + """Subscribe to labor deletion events""" + laborDeleted: ID! + + """Subscribe to labor updates""" + laborUpdated: LaborType! + + """Subscribe to message deletion events""" + messageDeleted(conversationId: ID!): ID! + + """Subscribe to new messages across all conversations""" + messageReceived: MessageType! + + """Subscribe to new messages in a specific conversation""" + messageSent(conversationId: ID!): MessageType! + + """Subscribe to participant changes""" + participantAdded(conversationId: ID!): ConversationType! + + """Subscribe to project area template creation events""" + projectAreaTemplateCreated: ProjectAreaTemplateType! + + """Subscribe to project area template deletion events""" + projectAreaTemplateDeleted: ID! + + """Subscribe to project area template updates""" + projectAreaTemplateUpdated: ProjectAreaTemplateType! + + """Subscribe to project creation events""" + projectCreated: ProjectType! + + """Subscribe to project deletion events""" + projectDeleted: ID! + + """Subscribe to project punchlist creation events""" + projectPunchlistCreated: ProjectPunchlistType! + + """Subscribe to project punchlist deletion events""" + projectPunchlistDeleted: ID! + + """Subscribe to project punchlist updates""" + projectPunchlistUpdated: ProjectPunchlistType! + + """Subscribe to project scope category creation events""" + projectScopeCategoryCreated: ProjectScopeCategoryType! + + """Subscribe to project scope category deletion events""" + projectScopeCategoryDeleted: ID! + + """Subscribe to project scope category updates""" + projectScopeCategoryUpdated: ProjectScopeCategoryType! + + """Subscribe to project scope creation events""" + projectScopeCreated: ProjectScopeType! + + """Subscribe to project scope deletion events""" + projectScopeDeleted: ID! + + """Subscribe to project scope task creation events""" + projectScopeTaskCreated: ProjectScopeTaskType! + + """Subscribe to project scope task deletion events""" + projectScopeTaskDeleted: ID! + + """Subscribe to project scope task updates""" + projectScopeTaskUpdated: ProjectScopeTaskType! + + """Subscribe to project scope template creation events""" + projectScopeTemplateCreated: ProjectScopeTemplateType! + + """Subscribe to project scope template deletion events""" + projectScopeTemplateDeleted: ID! + + """Subscribe to project scope template updates""" + projectScopeTemplateUpdated: ProjectScopeTemplateType! + + """Subscribe to project scope updates""" + projectScopeUpdated: ProjectScopeType! + + """Subscribe to project task template creation events""" + projectTaskTemplateCreated: ProjectTaskTemplateType! + + """Subscribe to project task template deletion events""" + projectTaskTemplateDeleted: ID! + + """Subscribe to project task template updates""" + projectTaskTemplateUpdated: ProjectTaskTemplateType! + + """Subscribe to project updates""" + projectUpdated: ProjectType! + + """Subscribe to report creation events""" + reportCreated: ReportType! + + """Subscribe to report deletion events""" + reportDeleted: ID! + + """Subscribe to report updates""" + reportUpdated: ReportType! + + """Subscribe to revenue creation events""" + revenueCreated: RevenueType! + + """Subscribe to revenue deletion events""" + revenueDeleted: ID! + + """Subscribe to revenue updates""" + revenueUpdated: RevenueType! + + """Subscribe to schedule creation events""" + scheduleCreated: ScheduleType! + + """Subscribe to schedule deletion events""" + scheduleDeleted: ID! + + """Subscribe to schedule updates""" + scheduleUpdated: ScheduleType! + + """Subscribe to scope creation events""" + scopeCreated: ScopeType! + + """Subscribe to scopes created from a template""" + scopeCreatedFromTemplate: ScopeType! + + """Subscribe to scope deletion events""" + scopeDeleted: ID! + + """Subscribe to scope template creation events""" + scopeTemplateCreated: ScopeTemplateType! + + """Subscribe to scope template deletion events""" + scopeTemplateDeleted: ID! + + """Subscribe to scope template updates""" + scopeTemplateUpdated: ScopeTemplateType! + + """Subscribe to scope updates""" + scopeUpdated: ScopeType! + + """Subscribe to service visit creation events""" + serviceCreated: ServiceType! + + """Subscribe to service visit deletion events""" + serviceDeleted: ID! + + """Subscribe to service visit updates""" + serviceUpdated: ServiceType! + + """Subscribe to task completion creation events""" + taskCompletionCreated: TaskCompletionType! + + """Subscribe to task completion deletion events""" + taskCompletionDeleted: ID! + + """Subscribe to task completion updates""" + taskCompletionUpdated: TaskCompletionType! + + """Subscribe to task creation events""" + taskCreated: TaskType! + + """Subscribe to task deletion events""" + taskDeleted: ID! + + """Subscribe to task template creation events""" + taskTemplateCreated: TaskTemplateType! + + """Subscribe to task template deletion events""" + taskTemplateDeleted: ID! + + """Subscribe to task template updates""" + taskTemplateUpdated: TaskTemplateType! + + """Subscribe to task updates""" + taskUpdated: TaskType! + + """Subscribe to team profile creation events""" + teamProfileCreated: TeamProfileType! + + """Subscribe to team profile deletion events""" + teamProfileDeleted: ID! + + """Subscribe to team profile updates""" + teamProfileUpdated: TeamProfileType! +} + +"""Record of a task template being completed during a service visit""" +input TaskCompletionFilter { + AND: TaskCompletionFilter + DISTINCT: Boolean + NOT: TaskCompletionFilter + OR: TaskCompletionFilter + completedById: UUID + id: UUID + month: Int + serviceId: UUID + taskId: UUID + year: Int +} + +input TaskCompletionInput { + completedAt: DateTime! + completedById: ID! + notes: String! = "" + serviceId: ID! + taskId: ID! +} + +"""Record of a task template being completed during a service visit""" +type TaskCompletionType implements Node { + accountAddressId: UUID + completedAt: DateTime! + completedById: UUID! + + """The Globally Unique ID of this object""" + id: ID! + month: Int! + notes: String! + serviceId: UUID! + taskId: UUID! + year: Int! +} + +input TaskCompletionUpdateInput { + completedAt: DateTime = null + completedById: ID = null + id: ID! + notes: String = null + serviceId: ID = null + taskId: ID = null +} + +"""Individual task template within an area""" +input TaskFilter { + AND: TaskFilter + DISTINCT: Boolean + NOT: TaskFilter + OR: TaskFilter + areaId: UUID + + """How often the task should be performed""" + frequency: TaskFrequencyChoices + id: UUID +} + +enum TaskFrequencyChoices { + ANNUAL + AS_NEEDED + DAILY + MONTHLY + QUARTERLY + TRIANNUAL + WEEKLY +} + +input TaskInput { + areaId: ID! + checklistDescription: String = null + description: String! + estimatedMinutes: Int = null + frequency: String! + isConditional: Boolean! = false + order: Int! = 0 +} + +"""Reusable task definition belonging to an AreaTemplate""" +input TaskTemplateFilter { + AND: TaskTemplateFilter + DISTINCT: Boolean + NOT: TaskTemplateFilter + OR: TaskTemplateFilter + areaTemplateId: UUID + + """Case-insensitive search on description""" + descriptionSearch: String = null + + """How often the task should be performed""" + frequency: String = null + id: UUID + + """Task marked 'where applicable'""" + isConditional: Boolean = null +} + +input TaskTemplateInput { + areaTemplateId: ID! + checklistDescription: String = null + description: String! + estimatedMinutes: Int = null + frequency: String! + isConditional: Boolean = false + order: Int = 0 +} + +"""Reusable task definition belonging to an AreaTemplate""" +type TaskTemplateType implements Node { + areaTemplateId: UUID! + checklistDescription: String! + description: String! + estimatedMinutes: Int + + """How often the task should be performed""" + frequency: TaskFrequencyChoices! + + """The Globally Unique ID of this object""" + id: ID! + + """Task marked 'where applicable'""" + isConditional: Boolean! + order: Int! +} + +input TaskTemplateUpdateInput { + checklistDescription: String = null + description: String = null + estimatedMinutes: Int = null + frequency: String = null + id: ID! + isConditional: Boolean = null + order: Int = null +} + +"""Individual task template within an area""" +type TaskType implements Node { + areaId: UUID! + checklistDescription: String! + description: String! + estimatedMinutes: Int + + """How often the task should be performed""" + frequency: TaskFrequencyChoices! + + """The Globally Unique ID of this object""" + id: ID! + + """Task marked 'where applicable'""" + isConditional: Boolean! + order: Int! +} + +input TaskUpdateInput { + areaId: ID = null + checklistDescription: String = null + description: String = null + estimatedMinutes: Int = null + frequency: String = null + id: ID! + isConditional: Boolean = null + order: Int = null +} + +input TeamProfileInput { + email: String = null + firstName: String! + lastName: String! + notes: String = null + phone: String = null + role: String! + status: String! = "PENDING" + userId: ID = null +} + +"""Internal team member accounts""" +type TeamProfileType implements Node { + email: String + firstName: String! + fullName: String! + + """The Globally Unique ID of this object""" + id: ID! + lastName: String! + notes: String! + + """Unique identifier from Ory Kratos authentication system""" + oryKratosId: String + phone: String + + """Role of the team member""" + role: RoleChoices! + + """Current status of the profile""" + status: StatusChoices! +} + +input TeamProfileUpdateInput { + email: String = null + firstName: String = null + id: ID! + lastName: String = null + notes: String = null + phone: String = null + role: String = null + status: String = null + userId: ID = null +} + +scalar UUID + +input UUIDFilterLookup { + """ + Case-sensitive containment test. Filter will be skipped on `null` value + """ + contains: UUID + + """Case-sensitive ends-with. Filter will be skipped on `null` value""" + endsWith: UUID + + """Exact match. Filter will be skipped on `null` value""" + exact: UUID + + """ + Case-insensitive containment test. Filter will be skipped on `null` value + """ + iContains: UUID + + """Case-insensitive ends-with. Filter will be skipped on `null` value""" + iEndsWith: UUID + + """Case-insensitive exact match. Filter will be skipped on `null` value""" + iExact: UUID + + """ + Case-insensitive regular expression match. Filter will be skipped on `null` value + """ + iRegex: UUID + + """Case-insensitive starts-with. Filter will be skipped on `null` value""" + iStartsWith: UUID + + """ + Exact match of items in a given list. Filter will be skipped on `null` value + """ + inList: [UUID!] + + """Assignment test. Filter will be skipped on `null` value""" + isNull: Boolean + + """ + Case-sensitive regular expression match. Filter will be skipped on `null` value + """ + regex: UUID + + """Case-sensitive starts-with. Filter will be skipped on `null` value""" + startsWith: UUID +} + +scalar Upload \ No newline at end of file diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..1d8d219 --- /dev/null +++ b/src/app.css @@ -0,0 +1,49 @@ +@import 'tailwindcss'; + +@plugin 'flowbite/plugin'; + +@custom-variant dark (&:where(.dark, .dark *)); + +@theme { + --color-primary-50: #eff6ff; /* blue-50 */ + --color-primary-100: #dbeafe; /* blue-100 */ + --color-primary-200: #bfdbfe; /* blue-200 */ + --color-primary-300: #93c5fd; /* blue-300 */ + --color-primary-400: #60a5fa; /* blue-400 */ + --color-primary-500: #3b82f6; /* blue-500 */ + --color-primary-600: #2563eb; /* blue-600 */ + --color-primary-700: #1d4ed8; /* blue-700 */ + --color-primary-800: #1e40af; /* blue-800 */ + --color-primary-900: #1e3a8a; /* blue-900 */ + + --color-secondary-50: #f0fdf4; /* green-50 */ + --color-secondary-100: #dcfce7; /* green-100 */ + --color-secondary-200: #bbf7d0; /* green-200 */ + --color-secondary-300: #86efac; /* green-300 */ + --color-secondary-400: #4ade80; /* green-400 */ + --color-secondary-500: #22c55e; /* green-500 */ + --color-secondary-600: #16a34a; /* green-600 */ + --color-secondary-700: #15803d; /* green-700 */ + --color-secondary-800: #166534; /* green-800 */ + --color-secondary-900: #14532d; /* green-900 */ +} + +@source "../node_modules/flowbite-svelte/dist"; +@source "../node_modules/flowbite-svelte-icons/dist"; + +/* Base visual refinements */ +:root { + color-scheme: light dark; +} +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Improve default focus outline for accessibility */ +:where(a, button, input, select, textarea) { + outline-offset: 2px; +} + +/* Subtle card-like background for sections on light mode */ +/* Keep Tailwind utility-first approach; only minor resets here */ diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..da08e6d --- /dev/null +++ b/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..a3b81a0 --- /dev/null +++ b/src/app.html @@ -0,0 +1,12 @@ + + + + + + Nexus 5.0 Online Platform + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/src/lib/assets/favicon.svg b/src/lib/assets/favicon.svg new file mode 100644 index 0000000..cc5dc66 --- /dev/null +++ b/src/lib/assets/favicon.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/src/lib/auth.ts b/src/lib/auth.ts new file mode 100644 index 0000000..c509833 --- /dev/null +++ b/src/lib/auth.ts @@ -0,0 +1,164 @@ +import { writable, derived, type Readable } from 'svelte/store'; + +const isBrowser = typeof window !== 'undefined'; + +// Kratos/Oathkeeper configuration - always use production +const KRATOS_BASE_URL = isBrowser ? 'https://auth.example.com' : ''; + +// Get the app's origin for return_to URLs +const APP_ORIGIN = isBrowser ? window.location.origin : ''; + +export type SessionIdentity = { + id: string; + traits: { + email?: string; + name?: { + first?: string; + last?: string; + }; + phone?: string; + profile_type?: string; + }; + metadata_public?: { + django_profile_id?: string; + customer_id?: string; + }; +}; + +export type Session = { + id: string; + active: boolean; + identity: SessionIdentity; + expires_at?: string; + authenticated_at?: string; +} | null; + +function createAuthStore() { + const store = writable(null); + let checkInProgress = false; + + // Check session with Kratos whoami endpoint + async function checkSession(): Promise { + if (!isBrowser) return null; + if (checkInProgress) return null; + + checkInProgress = true; + + try { + const response = await fetch(`${KRATOS_BASE_URL}/sessions/whoami`, { + credentials: 'include', // Send cookies + headers: { + Accept: 'application/json' + } + }); + + if (response.ok) { + const session = await response.json(); + store.set(session); + return session; + } else { + store.set(null); + return null; + } + } catch (error) { + console.warn('Failed to check session:', error); + store.set(null); + return null; + } finally { + checkInProgress = false; + } + } + + // Initialize session check on browser + if (isBrowser) { + checkSession(); + } + + return { + subscribe: store.subscribe, + checkSession, + logout: async (returnTo?: string) => { + if (!isBrowser) return; + + try { + // Use provided returnTo or default to app origin + const returnUrl = returnTo || APP_ORIGIN; + + // Call Kratos logout endpoint with return_to parameter + const logoutEndpoint = `${KRATOS_BASE_URL}/self-service/logout/browser?return_to=${encodeURIComponent(returnUrl)}`; + const response = await fetch(logoutEndpoint, { + credentials: 'include' + }); + + if (response.ok) { + const logoutData = await response.json(); + // Redirect to logout URL to complete the flow (this will include the return_to) + if (logoutData.logout_url) { + window.location.href = logoutData.logout_url; + } + } + } catch (error) { + console.error('Logout failed:', error); + } finally { + store.set(null); + } + } + }; +} + +export const auth = createAuthStore(); + +// Reactive helpers for UI +export const isAuthenticated: Readable = derived(auth, ($session) => + Boolean($session?.active) +); + +export const userEmail: Readable = derived( + auth, + ($session) => $session?.identity?.traits?.email ?? null +); + +export const userFullName: Readable = derived(auth, ($session) => { + const firstName = $session?.identity?.traits?.name?.first; + const lastName = $session?.identity?.traits?.name?.last; + if (firstName && lastName) return `${firstName} ${lastName}`; + if (firstName) return firstName; + if (lastName) return lastName; + return null; +}); + +// Helper functions for checking authentication +export function checkSession(): Promise { + return auth.checkSession(); +} + +export function logout(returnTo?: string): Promise { + return auth.logout(returnTo); +} + +// Login and registration redirects to Kratos +export function redirectToLogin(returnTo?: string): void { + if (!isBrowser) return; + + // Default to the app origin + path, or use provided returnTo + const returnUrl = returnTo + ? returnTo.startsWith('http') + ? returnTo + : `${APP_ORIGIN}${returnTo}` + : window.location.href; + + window.location.href = `${KRATOS_BASE_URL}/self-service/login/browser?return_to=${encodeURIComponent(returnUrl)}`; +} + +export function redirectToRegistration(returnTo?: string): void { + if (!isBrowser) return; + + // Default to the app origin + path, or use provided returnTo + const returnUrl = returnTo + ? returnTo.startsWith('http') + ? returnTo + : `${APP_ORIGIN}${returnTo}` + : window.location.href; + + window.location.href = `${KRATOS_BASE_URL}/self-service/registration/browser?return_to=${encodeURIComponent(returnUrl)}`; +} diff --git a/src/lib/components/AuthenticatedImage.svelte b/src/lib/components/AuthenticatedImage.svelte new file mode 100644 index 0000000..dac4ad1 --- /dev/null +++ b/src/lib/components/AuthenticatedImage.svelte @@ -0,0 +1,50 @@ + + +{#if error} +
+

{error}

+
+{:else if src} + +{:else} +
+ +
+{/if} diff --git a/src/lib/components/AuthenticatedVideo.svelte b/src/lib/components/AuthenticatedVideo.svelte new file mode 100644 index 0000000..c58d7cc --- /dev/null +++ b/src/lib/components/AuthenticatedVideo.svelte @@ -0,0 +1,119 @@ + + +{#if error} +
+
+ + + +

+ {error} +

+
+
+{:else if loading} +
+ {#if thumbnailSrc} + + {/if} +
+ +

Loading video...

+
+
+{:else if videoSrc} + +{/if} diff --git a/src/lib/components/OffCanvasLeft.svelte b/src/lib/components/OffCanvasLeft.svelte new file mode 100644 index 0000000..89b19d4 --- /dev/null +++ b/src/lib/components/OffCanvasLeft.svelte @@ -0,0 +1,70 @@ + + + + +{#if isOpen} + + + + + +{/if} diff --git a/src/lib/components/OffCanvasRight.svelte b/src/lib/components/OffCanvasRight.svelte new file mode 100644 index 0000000..67cb1fd --- /dev/null +++ b/src/lib/components/OffCanvasRight.svelte @@ -0,0 +1,70 @@ + + + + +{#if isOpen} + + + + + +{/if} diff --git a/src/lib/components/accounts/AddressLabors.svelte b/src/lib/components/accounts/AddressLabors.svelte new file mode 100644 index 0000000..e6c9d33 --- /dev/null +++ b/src/lib/components/accounts/AddressLabors.svelte @@ -0,0 +1,98 @@ + + +
+
+

Labor

+
+ {#if error} +
{error}
+ {/if} + {#if loading || $labors.fetching} +
+ Loading labor rates... +
+ {:else if sortedLabors().length} +
+ {#each sortedLabors() as l (l.id)} +
+
+
+
{l.amount}
+
+
+ + fetchLabors()} + /> +
+
+
+ {formatDate(l.startDate)} - {formatDate(l.endDate)} +
+
+ {/each} +
+ {:else} +
No labor rates.
+ {/if} +
diff --git a/src/lib/components/accounts/AddressLaborsCompact.svelte b/src/lib/components/accounts/AddressLaborsCompact.svelte new file mode 100644 index 0000000..3405a12 --- /dev/null +++ b/src/lib/components/accounts/AddressLaborsCompact.svelte @@ -0,0 +1,72 @@ + + +{#if loading || $labors.fetching} +
+ +
+{:else if error} +
Error
+{:else if currentLabors().length} +
+ {#each currentLabors() as l (l.id)} +
onEditLabor?.(l.id)} + onkeydown={(e) => e.key === 'Enter' && onEditLabor?.(l.id)} + title="Click to edit labor rate" + > +
+ {l.amount} +
+
Active rate
+
+ {/each} +
+{:else} +
None
+{/if} diff --git a/src/lib/components/accounts/AddressSchedules.svelte b/src/lib/components/accounts/AddressSchedules.svelte new file mode 100644 index 0000000..967db02 --- /dev/null +++ b/src/lib/components/accounts/AddressSchedules.svelte @@ -0,0 +1,122 @@ + + +
+
+

Schedules

+ +
+ {#if error} +
{error}
+ {/if} + {#if loading || $schedules.fetching} +
+ Loading schedules... +
+ {:else if sortedSchedules().length} +
+ {#each sortedSchedules() as s (s.id)} +
+
+
+
+ {s.name || 'Service Schedule'} +
+
+ Mon + Tue + Wed + Thu + Fri + Sat + Sun + {#if s.weekendService} + Weekend + {/if} +
+
+
+ + fetchSchedules()} + /> +
+
+
+ {formatDate(s.startDate)} - {formatDate(s.endDate)} +
+ {#if s.scheduleException} +
+ {s.scheduleException} +
+ {/if} +
+ {/each} +
+ {:else} +
No schedules.
+ {/if} +
diff --git a/src/lib/components/accounts/AddressSchedulesCompact.svelte b/src/lib/components/accounts/AddressSchedulesCompact.svelte new file mode 100644 index 0000000..ddc2d12 --- /dev/null +++ b/src/lib/components/accounts/AddressSchedulesCompact.svelte @@ -0,0 +1,83 @@ + + +{#if loading || $schedules.fetching} +
+ +
+{:else if error} +
Error
+{:else if currentSchedules().length} +
+ {#each currentSchedules() as s (s.id)} +
onEditSchedule?.(s.id)} + onkeydown={(e) => e.key === 'Enter' && onEditSchedule?.(s.id)} + title="Click to edit schedule" + > +
+ {s.name || 'Schedule'} +
+
+ {#if s.mondayService}Mo{/if} + {#if s.tuesdayService}Tu{/if} + {#if s.wednesdayService}We{/if} + {#if s.thursdayService}Th{/if} + {#if s.fridayService}Fr{/if} + {#if s.saturdayService}Sa{/if} + {#if s.sundayService}Su{/if} + {#if s.weekendService} + Weekend + {/if} +
+
+ {/each} +
+{:else} +
None
+{/if} diff --git a/src/lib/components/accounts/CreateAccount.svelte b/src/lib/components/accounts/CreateAccount.svelte new file mode 100644 index 0000000..7ac2823 --- /dev/null +++ b/src/lib/components/accounts/CreateAccount.svelte @@ -0,0 +1,11 @@ + + + diff --git a/src/lib/components/accounts/CreateAccountAddress.svelte b/src/lib/components/accounts/CreateAccountAddress.svelte new file mode 100644 index 0000000..c04f6a0 --- /dev/null +++ b/src/lib/components/accounts/CreateAccountAddress.svelte @@ -0,0 +1,151 @@ + + +
+ {#if error} + {error} + {/if} + +
+
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
diff --git a/src/lib/components/accounts/CreateAccountContact.svelte b/src/lib/components/accounts/CreateAccountContact.svelte new file mode 100644 index 0000000..fb553ad --- /dev/null +++ b/src/lib/components/accounts/CreateAccountContact.svelte @@ -0,0 +1,142 @@ + + +
+ {#if error} + {error} + {/if} + +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + + + +
+ {/each} +
+
+ + +
+ + {/if} + + +
+

Uploaded Photos

+ {#if $photosStore.fetching} +
+ + Loading photos... +
+ {:else if photos.length} +
+ {#each photos as photo (photo.id)} + + {/each} +
+ {:else} +
+

No photos uploaded yet.

+
+ {/if} +
+ + {/if} + + + {#if activeMediaTab === 'videos'} +
+ +
+

Upload Videos

+ +
+ + + {#if stagedVideos.length} +
+
+

+ Staged Videos ({stagedVideos.length}) +

+

Review and confirm to upload

+
+
+ {#each stagedVideos as video, i (video.preview)} +
+ + + + + + + +
+ {/each} +
+
+ + +
+
+ {/if} + + +
+

Uploaded Videos

+ {#if videos.length} +
+ {#each videos as video (video.id)} + + {/each} +
+ {:else} +
+

No videos uploaded yet.

+

+ Upload videos above to get started. +

+
+ {/if} +
+
+ {/if} + diff --git a/src/lib/components/media/MediaUploadZone.svelte b/src/lib/components/media/MediaUploadZone.svelte new file mode 100644 index 0000000..435ffcc --- /dev/null +++ b/src/lib/components/media/MediaUploadZone.svelte @@ -0,0 +1,100 @@ + + +
e.key === 'Enter' && openFileDialog()} +> + + + + +

+ {isDragging ? `Drop ${mediaType}s here` : `Drag & drop ${mediaType}s or click to browse`} +

+ +

+ Max size: {maxSize} • Formats: {formats} +

+
diff --git a/src/lib/components/media/PhotoGalleryItem.svelte b/src/lib/components/media/PhotoGalleryItem.svelte new file mode 100644 index 0000000..9877330 --- /dev/null +++ b/src/lib/components/media/PhotoGalleryItem.svelte @@ -0,0 +1,177 @@ + + +
+ + + + +
+
+

{photo.title}

+ {#if photo.notes} +

{photo.notes}

+ {/if} +
+ +
+
+ + + +
+ +

+ Are you sure you want to delete "{photo.title}"? +

+

This action cannot be undone.

+ +
+ + +
+
+
diff --git a/src/lib/components/media/VideoGalleryItem.svelte b/src/lib/components/media/VideoGalleryItem.svelte new file mode 100644 index 0000000..852392c --- /dev/null +++ b/src/lib/components/media/VideoGalleryItem.svelte @@ -0,0 +1,92 @@ + + +
+ {#if showVideo && video.video} +
+ +
+ {:else} + + {/if} + +
+

+ {video.title} +

+ {#if video.notes} +

+ {video.notes} +

+ {/if} +
+ {formatFileSize(video.fileSizeBytes)} + +
+
+
diff --git a/src/lib/components/messages/MessageBell.svelte b/src/lib/components/messages/MessageBell.svelte new file mode 100644 index 0000000..0399396 --- /dev/null +++ b/src/lib/components/messages/MessageBell.svelte @@ -0,0 +1,42 @@ + + + diff --git a/src/lib/components/modals/accounts/AccountViewModal.svelte b/src/lib/components/modals/accounts/AccountViewModal.svelte new file mode 100644 index 0000000..b41c021 --- /dev/null +++ b/src/lib/components/modals/accounts/AccountViewModal.svelte @@ -0,0 +1,297 @@ + + + + + + +
+ {#if error} + {error} + {/if} + + {#if loading || $account.fetching || $labors.fetching || $customers.fetching} +
+ + Loading account... +
+ {:else if $account.data?.account} + +
+

+ {$account.data.account.name} +

+
+ Customer: {$customers.data?.customers?.[0]?.name || '-'} +
+
+ + +
+ + {String($account.data.account.status)} + +
+ + +
+

+ Account Information +

+
+
+
Start Date
+
+ {formatDate($account.data.account.startDate)} +
+
+
+
+ + +
+

+ Service Addresses +

+ {#if sortedAddresses().length} +
+ {#each sortedAddresses() as address (address.id)} +
+
+

+ {address.name || 'Primary Service Address'} +

+ {#if address.isPrimary} + Primary + {/if} + {#if address.isActive} + Active + {:else} + Inactive + {/if} +
+
+ {address.streetAddress} +
+
+ {address.city}, {address.state} + {address.zipCode} +
+ {#if address.notes} +
+ {address.notes} +
+ {/if} +
+ {/each} +
+ {:else} +
No service addresses found.
+ {/if} +
+ + +
+

Labor

+ {#if sortedLabors().length} +
+ {#each sortedLabors() as labor (labor.id)} +
+
+ {labor.amount} +
+
+ {formatDate(labor.startDate)} - {formatDate(labor.endDate)} +
+
+ {/each} +
+ {:else} +
No labor rates.
+ {/if} +
+ + +
+

Contacts

+ {#if $account.data.account.contacts?.length} +
+ {#each $account.data.account.contacts as contact (contact.id)} +
+
+

+ {contact.fullName || + `${contact.firstName || ''} ${contact.lastName || ''}`.trim() || + 'Contact'} +

+ {#if contact.isPrimary} + Primary + {/if} + {#if contact.isActive} + Active + {:else} + Inactive + {/if} +
+
{contact.email || '-'}
+
{contact.phone || '-'}
+ {#if contact.notes} +
+ {contact.notes} +
+ {/if} +
+ {/each} +
+ {:else} +
No contacts.
+ {/if} +
+ {:else} +
Account not found.
+ {/if} +
+
diff --git a/src/lib/components/modals/common/ConfirmDeleteModal.svelte b/src/lib/components/modals/common/ConfirmDeleteModal.svelte new file mode 100644 index 0000000..b4c615a --- /dev/null +++ b/src/lib/components/modals/common/ConfirmDeleteModal.svelte @@ -0,0 +1,64 @@ + + + + + +
+ {#if error} +
{error}
+ {/if} + +

{message}

+
+ + +
+
+
diff --git a/src/lib/components/modals/common/DeleteModal.svelte b/src/lib/components/modals/common/DeleteModal.svelte new file mode 100644 index 0000000..2050326 --- /dev/null +++ b/src/lib/components/modals/common/DeleteModal.svelte @@ -0,0 +1,105 @@ + + + + + +
+ {#if error} +
+ {error} +
+ {/if} + + {#if success} +
+ {entityType.charAt(0).toUpperCase() + entityType.slice(1)} deleted successfully! +
+ {/if} + + +

+ Are you sure you want to delete {itemName}? +

+ +
+ + +
+
+
diff --git a/src/lib/components/modals/services/CompleteServiceModal.svelte b/src/lib/components/modals/services/CompleteServiceModal.svelte new file mode 100644 index 0000000..0510c93 --- /dev/null +++ b/src/lib/components/modals/services/CompleteServiceModal.svelte @@ -0,0 +1,102 @@ + + + + + +
+ {#if error} +
+ {error} +
+ {/if} + + {#if success} +
+ Service closed successfully! +
+ {/if} + +
+ +

Complete Service

+

+ Optionally add notes for this visit, then confirm to mark the service as complete. +

+
+ +
+ +