From 831904bbff16839cd91512440eda0a128d86af46 Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Fri, 21 Feb 2025 11:32:31 +0800 Subject: [PATCH] initial commit --- .env.development | 2 + .env.production | 3 + .eslintrc.json | 16 + .gitignore | 49 + .npmrc | 1 + .nvmrc | 1 + README.md | 33 +- next.config.js | 18 + package-lock.json | 10254 ++++++++++++++++ package.json | 59 + postcss.config.js | 6 + .../android/android-launchericon-144-144.png | Bin 0 -> 3684 bytes .../android/android-launchericon-192-192.png | Bin 0 -> 4698 bytes public/android/android-launchericon-48-48.png | Bin 0 -> 1245 bytes .../android/android-launchericon-512-512.png | Bin 0 -> 14468 bytes public/android/android-launchericon-72-72.png | Bin 0 -> 2022 bytes public/android/android-launchericon-96-96.png | Bin 0 -> 2198 bytes public/ios/100.png | Bin 0 -> 2937 bytes public/ios/1024.png | Bin 0 -> 38960 bytes public/ios/114.png | Bin 0 -> 3319 bytes public/ios/120.png | Bin 0 -> 3147 bytes public/ios/128.png | Bin 0 -> 3134 bytes public/ios/144.png | Bin 0 -> 3684 bytes public/ios/152.png | Bin 0 -> 4047 bytes public/ios/16.png | Bin 0 -> 629 bytes public/ios/167.png | Bin 0 -> 4297 bytes public/ios/180.png | Bin 0 -> 4693 bytes public/ios/192.png | Bin 0 -> 4698 bytes public/ios/20.png | Bin 0 -> 808 bytes public/ios/256.png | Bin 0 -> 6905 bytes public/ios/29.png | Bin 0 -> 1060 bytes public/ios/32.png | Bin 0 -> 893 bytes public/ios/40.png | Bin 0 -> 1290 bytes public/ios/50.png | Bin 0 -> 1493 bytes public/ios/512.png | Bin 0 -> 14468 bytes public/ios/57.png | Bin 0 -> 1742 bytes public/ios/58.png | Bin 0 -> 1822 bytes public/ios/60.png | Bin 0 -> 1774 bytes public/ios/64.png | Bin 0 -> 1492 bytes public/ios/72.png | Bin 0 -> 2022 bytes public/ios/76.png | Bin 0 -> 2359 bytes public/ios/80.png | Bin 0 -> 1803 bytes public/ios/87.png | Bin 0 -> 2435 bytes public/windows11/LargeTile.scale-100.png | Bin 0 -> 7305 bytes public/windows11/LargeTile.scale-125.png | Bin 0 -> 9595 bytes public/windows11/LargeTile.scale-150.png | Bin 0 -> 11597 bytes public/windows11/LargeTile.scale-200.png | Bin 0 -> 16019 bytes public/windows11/LargeTile.scale-400.png | Bin 0 -> 43463 bytes public/windows11/SmallTile.scale-100.png | Bin 0 -> 1903 bytes public/windows11/SmallTile.scale-125.png | Bin 0 -> 2507 bytes public/windows11/SmallTile.scale-150.png | Bin 0 -> 2738 bytes public/windows11/SmallTile.scale-200.png | Bin 0 -> 3775 bytes public/windows11/SmallTile.scale-400.png | Bin 0 -> 6932 bytes public/windows11/SplashScreen.scale-100.png | Bin 0 -> 8148 bytes public/windows11/SplashScreen.scale-125.png | Bin 0 -> 10181 bytes public/windows11/SplashScreen.scale-150.png | Bin 0 -> 12352 bytes public/windows11/SplashScreen.scale-200.png | Bin 0 -> 17364 bytes public/windows11/SplashScreen.scale-400.png | Bin 0 -> 48364 bytes .../windows11/Square150x150Logo.scale-100.png | Bin 0 -> 3350 bytes .../windows11/Square150x150Logo.scale-125.png | Bin 0 -> 3990 bytes .../windows11/Square150x150Logo.scale-150.png | Bin 0 -> 5157 bytes .../windows11/Square150x150Logo.scale-200.png | Bin 0 -> 7475 bytes .../windows11/Square150x150Logo.scale-400.png | Bin 0 -> 15407 bytes ...go.altform-lightunplated_targetsize-16.png | Bin 0 -> 629 bytes ...go.altform-lightunplated_targetsize-20.png | Bin 0 -> 808 bytes ...go.altform-lightunplated_targetsize-24.png | Bin 0 -> 837 bytes ...o.altform-lightunplated_targetsize-256.png | Bin 0 -> 6905 bytes ...go.altform-lightunplated_targetsize-30.png | Bin 0 -> 1010 bytes ...go.altform-lightunplated_targetsize-32.png | Bin 0 -> 893 bytes ...go.altform-lightunplated_targetsize-36.png | Bin 0 -> 1174 bytes ...go.altform-lightunplated_targetsize-40.png | Bin 0 -> 1290 bytes ...go.altform-lightunplated_targetsize-44.png | Bin 0 -> 1373 bytes ...go.altform-lightunplated_targetsize-48.png | Bin 0 -> 1245 bytes ...go.altform-lightunplated_targetsize-60.png | Bin 0 -> 1774 bytes ...go.altform-lightunplated_targetsize-64.png | Bin 0 -> 1492 bytes ...go.altform-lightunplated_targetsize-72.png | Bin 0 -> 2022 bytes ...go.altform-lightunplated_targetsize-80.png | Bin 0 -> 1803 bytes ...go.altform-lightunplated_targetsize-96.png | Bin 0 -> 2198 bytes ...x44Logo.altform-unplated_targetsize-16.png | Bin 0 -> 629 bytes ...x44Logo.altform-unplated_targetsize-20.png | Bin 0 -> 808 bytes ...x44Logo.altform-unplated_targetsize-24.png | Bin 0 -> 837 bytes ...44Logo.altform-unplated_targetsize-256.png | Bin 0 -> 6905 bytes ...x44Logo.altform-unplated_targetsize-30.png | Bin 0 -> 1010 bytes ...x44Logo.altform-unplated_targetsize-32.png | Bin 0 -> 893 bytes ...x44Logo.altform-unplated_targetsize-36.png | Bin 0 -> 1174 bytes ...x44Logo.altform-unplated_targetsize-40.png | Bin 0 -> 1290 bytes ...x44Logo.altform-unplated_targetsize-44.png | Bin 0 -> 1373 bytes ...x44Logo.altform-unplated_targetsize-48.png | Bin 0 -> 1245 bytes ...x44Logo.altform-unplated_targetsize-60.png | Bin 0 -> 1774 bytes ...x44Logo.altform-unplated_targetsize-64.png | Bin 0 -> 1492 bytes ...x44Logo.altform-unplated_targetsize-72.png | Bin 0 -> 2022 bytes ...x44Logo.altform-unplated_targetsize-80.png | Bin 0 -> 1803 bytes ...x44Logo.altform-unplated_targetsize-96.png | Bin 0 -> 2198 bytes .../windows11/Square44x44Logo.scale-100.png | Bin 0 -> 1373 bytes .../windows11/Square44x44Logo.scale-125.png | Bin 0 -> 1693 bytes .../windows11/Square44x44Logo.scale-150.png | Bin 0 -> 1984 bytes .../windows11/Square44x44Logo.scale-200.png | Bin 0 -> 2457 bytes .../windows11/Square44x44Logo.scale-400.png | Bin 0 -> 4406 bytes .../Square44x44Logo.targetsize-16.png | Bin 0 -> 629 bytes .../Square44x44Logo.targetsize-20.png | Bin 0 -> 808 bytes .../Square44x44Logo.targetsize-24.png | Bin 0 -> 837 bytes .../Square44x44Logo.targetsize-256.png | Bin 0 -> 6905 bytes .../Square44x44Logo.targetsize-30.png | Bin 0 -> 1010 bytes .../Square44x44Logo.targetsize-32.png | Bin 0 -> 893 bytes .../Square44x44Logo.targetsize-36.png | Bin 0 -> 1174 bytes .../Square44x44Logo.targetsize-40.png | Bin 0 -> 1290 bytes .../Square44x44Logo.targetsize-44.png | Bin 0 -> 1373 bytes .../Square44x44Logo.targetsize-48.png | Bin 0 -> 1245 bytes .../Square44x44Logo.targetsize-60.png | Bin 0 -> 1774 bytes .../Square44x44Logo.targetsize-64.png | Bin 0 -> 1492 bytes .../Square44x44Logo.targetsize-72.png | Bin 0 -> 2022 bytes .../Square44x44Logo.targetsize-80.png | Bin 0 -> 1803 bytes .../Square44x44Logo.targetsize-96.png | Bin 0 -> 2198 bytes public/windows11/StoreLogo.scale-100.png | Bin 0 -> 1351 bytes public/windows11/StoreLogo.scale-125.png | Bin 0 -> 1672 bytes public/windows11/StoreLogo.scale-150.png | Bin 0 -> 1628 bytes public/windows11/StoreLogo.scale-200.png | Bin 0 -> 2605 bytes public/windows11/StoreLogo.scale-400.png | Bin 0 -> 4906 bytes .../windows11/Wide310x150Logo.scale-100.png | Bin 0 -> 3748 bytes .../windows11/Wide310x150Logo.scale-125.png | Bin 0 -> 4745 bytes .../windows11/Wide310x150Logo.scale-150.png | Bin 0 -> 5829 bytes .../windows11/Wide310x150Logo.scale-200.png | Bin 0 -> 8148 bytes .../windows11/Wide310x150Logo.scale-400.png | Bin 0 -> 17364 bytes src/app/(main)/analytics/page.tsx | 11 + .../dashboard/CompanyTeamCashFlow/page.tsx | 26 + .../(main)/dashboard/ProjectCashFlow/page.tsx | 29 + .../ProjectFinancialSummary/page.tsx | 26 + .../dashboard/ProjectStatusByClient/page.tsx | 29 + .../dashboard/StaffUtilization/page.tsx | 26 + src/app/(main)/dashboard/page.tsx | 18 + src/app/(main)/home/page.tsx | 17 + src/app/(main)/invoice/page.tsx | 11 + src/app/(main)/layout.tsx | 41 + src/app/(main)/projects/create/page.tsx | 23 + src/app/(main)/projects/page.tsx | 47 + src/app/(main)/settings/page.tsx | 11 + .../staffReimbursement/ClaimApproval/page.tsx | 11 + .../staffReimbursement/ClaimSummary/page.tsx | 11 + .../(main)/staffReimbursement/create/page.tsx | 21 + src/app/(main)/staffReimbursement/page.tsx | 47 + src/app/(main)/tasks/create/page.tsx | 23 + src/app/(main)/tasks/page.tsx | 47 + src/app/api/auth/[...nextauth]/route.ts | 6 + src/app/api/cashflow/index.ts | 39 + src/app/api/claims/index.ts | 50 + src/app/api/clientprojects/index.ts | 53 + src/app/api/projects/actions.ts | 59 + src/app/api/projects/index.ts | 46 + src/app/api/tasks/actions.ts | 27 + src/app/api/tasks/index.ts | 40 + src/app/favicon.ico | Bin 0 -> 14468 bytes src/app/global.css | 3 + src/app/layout.tsx | 24 + src/app/login/page.tsx | 20 + src/app/logout/page.tsx | 7 + src/app/manifest.ts | 464 + src/app/page.tsx | 7 + src/app/utils/fetchUtil.ts | 46 + src/app/utils/formatUtil.ts | 9 + src/components/AppBar/AppBar.tsx | 34 + src/components/AppBar/NavigationToggle.tsx | 46 + src/components/AppBar/Profile.tsx | 61 + src/components/AppBar/index.ts | 1 + .../AssignedProjectGrid.tsx | 247 + src/components/AssignedProjectGrid/index.ts | 1 + src/components/Breadcrumb/Breadcrumb.tsx | 51 + src/components/Breadcrumb/index.ts | 1 + src/components/ClaimSearch/ClaimSearch.tsx | 93 + .../ClaimSearch/ClaimSearchLoading.tsx | 40 + .../ClaimSearch/ClaimSearchWrapper.tsx | 18 + src/components/ClaimSearch/index.ts | 1 + .../CompanyTeamCashFlow.tsx | 306 + src/components/CompanyTeamCashFlow/index.ts | 1 + src/components/CreateClaim/ClaimDetails.tsx | 67 + src/components/CreateClaim/ClaimInputGrid.tsx | 442 + src/components/CreateClaim/CreateClaim.tsx | 48 + src/components/CreateClaim/index.ts | 1 + .../CreateProject/CreateProject.tsx | 125 + .../CreateProject/CreateProjectWrapper.tsx | 10 + .../CreateProject/MilestoneSection.tsx | 338 + .../CreateProject/ProjectClientDetails.tsx | 153 + .../CreateProject/ProjectTotalFee.tsx | 47 + .../CreateProject/ResourceCapacity.tsx | 139 + .../CreateProject/ResourceMilestone.tsx | 128 + .../CreateProject/ResourceSection.tsx | 226 + .../CreateProject/StaffAllocation.tsx | 334 + src/components/CreateProject/TaskSetup.tsx | 97 + src/components/CreateProject/index.ts | 1 + .../CreateTaskTemplate/CreateTaskTemplate.tsx | 137 + .../CreateTaskTemplateWrapper.tsx | 11 + src/components/CreateTaskTemplate/index.ts | 1 + .../CustomCardGrid/CustomCardGrid.tsx | 240 + src/components/CustomCardGrid/index.ts | 1 + .../CustomDatagrid/CustomDatagrid.tsx | 309 + src/components/CustomDatagrid/index.ts | 1 + src/components/CustomModal/CustomModal.tsx | 81 + src/components/CustomModal/index.ts | 1 + .../CustomSearchForm/CustomSearchForm.tsx | 379 + src/components/CustomSearchForm/index.ts | 1 + .../DashboardPage/DashboardPage.tsx | 51 + .../DashboardPage/DashboardTabButton.tsx | 77 + .../DashboardPage/ProgressByClient.tsx | 493 + src/components/DashboardPage/index.ts | 1 + src/components/EnterLeave/EnterLeaveModal.tsx | 125 + src/components/EnterLeave/LeaveInputGrid.tsx | 548 + src/components/EnterLeave/index.ts | 1 + .../EnterTimesheet/EnterTimesheetModal.tsx | 125 + .../EnterTimesheet/TimesheetInputGrid.tsx | 548 + src/components/EnterTimesheet/index.ts | 1 + src/components/LoginPage/LoginForm.tsx | 100 + src/components/LoginPage/LoginPage.tsx | 24 + src/components/LoginPage/index.ts | 1 + src/components/Logo/Logo.tsx | 44 + src/components/Logo/index.ts | 1 + src/components/LogoutPage/LogoutPage.tsx | 17 + src/components/LogoutPage/index.ts | 1 + .../NavigationContent/NavigationContent.tsx | 162 + src/components/NavigationContent/index.ts | 1 + src/components/PageTitle/PageTitle.tsx | 166 + src/components/PageTitle/index.ts | 1 + .../ProgressByClient/ProgressByClient.tsx | 643 + src/components/ProgressByClient/index.ts | 1 + .../ProgressByClientSearch.tsx | 57 + .../ProgressByClientSearchLoading.tsx | 40 + .../ProgressByClientSearchWrapper.tsx | 18 + .../ProgressByClientSearch/index.ts | 1 + .../ProgressCashFlowSearch.tsx | 156 + .../ProgressCashFlowSearchLoading.tsx | 40 + .../ProgressCashFlowSearchWrapper.tsx | 18 + .../ProgressCashFlowSearch/index.ts | 1 + .../ProjectCashFlow/ProjectCashFlow.tsx | 638 + src/components/ProjectCashFlow/index.ts | 1 + .../ProjectFinancialCard.tsx | 173 + .../ProjectFinancialSummary.tsx | 465 + .../ProjectFinancialSummary/index.ts | 1 + .../ProjectSearch/ProjectSearch.tsx | 100 + .../ProjectSearch/ProjectSearchLoading.tsx | 40 + .../ProjectSearch/ProjectSearchWrapper.tsx | 18 + src/components/ProjectSearch/index.ts | 1 + src/components/SearchBox/SearchBox.tsx | 201 + src/components/SearchBox/index.ts | 2 + .../SearchResults/SearchResults.tsx | 126 + src/components/SearchResults/index.ts | 2 + .../StaffUtilization/StaffUtilization.tsx | 1203 ++ src/components/StaffUtilization/index.ts | 1 + .../StyledDataGrid/StyledDataGrid.tsx | 22 + src/components/StyledDataGrid/index.ts | 1 + src/components/Swal/CustomAlerts.js | 22 + .../TaskTemplateSearch/TaskTemplateSearch.tsx | 70 + .../TaskTemplateSearchLoading.tsx | 38 + .../TaskTemplateSearchWrapper.tsx | 18 + src/components/TaskTemplateSearch/index.ts | 1 + .../TransferList/MultiSelectList.tsx | 173 + src/components/TransferList/TransferList.tsx | 260 + .../TransferList/TransferListWrapper.tsx | 15 + src/components/TransferList/index.ts | 1 + .../UserWorkspacePage/ProjectGrid.tsx | 100 + .../UserWorkspacePage/UserWorkspacePage.tsx | 81 + src/components/UserWorkspacePage/index.ts | 1 + src/config/api.ts | 2 + src/config/authConfig.ts | 58 + src/config/uiConfig.ts | 1 + src/i18n/I18nClientProvider.tsx | 43 + src/i18n/en/common.json | 3 + src/i18n/en/dashboard.json | 1 + src/i18n/en/login.json | 1 + src/i18n/en/projects.json | 1 + src/i18n/index.tsx | 92 + src/i18n/zh/common.json | 1 + src/i18n/zh/dashboard.json | 3 + src/i18n/zh/login.json | 10 + src/i18n/zh/projects.json | 1 + src/middleware.ts | 39 + src/theme.ts | 11 + src/theme/EmotionCache.tsx | 100 + src/theme/ThemeRegistry.tsx | 22 + src/theme/colorConst.js | 417 + src/theme/devias-material-kit/colors.ts | 57 + src/theme/devias-material-kit/components.ts | 394 + src/theme/devias-material-kit/index.ts | 26 + src/theme/devias-material-kit/palette.ts | 36 + src/theme/devias-material-kit/shadows.ts | 31 + src/theme/devias-material-kit/typography.ts | 84 + tailwind.config.js | 16 + tsconfig.json | 27 + zip_project.ps1 | 10 + 286 files changed, 24759 insertions(+), 2 deletions(-) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .nvmrc create mode 100644 next.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/android/android-launchericon-144-144.png create mode 100644 public/android/android-launchericon-192-192.png create mode 100644 public/android/android-launchericon-48-48.png create mode 100644 public/android/android-launchericon-512-512.png create mode 100644 public/android/android-launchericon-72-72.png create mode 100644 public/android/android-launchericon-96-96.png create mode 100644 public/ios/100.png create mode 100644 public/ios/1024.png create mode 100644 public/ios/114.png create mode 100644 public/ios/120.png create mode 100644 public/ios/128.png create mode 100644 public/ios/144.png create mode 100644 public/ios/152.png create mode 100644 public/ios/16.png create mode 100644 public/ios/167.png create mode 100644 public/ios/180.png create mode 100644 public/ios/192.png create mode 100644 public/ios/20.png create mode 100644 public/ios/256.png create mode 100644 public/ios/29.png create mode 100644 public/ios/32.png create mode 100644 public/ios/40.png create mode 100644 public/ios/50.png create mode 100644 public/ios/512.png create mode 100644 public/ios/57.png create mode 100644 public/ios/58.png create mode 100644 public/ios/60.png create mode 100644 public/ios/64.png create mode 100644 public/ios/72.png create mode 100644 public/ios/76.png create mode 100644 public/ios/80.png create mode 100644 public/ios/87.png create mode 100644 public/windows11/LargeTile.scale-100.png create mode 100644 public/windows11/LargeTile.scale-125.png create mode 100644 public/windows11/LargeTile.scale-150.png create mode 100644 public/windows11/LargeTile.scale-200.png create mode 100644 public/windows11/LargeTile.scale-400.png create mode 100644 public/windows11/SmallTile.scale-100.png create mode 100644 public/windows11/SmallTile.scale-125.png create mode 100644 public/windows11/SmallTile.scale-150.png create mode 100644 public/windows11/SmallTile.scale-200.png create mode 100644 public/windows11/SmallTile.scale-400.png create mode 100644 public/windows11/SplashScreen.scale-100.png create mode 100644 public/windows11/SplashScreen.scale-125.png create mode 100644 public/windows11/SplashScreen.scale-150.png create mode 100644 public/windows11/SplashScreen.scale-200.png create mode 100644 public/windows11/SplashScreen.scale-400.png create mode 100644 public/windows11/Square150x150Logo.scale-100.png create mode 100644 public/windows11/Square150x150Logo.scale-125.png create mode 100644 public/windows11/Square150x150Logo.scale-150.png create mode 100644 public/windows11/Square150x150Logo.scale-200.png create mode 100644 public/windows11/Square150x150Logo.scale-400.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png create mode 100644 public/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-16.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-20.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-24.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-256.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-30.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-32.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-36.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-40.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-44.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-48.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-60.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-64.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-72.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-80.png create mode 100644 public/windows11/Square44x44Logo.altform-unplated_targetsize-96.png create mode 100644 public/windows11/Square44x44Logo.scale-100.png create mode 100644 public/windows11/Square44x44Logo.scale-125.png create mode 100644 public/windows11/Square44x44Logo.scale-150.png create mode 100644 public/windows11/Square44x44Logo.scale-200.png create mode 100644 public/windows11/Square44x44Logo.scale-400.png create mode 100644 public/windows11/Square44x44Logo.targetsize-16.png create mode 100644 public/windows11/Square44x44Logo.targetsize-20.png create mode 100644 public/windows11/Square44x44Logo.targetsize-24.png create mode 100644 public/windows11/Square44x44Logo.targetsize-256.png create mode 100644 public/windows11/Square44x44Logo.targetsize-30.png create mode 100644 public/windows11/Square44x44Logo.targetsize-32.png create mode 100644 public/windows11/Square44x44Logo.targetsize-36.png create mode 100644 public/windows11/Square44x44Logo.targetsize-40.png create mode 100644 public/windows11/Square44x44Logo.targetsize-44.png create mode 100644 public/windows11/Square44x44Logo.targetsize-48.png create mode 100644 public/windows11/Square44x44Logo.targetsize-60.png create mode 100644 public/windows11/Square44x44Logo.targetsize-64.png create mode 100644 public/windows11/Square44x44Logo.targetsize-72.png create mode 100644 public/windows11/Square44x44Logo.targetsize-80.png create mode 100644 public/windows11/Square44x44Logo.targetsize-96.png create mode 100644 public/windows11/StoreLogo.scale-100.png create mode 100644 public/windows11/StoreLogo.scale-125.png create mode 100644 public/windows11/StoreLogo.scale-150.png create mode 100644 public/windows11/StoreLogo.scale-200.png create mode 100644 public/windows11/StoreLogo.scale-400.png create mode 100644 public/windows11/Wide310x150Logo.scale-100.png create mode 100644 public/windows11/Wide310x150Logo.scale-125.png create mode 100644 public/windows11/Wide310x150Logo.scale-150.png create mode 100644 public/windows11/Wide310x150Logo.scale-200.png create mode 100644 public/windows11/Wide310x150Logo.scale-400.png create mode 100644 src/app/(main)/analytics/page.tsx create mode 100644 src/app/(main)/dashboard/CompanyTeamCashFlow/page.tsx create mode 100644 src/app/(main)/dashboard/ProjectCashFlow/page.tsx create mode 100644 src/app/(main)/dashboard/ProjectFinancialSummary/page.tsx create mode 100644 src/app/(main)/dashboard/ProjectStatusByClient/page.tsx create mode 100644 src/app/(main)/dashboard/StaffUtilization/page.tsx create mode 100644 src/app/(main)/dashboard/page.tsx create mode 100644 src/app/(main)/home/page.tsx create mode 100644 src/app/(main)/invoice/page.tsx create mode 100644 src/app/(main)/layout.tsx create mode 100644 src/app/(main)/projects/create/page.tsx create mode 100644 src/app/(main)/projects/page.tsx create mode 100644 src/app/(main)/settings/page.tsx create mode 100644 src/app/(main)/staffReimbursement/ClaimApproval/page.tsx create mode 100644 src/app/(main)/staffReimbursement/ClaimSummary/page.tsx create mode 100644 src/app/(main)/staffReimbursement/create/page.tsx create mode 100644 src/app/(main)/staffReimbursement/page.tsx create mode 100644 src/app/(main)/tasks/create/page.tsx create mode 100644 src/app/(main)/tasks/page.tsx create mode 100644 src/app/api/auth/[...nextauth]/route.ts create mode 100644 src/app/api/cashflow/index.ts create mode 100644 src/app/api/claims/index.ts create mode 100644 src/app/api/clientprojects/index.ts create mode 100644 src/app/api/projects/actions.ts create mode 100644 src/app/api/projects/index.ts create mode 100644 src/app/api/tasks/actions.ts create mode 100644 src/app/api/tasks/index.ts create mode 100644 src/app/favicon.ico create mode 100644 src/app/global.css create mode 100644 src/app/layout.tsx create mode 100644 src/app/login/page.tsx create mode 100644 src/app/logout/page.tsx create mode 100644 src/app/manifest.ts create mode 100644 src/app/page.tsx create mode 100644 src/app/utils/fetchUtil.ts create mode 100644 src/app/utils/formatUtil.ts create mode 100644 src/components/AppBar/AppBar.tsx create mode 100644 src/components/AppBar/NavigationToggle.tsx create mode 100644 src/components/AppBar/Profile.tsx create mode 100644 src/components/AppBar/index.ts create mode 100644 src/components/AssignedProjectGrid/AssignedProjectGrid.tsx create mode 100644 src/components/AssignedProjectGrid/index.ts create mode 100644 src/components/Breadcrumb/Breadcrumb.tsx create mode 100644 src/components/Breadcrumb/index.ts create mode 100644 src/components/ClaimSearch/ClaimSearch.tsx create mode 100644 src/components/ClaimSearch/ClaimSearchLoading.tsx create mode 100644 src/components/ClaimSearch/ClaimSearchWrapper.tsx create mode 100644 src/components/ClaimSearch/index.ts create mode 100644 src/components/CompanyTeamCashFlow/CompanyTeamCashFlow.tsx create mode 100644 src/components/CompanyTeamCashFlow/index.ts create mode 100644 src/components/CreateClaim/ClaimDetails.tsx create mode 100644 src/components/CreateClaim/ClaimInputGrid.tsx create mode 100644 src/components/CreateClaim/CreateClaim.tsx create mode 100644 src/components/CreateClaim/index.ts create mode 100644 src/components/CreateProject/CreateProject.tsx create mode 100644 src/components/CreateProject/CreateProjectWrapper.tsx create mode 100644 src/components/CreateProject/MilestoneSection.tsx create mode 100644 src/components/CreateProject/ProjectClientDetails.tsx create mode 100644 src/components/CreateProject/ProjectTotalFee.tsx create mode 100644 src/components/CreateProject/ResourceCapacity.tsx create mode 100644 src/components/CreateProject/ResourceMilestone.tsx create mode 100644 src/components/CreateProject/ResourceSection.tsx create mode 100644 src/components/CreateProject/StaffAllocation.tsx create mode 100644 src/components/CreateProject/TaskSetup.tsx create mode 100644 src/components/CreateProject/index.ts create mode 100644 src/components/CreateTaskTemplate/CreateTaskTemplate.tsx create mode 100644 src/components/CreateTaskTemplate/CreateTaskTemplateWrapper.tsx create mode 100644 src/components/CreateTaskTemplate/index.ts create mode 100644 src/components/CustomCardGrid/CustomCardGrid.tsx create mode 100644 src/components/CustomCardGrid/index.ts create mode 100644 src/components/CustomDatagrid/CustomDatagrid.tsx create mode 100644 src/components/CustomDatagrid/index.ts create mode 100644 src/components/CustomModal/CustomModal.tsx create mode 100644 src/components/CustomModal/index.ts create mode 100644 src/components/CustomSearchForm/CustomSearchForm.tsx create mode 100644 src/components/CustomSearchForm/index.ts create mode 100644 src/components/DashboardPage/DashboardPage.tsx create mode 100644 src/components/DashboardPage/DashboardTabButton.tsx create mode 100644 src/components/DashboardPage/ProgressByClient.tsx create mode 100644 src/components/DashboardPage/index.ts create mode 100644 src/components/EnterLeave/EnterLeaveModal.tsx create mode 100644 src/components/EnterLeave/LeaveInputGrid.tsx create mode 100644 src/components/EnterLeave/index.ts create mode 100644 src/components/EnterTimesheet/EnterTimesheetModal.tsx create mode 100644 src/components/EnterTimesheet/TimesheetInputGrid.tsx create mode 100644 src/components/EnterTimesheet/index.ts create mode 100644 src/components/LoginPage/LoginForm.tsx create mode 100644 src/components/LoginPage/LoginPage.tsx create mode 100644 src/components/LoginPage/index.ts create mode 100644 src/components/Logo/Logo.tsx create mode 100644 src/components/Logo/index.ts create mode 100644 src/components/LogoutPage/LogoutPage.tsx create mode 100644 src/components/LogoutPage/index.ts create mode 100644 src/components/NavigationContent/NavigationContent.tsx create mode 100644 src/components/NavigationContent/index.ts create mode 100644 src/components/PageTitle/PageTitle.tsx create mode 100644 src/components/PageTitle/index.ts create mode 100644 src/components/ProgressByClient/ProgressByClient.tsx create mode 100644 src/components/ProgressByClient/index.ts create mode 100644 src/components/ProgressByClientSearch/ProgressByClientSearch.tsx create mode 100644 src/components/ProgressByClientSearch/ProgressByClientSearchLoading.tsx create mode 100644 src/components/ProgressByClientSearch/ProgressByClientSearchWrapper.tsx create mode 100644 src/components/ProgressByClientSearch/index.ts create mode 100644 src/components/ProgressCashFlowSearch/ProgressCashFlowSearch.tsx create mode 100644 src/components/ProgressCashFlowSearch/ProgressCashFlowSearchLoading.tsx create mode 100644 src/components/ProgressCashFlowSearch/ProgressCashFlowSearchWrapper.tsx create mode 100644 src/components/ProgressCashFlowSearch/index.ts create mode 100644 src/components/ProjectCashFlow/ProjectCashFlow.tsx create mode 100644 src/components/ProjectCashFlow/index.ts create mode 100644 src/components/ProjectFinancialSummary/ProjectFinancialCard.tsx create mode 100644 src/components/ProjectFinancialSummary/ProjectFinancialSummary.tsx create mode 100644 src/components/ProjectFinancialSummary/index.ts create mode 100644 src/components/ProjectSearch/ProjectSearch.tsx create mode 100644 src/components/ProjectSearch/ProjectSearchLoading.tsx create mode 100644 src/components/ProjectSearch/ProjectSearchWrapper.tsx create mode 100644 src/components/ProjectSearch/index.ts create mode 100644 src/components/SearchBox/SearchBox.tsx create mode 100644 src/components/SearchBox/index.ts create mode 100644 src/components/SearchResults/SearchResults.tsx create mode 100644 src/components/SearchResults/index.ts create mode 100644 src/components/StaffUtilization/StaffUtilization.tsx create mode 100644 src/components/StaffUtilization/index.ts create mode 100644 src/components/StyledDataGrid/StyledDataGrid.tsx create mode 100644 src/components/StyledDataGrid/index.ts create mode 100644 src/components/Swal/CustomAlerts.js create mode 100644 src/components/TaskTemplateSearch/TaskTemplateSearch.tsx create mode 100644 src/components/TaskTemplateSearch/TaskTemplateSearchLoading.tsx create mode 100644 src/components/TaskTemplateSearch/TaskTemplateSearchWrapper.tsx create mode 100644 src/components/TaskTemplateSearch/index.ts create mode 100644 src/components/TransferList/MultiSelectList.tsx create mode 100644 src/components/TransferList/TransferList.tsx create mode 100644 src/components/TransferList/TransferListWrapper.tsx create mode 100644 src/components/TransferList/index.ts create mode 100644 src/components/UserWorkspacePage/ProjectGrid.tsx create mode 100644 src/components/UserWorkspacePage/UserWorkspacePage.tsx create mode 100644 src/components/UserWorkspacePage/index.ts create mode 100644 src/config/api.ts create mode 100644 src/config/authConfig.ts create mode 100644 src/config/uiConfig.ts create mode 100644 src/i18n/I18nClientProvider.tsx create mode 100644 src/i18n/en/common.json create mode 100644 src/i18n/en/dashboard.json create mode 100644 src/i18n/en/login.json create mode 100644 src/i18n/en/projects.json create mode 100644 src/i18n/index.tsx create mode 100644 src/i18n/zh/common.json create mode 100644 src/i18n/zh/dashboard.json create mode 100644 src/i18n/zh/login.json create mode 100644 src/i18n/zh/projects.json create mode 100644 src/middleware.ts create mode 100644 src/theme.ts create mode 100644 src/theme/EmotionCache.tsx create mode 100644 src/theme/ThemeRegistry.tsx create mode 100644 src/theme/colorConst.js create mode 100644 src/theme/devias-material-kit/colors.ts create mode 100644 src/theme/devias-material-kit/components.ts create mode 100644 src/theme/devias-material-kit/index.ts create mode 100644 src/theme/devias-material-kit/palette.ts create mode 100644 src/theme/devias-material-kit/shadows.ts create mode 100644 src/theme/devias-material-kit/typography.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 zip_project.ps1 diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..6d999ff --- /dev/null +++ b/.env.development @@ -0,0 +1,2 @@ +API_URL=http://localhost:8090/api +NEXTAUTH_SECRET=secret \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..2036fea --- /dev/null +++ b/.env.production @@ -0,0 +1,3 @@ +API_URL=http://localhost:8090/api +NEXTAUTH_SECRET=secret +NEXTAUTH_URL=https://tsms-uat.2fi-solutions.com \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..7159cbb --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,16 @@ +{ + "extends": ["next/core-web-vitals", "plugin:@typescript-eslint/recommended", "prettier"], + "plugins": ["prettier", "@typescript-eslint"], + "rules": { + // "prettier/prettier": "warn", + "prettier/prettier": [ + "error", + { + "endOfLine": "off" + } + ], + "no-unused-vars": "off", + // "@typescript-eslint/no-explicit-any": ["off"], + "@typescript-eslint/no-unused-vars": "warn" + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b6a27a --- /dev/null +++ b/.gitignore @@ -0,0 +1,49 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +.vscode + +#tsms.zip +tsms.zip + +# PWA files +**/public/sw.js +**/public/workbox-*.js +**/public/worker-*.js +**/public/sw.js.map +**/public/workbox-*.js.map +**/public/worker-*.js.map \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..5660f81 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmjs.org/ \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..a77793e --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +lts/hydrogen diff --git a/README.md b/README.md index 4b847d2..d8bffd4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,32 @@ -# FPSMS-frontend +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). -FPSMS-frontend \ No newline at end of file +## Setting Up the Environment + +It is recommended to use the same node and npm versions for development. An easy way to do so would be to use `nvm` ([Linux/MacOS](https://github.com/nvm-sh/nvm), [Windows](https://github.com/coreybutler/nvm-windows)). + +After installing `nvm`, run: + +```bash +nvm use +npm install +``` + +This will automatically use the node version defined in `.nvmrc` and then proceed with installing the necessary dependencies for development. + +## Getting Started + +First, run the development server: + +```bash +npm run dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +## References + +This project uses the following libraries: +- [NextJS](https://nextjs.org/docs) +- [Next-Auth](https://next-auth.js.org/getting-started/example) +- [Material UI](https://mui.com/material-ui/getting-started/) +- [i18next](https://www.i18next.com/overview/getting-started) \ No newline at end of file diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..a27da5d --- /dev/null +++ b/next.config.js @@ -0,0 +1,18 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/** @type {import('next').NextConfig} */ + +const withPWA = require("next-pwa")({ + dest: "public", + register: true, + skipWaiting: true, +}); + +const nextConfig = { + // eslint: { + // // Warning: This allows production builds to successfully complete even if + // // your project has ESLint errors. + // ignoreDuringBuilds: true, + // }, +}; + +module.exports = withPWA(nextConfig); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b243cb6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10254 @@ +{ + "name": "tsms", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "tsms", + "version": "0.1.0", + "dependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@fontsource/inter": "^5.0.16", + "@fontsource/plus-jakarta-sans": "^5.0.18", + "@mui/icons-material": "^5.15.0", + "@mui/material": "^5.15.0", + "@mui/material-nextjs": "^5.15.0", + "@mui/x-data-grid": "^6.18.7", + "@mui/x-date-pickers": "^6.18.7", + "@unly/universal-language-detector": "^2.0.3", + "apexcharts": "^3.45.2", + "dayjs": "^1.11.10", + "i18next": "^23.7.11", + "i18next-resources-to-backend": "^1.2.0", + "lodash": "^4.17.21", + "next": "14.0.4", + "next-auth": "^4.24.5", + "next-pwa": "^5.6.0", + "react": "^18", + "react-apexcharts": "^1.4.1", + "react-dom": "^18", + "react-hook-form": "^7.49.2", + "react-i18next": "^13.5.0", + "react-intl": "^6.5.5", + "react-select": "^5.8.0", + "reactstrap": "^9.2.2", + "styled-components": "^6.1.8", + "sweetalert2": "^11.10.3" + }, + "devDependencies": { + "@types/lodash": "^4.14.202", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "@typescript-eslint/eslint-plugin": "^6.18.1", + "@typescript-eslint/parser": "^6.18.1", + "autoprefixer": "^10.4.16", + "eslint": "^8", + "eslint-config-next": "14.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.0.1", + "postcss": "^8.4.33", + "prettier": "3.1.1", + "tailwindcss": "^3.4.1", + "typescript": "^5" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz", + "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", + "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz", + "integrity": "sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", + "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.0", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.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": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@fontsource/inter": { + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.0.17.tgz", + "integrity": "sha512-2meBGx1kt7u5LwzGc5Sz5rka6ZDrydg6nT3x6Wkt310vHXUchIywrO8pooWMzZdHYcyFY/cv4lEpJZgMD94bCg==" + }, + "node_modules/@fontsource/plus-jakarta-sans": { + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/plus-jakarta-sans/-/plus-jakarta-sans-5.0.19.tgz", + "integrity": "sha512-LWMReNfB3s3tLRCPlFkqTfheqV40+2RQ4pOFhmKKB+9QrFsSf+g4Sl5r2V0+FNWHzdjfCas7uF4d+PejipqvUw==" + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", + "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", + "dependencies": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", + "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.6.tgz", + "integrity": "sha512-etVau26po9+eewJKYoiBKP6743I1br0/Ie00Pb/S/PtmYfmjTcOn2YCh2yNkSZI12h6Rg+BOgQYborXk46BvkA==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "@formatjs/icu-skeleton-parser": "1.8.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.0.tgz", + "integrity": "sha512-QWLAYvM0n8hv7Nq5BEs4LKIjevpVpbGLAJgOaYzg9wABEoX1j0JO1q2/jVkO6CVlq0dbsxZCngS5aXbysYueqA==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.0.tgz", + "integrity": "sha512-X3xT9guVkKDS86EKV80lS0KxoazUglkJTGZO66sKY7otgl0VeStPA8B3u8UkKT47PexVV98fUzjpkchYmbe9nw==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.6", + "@formatjs/intl-displaynames": "6.6.6", + "@formatjs/intl-listformat": "7.5.5", + "intl-messageformat": "10.5.11", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "typescript": "^4.7 || 5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@formatjs/intl-displaynames": { + "version": "6.6.6", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.6.tgz", + "integrity": "sha512-Dg5URSjx0uzF8VZXtHb6KYZ6LFEEhCbAbKoYChYHEOnMFTw/ZU3jIo/NrujzQD2EfKPgQzIq73LOUvW6Z/LpFA==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-listformat": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.5.tgz", + "integrity": "sha512-XoI52qrU6aBGJC9KJddqnacuBbPlb/bXFN+lIFVFhQ1RnFHpzuFrlFdjD9am2O7ZSYsyqzYRpkVcXeT1GHkwDQ==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "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, + "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/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.38", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.38.tgz", + "integrity": "sha512-AsjD6Y1X5A1qndxz8xCcR8LDqv31aiwlgWMPxFAX/kCKiIGKlK65yMeVZ62iQr/6LBz+9hSKLiD1i4TZdAHKcQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.12", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.12.tgz", + "integrity": "sha512-brRO+tMFLpGyjEYHrX97bzqeF6jZmKpqqe1rY0LyIHAwP6xRVzh++zSecOQorDOCaZJg4XkGT9xfD+RWOWxZBA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.12.tgz", + "integrity": "sha512-3BXiDlOd3AexZoEXa/VqpIpVIvosCzjLHsdMWzKMXbZdnBiJjmb9ECdqfjn5SpTClO49qvkKLhkTqdBH3fSFGw==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.12.tgz", + "integrity": "sha512-vXJGg6KNKucsvbW6l7w9zafnpOp0CWc0Wx4mDykuABTpQ5QQBnZxP7+oB4yAS1hDZQ1WobbeIl0CjxK4EEahkA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.38", + "@mui/core-downloads-tracker": "^5.15.12", + "@mui/system": "^5.15.12", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.12", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material-nextjs": { + "version": "5.15.11", + "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-5.15.11.tgz", + "integrity": "sha512-cp5RWYbBngyi7NKP91R9QITllfxumCVPFjqe4AKzNROVuCot0VpgkafxXqfbv0uFsyUU0ROs0O2M3r17q604Aw==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/server": "^11.11.0", + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "next": "^13.0.0 || ^14.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/cache": { + "optional": true + }, + "@emotion/server": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/private-theming": { + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.12.tgz", + "integrity": "sha512-cqoSo9sgA5HE+8vZClbLrq9EkyOnYysooepi5eKaKvJ41lReT2c5wOZAeDDM1+xknrMDos+0mT2zr3sZmUiRRA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.12", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.15.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.11.tgz", + "integrity": "sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.12.tgz", + "integrity": "sha512-/pq+GO6yN3X7r3hAwFTrzkAh7K1bTF5r8IzS79B9eyKJg7v6B/t4/zZYMR6OT9qEPtwf6rYN2Utg1e6Z7F1OgQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.12", + "@mui/styled-engine": "^5.15.11", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.12", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", + "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.15.12", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.12.tgz", + "integrity": "sha512-8SDGCnO2DY9Yy+5bGzu00NZowSDtuyHP4H8gunhHGQoIlhlY2Z3w64wBzAOLpYw/ZhJNzksDTnS/i8qdJvxuow==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/x-data-grid": { + "version": "6.19.6", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.6.tgz", + "integrity": "sha512-jpZkX1Gnlo87gKcD10mKMY8YoAzUD8Cv3/IvedH3FINDKO3hnraMeOciKDeUk0tYSj8RUDB02kpTHCM8ojLVBA==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.16", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "reselect": "^4.1.8" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.4.1", + "@mui/system": "^5.4.1", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/x-date-pickers": { + "version": "6.19.6", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.6.tgz", + "integrity": "sha512-QW9AFcPi0vLpkUhmquhhyhLaBvB0AZJuu3NTrE173qNKx3Z3n51aCLY9bc7c6i4ltZMMsVRHlvzQjsve04TC8A==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/base": "^5.0.0-beta.22", + "@mui/utils": "^5.14.16", + "@types/react-transition-group": "^4.4.8", + "clsx": "^2.0.0", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.8.6", + "@mui/system": "^5.8.0", + "date-fns": "^2.25.0 || ^3.2.0", + "date-fns-jalali": "^2.13.0-0", + "dayjs": "^1.10.7", + "luxon": "^3.0.2", + "moment": "^2.29.4", + "moment-hijri": "^2.1.2", + "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "date-fns-jalali": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-hijri": { + "optional": true + }, + "moment-jalaali": { + "optional": true + } + } + }, + "node_modules/@next/env": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", + "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz", + "integrity": "sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/eslint-plugin-next/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz", + "integrity": "sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz", + "integrity": "sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.4.tgz", + "integrity": "sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.4.tgz", + "integrity": "sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.4.tgz", + "integrity": "sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.4.tgz", + "integrity": "sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.4.tgz", + "integrity": "sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.4.tgz", + "integrity": "sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.4.tgz", + "integrity": "sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@panva/hkdf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", + "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "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==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", + "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", + "dev": true + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.5.tgz", + "integrity": "sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "peer": true + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "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==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, + "node_modules/@types/node": { + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "node_modules/@types/react": { + "version": "18.2.63", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.63.tgz", + "integrity": "sha512-ppaqODhs15PYL2nGUOaOu2RSCCB4Difu4UFrP4I3NHLloXC/ESQzQMi9nvjfT1+rudd0d2L3fQPJxRSey+rGlQ==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.20", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.20.tgz", + "integrity": "sha512-HXN/biJY8nv20Cn9ZbCFq3liERd4CozVZmKbaiZ9KiKTrWqsP7eoGDO6OOGvJQwoVFuiXaiJ7nBBjiFFbRmQMQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@unly/iso3166-1": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@unly/iso3166-1/-/iso3166-1-1.0.2.tgz", + "integrity": "sha512-aL/7cmcfjpwOaKFr9XHcWP/Z7lQjKLm5NMcjncT96aeSJxfblmPLnH/8lnX0GrWWFA2/CseCxnA73u5eiZcClA==" + }, + "node_modules/@unly/universal-language-detector": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@unly/universal-language-detector/-/universal-language-detector-2.0.3.tgz", + "integrity": "sha512-UMmZIQS2XfJko8/GOrJc9ojO4UIF9HJM59NyQgcH+Ncrb0WBHL2L7EZ/7iZ/YcdoRnioonRECUQmmUELWt9z5Q==", + "dependencies": { + "@unly/iso3166-1": "1.0.2", + "@unly/utils": "1.0.3", + "accept-language-parser": "1.5.0", + "i18next": "19.0.2", + "i18next-browser-languagedetector": "4.0.1", + "lodash.get": "4.4.2", + "lodash.includes": "4.3.0" + } + }, + "node_modules/@unly/universal-language-detector/node_modules/i18next": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.0.2.tgz", + "integrity": "sha512-fBa43Ann2udP1CQAz3IQpOZ1dGAkmi3mMfzisOhH17igneSRbvZ7P2RNbL+L1iRYKMufBmVwnC7G3gqcyviZ9g==", + "dependencies": { + "@babel/runtime": "^7.3.1" + } + }, + "node_modules/@unly/utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@unly/utils/-/utils-1.0.3.tgz", + "integrity": "sha512-QTRknIDX56FvzGcIpBum5D/oRSlX3dkZ+l1op1jsFlYCTd925OGUb991V7zsFv3ePcqFfvfqfR5cNVv+w4JAOw==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "peer": true + }, + "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==" + }, + "node_modules/accept-language-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/accept-language-parser/-/accept-language-parser-1.5.0.tgz", + "integrity": "sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw==" + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "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, + "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==", + "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/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apexcharts": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.46.0.tgz", + "integrity": "sha512-ELAY6vj8JQD7QLktKasTzwm9Wt0qxqfQSo+3QWS7G7I774iK8HCkG1toGsqJH0mkK6PtYBtnSIe66uUcwoCw1w==", + "dependencies": { + "@yr/monotone-cubic-spline": "^1.0.3", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "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 + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", + "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "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" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001594", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001594.tgz", + "integrity": "sha512-VblSX6nYqyJVs8DKFMldE2IVCJjZ225LW00ydtUWwh5hk9IfkTOffO6r8gJNsH0qqqeAF8KrbMYA2VEwTlGW5g==", + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/clean-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", + "dependencies": { + "del": "^4.1.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-js-compat": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", + "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "dependencies": { + "browserslist": "^4.22.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "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, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "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 + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "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 + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.693", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.693.tgz", + "integrity": "sha512-/if4Ueg0GUQlhCrW2ZlXwDAm40ipuKo+OgeHInlL8sbjt+hzISxZK949fZeJaVsheamrzANXvw1zQTvbxTvSHw==" + }, + "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 + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", + "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", + "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "peer": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.4.tgz", + "integrity": "sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "14.0.4", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz", + "integrity": "sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/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, + "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/eslint/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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 + }, + "node_modules/eslint/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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "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==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "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==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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==" + }, + "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 + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "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, + "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": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "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, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "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==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "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==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/i18next": { + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.0.tgz", + "integrity": "sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-browser-languagedetector": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-4.0.1.tgz", + "integrity": "sha512-RxSoX6mB8cab0CTIQ+klCS764vYRj+Jk621cnFVsINvcdlb/cdi3vQFyrPwmnowB7ReUadjHovgZX+RPIzHVQQ==", + "dependencies": { + "@babel/runtime": "^7.5.5" + } + }, + "node_modules/i18next-resources-to-backend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/i18next-resources-to-backend/-/i18next-resources-to-backend-1.2.0.tgz", + "integrity": "sha512-8f1l03s+QxDmCfpSXCh9V+AFcxAwIp0UaroWuyOx+hmmv8484GcELHs+lnu54FrNij8cDBEXvEwhzZoXsKcVpg==", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "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, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/intl-messageformat": { + "version": "10.5.11", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.11.tgz", + "integrity": "sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.6", + "tslib": "^2.4.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jake/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/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==" + }, + "node_modules/jake/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jose": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", + "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "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==" + }, + "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 + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "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, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "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 + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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==", + "peer": true, + "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==", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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 + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "peer": true + }, + "node_modules/next": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", + "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", + "dependencies": { + "@next/env": "14.0.4", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.0.4", + "@next/swc-darwin-x64": "14.0.4", + "@next/swc-linux-arm64-gnu": "14.0.4", + "@next/swc-linux-arm64-musl": "14.0.4", + "@next/swc-linux-x64-gnu": "14.0.4", + "@next/swc-linux-x64-musl": "14.0.4", + "@next/swc-win32-arm64-msvc": "14.0.4", + "@next/swc-win32-ia32-msvc": "14.0.4", + "@next/swc-win32-x64-msvc": "14.0.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-auth": { + "version": "4.24.6", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.6.tgz", + "integrity": "sha512-djQt3ZEaWEIxcsuh3HTW2uuzLfXMRjHH+ugAsichlQSbH4iA5MRcgMA2HvTNvsDTDLh44tyU72+/gWsxgTbAKg==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@panva/hkdf": "^1.0.2", + "cookie": "^0.5.0", + "jose": "^4.11.4", + "oauth": "^0.9.15", + "openid-client": "^5.4.0", + "preact": "^10.6.3", + "preact-render-to-string": "^5.1.19", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "next": "^12.2.5 || ^13 || ^14", + "nodemailer": "^6.6.5", + "react": "^17.0.2 || ^18", + "react-dom": "^17.0.2 || ^18" + }, + "peerDependenciesMeta": { + "nodemailer": { + "optional": true + } + } + }, + "node_modules/next-pwa": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/next-pwa/-/next-pwa-5.6.0.tgz", + "integrity": "sha512-XV8g8C6B7UmViXU8askMEYhWwQ4qc/XqJGnexbLV68hzKaGHZDMtHsm2TNxFcbR7+ypVuth/wwpiIlMwpRJJ5A==", + "dependencies": { + "babel-loader": "^8.2.5", + "clean-webpack-plugin": "^4.0.0", + "globby": "^11.0.4", + "terser-webpack-plugin": "^5.3.3", + "workbox-webpack-plugin": "^6.5.4", + "workbox-window": "^6.5.4" + }, + "peerDependencies": { + "next": ">=9.0.0" + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "dev": true, + "dependencies": { + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oidc-token-hash": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", + "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openid-client": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.4.tgz", + "integrity": "sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA==", + "dependencies": { + "jose": "^4.15.4", + "lru-cache": "^6.0.0", + "object-hash": "^2.2.0", + "oidc-token-hash": "^5.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "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, + "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, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "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, + "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==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "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/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.0.tgz", + "integrity": "sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dev": true, + "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==" + }, + "node_modules/preact": { + "version": "10.19.6", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.6.tgz", + "integrity": "sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", + "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", + "dependencies": { + "pretty-format": "^3.8.0" + }, + "peerDependencies": { + "preact": ">=10" + } + }, + "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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-apexcharts": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.4.1.tgz", + "integrity": "sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "apexcharts": "^3.41.0", + "react": ">=0.13" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-hook-form": { + "version": "7.51.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.0.tgz", + "integrity": "sha512-BggOy5j58RdhdMzzRUHGOYhSz1oeylFAv6jUSG86OvCIvlAvS7KvnRY7yoAf2pfEiPN7BesnR0xx73nEk3qIiw==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-i18next": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.5.0.tgz", + "integrity": "sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-intl": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.2.tgz", + "integrity": "sha512-IpW2IkLtGENSFlX3vfH11rjuCIsW0VyjT0Q1pPKMZPtT2z1FxLt4weFT5Ezti2TScT1xiyb3aQBFth9EB7jzAg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.2", + "@formatjs/icu-messageformat-parser": "2.7.6", + "@formatjs/intl": "2.10.0", + "@formatjs/intl-displaynames": "6.6.6", + "@formatjs/intl-listformat": "7.5.5", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "10.5.11", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "react": "^16.6.0 || 17 || 18", + "typescript": "^4.7 || 5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-popper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "dependencies": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" + }, + "peerDependencies": { + "@popperjs/core": "^2.0.0", + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-select": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", + "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/reactstrap": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-9.2.2.tgz", + "integrity": "sha512-4KroiGOdqZLAnMGzHjpErW3G7bLB+QbKzzMLIDXydPIV0y74lpdL7WtXHkLWAGInd97WCPNx4+R0NQDPyzIfhw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@popperjs/core": "^2.6.0", + "classnames": "^2.2.3", + "prop-types": "^15.5.8", + "react-popper": "^2.2.4", + "react-transition-group": "^4.4.2" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "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, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "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, + "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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "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 + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "ansi-regex": "^5.0.1" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-components": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz", + "integrity": "sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.1", + "@emotion/unitless": "0.8.0", + "@types/stylis": "4.2.0", + "css-to-react-native": "3.2.0", + "csstype": "3.1.2", + "postcss": "8.4.31", + "shallowequal": "1.1.0", + "stylis": "4.3.1", + "tslib": "2.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/styled-components/node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/styled-components/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/styled-components/node_modules/stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/sweetalert2": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.10.6.tgz", + "integrity": "sha512-CINZPLZXZRSZqSOE7H7j1F7X8e8O1kLOiXPmtJn1DYxvXsKBr3d16d90+IcwTTs7dJww20h8r8QIxIwsLGX+6A==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/limonte" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "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==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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 + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/webpack": { + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.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, + "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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/wrap-ansi-cjs/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/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 + }, + "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 + }, + "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, + "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/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c8eea49 --- /dev/null +++ b/package.json @@ -0,0 +1,59 @@ +{ + "name": "tsms", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "NODE_OPTIONS='--inspect' next start", + "lint": "next lint" + }, + "dependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@fontsource/inter": "^5.0.16", + "@fontsource/plus-jakarta-sans": "^5.0.18", + "@mui/icons-material": "^5.15.0", + "@mui/material": "^5.15.0", + "@mui/material-nextjs": "^5.15.0", + "@mui/x-data-grid": "^6.18.7", + "@mui/x-date-pickers": "^6.18.7", + "@unly/universal-language-detector": "^2.0.3", + "apexcharts": "^3.45.2", + "dayjs": "^1.11.10", + "i18next": "^23.7.11", + "i18next-resources-to-backend": "^1.2.0", + "lodash": "^4.17.21", + "next": "14.0.4", + "next-auth": "^4.24.5", + "next-pwa": "^5.6.0", + "react": "^18", + "react-apexcharts": "^1.4.1", + "react-dom": "^18", + "react-hook-form": "^7.49.2", + "react-i18next": "^13.5.0", + "react-intl": "^6.5.5", + "react-select": "^5.8.0", + "reactstrap": "^9.2.2", + "styled-components": "^6.1.8", + "sweetalert2": "^11.10.3" + }, + "devDependencies": { + "@types/lodash": "^4.14.202", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "@typescript-eslint/eslint-plugin": "^6.18.1", + "@typescript-eslint/parser": "^6.18.1", + "autoprefixer": "^10.4.16", + "eslint": "^8", + "eslint-config-next": "14.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.0.1", + "postcss": "^8.4.33", + "prettier": "3.1.1", + "tailwindcss": "^3.4.1", + "typescript": "^5" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/android/android-launchericon-144-144.png b/public/android/android-launchericon-144-144.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8cff05783dbbb7dc19edfb4fe082c1f0a85b2c GIT binary patch literal 3684 zcma)9XHXMdv!(Z?ElVE~5@FrHMp~kjT0ufWe@z>yYU-E0mlGVr z`ju-aL_(qCN9fYtl2>XNGywRy@CZWK`5CJ5#-T#m#f0oaRnm2abqm5_8*S=HD|zqD zW8mWEy@e5BJkH zGz4Y^EB{dJ+5GD3W)xf89w?fJ1HT2Q=cWVoyY35!;cHb-_ zxXDW$2s>>hgU;{^W@^O0mCbUG&Rvlom#s;})l6Qzt+{83IUAPmiF{wCu53FpgtK<; zVCdJIDQQ!Wq%V0fJPCv+@uk_i$=9sQ_eAf6D1i0Q<0!V%2PHPu#qi%wjq;^|7p#!` z9SqkOHm5lis1keK08l252#Gd#Li_Rua5Y9zm`S02Is0rto5$}PAL_DqBI*-;cVi@{ zntjcHLTs%0&|?oM-u2WT<6)(1k-K&l{+)F4(L1wa9K%QbGXBa?>>6DA0-6|o5_%W@|={-y51F=i^(K>cY74ODHaf@S!~)aGoJ?fCQBoM(8bzK5&iC~Vfp;tg z=FxM33!9tqGXyg$-tkwsE3zy<-+U$62(Oe|(>&lso!u9Etf6bN@`PF%_G>ow*)Ne% zVs>r=P({J^gAbc?t{&vhbfQa5&Gg5&V_EZRx^+FN$|{Ex9{#m?HUSy5y7Si_&1nUUQ64{m;HeGJ?)(3-|| zSmt*W>u}$c;dNlqiDg538yHgDtqUuT_~enVCtVc~PtENAq6TlpODIyE+$24rpmL3kP7Nagr!Gqlm$+p08SD{eo>pBCPHYM~cF|4K0yu+7{> zg-B952+@Ld{=UYay!TZDmCMUk?0k|-Lj#&RvY+F_WY<=~@d^rC%_*ZUuN}b;(?qK# z;ew%lps>Q6gWXbh=`xNu@rM}_xT47!#`3y3n)nz_Gqvw+Nlsa0Pj_t6-rmecE;$7>k+1o%4J^9XQPEb=QA zz)Y5n2`=@f#jF5G~1x7lm_MJ zwe5nr3H7ZjG)!8D>iJ}HeQCng1|l33H_!kfqnL=xM}>X`^l;A6w|7M1&IRsb7!zXS zoTrV9D3%=V1$&XNAr%coL~t07dMYGT%6Fju;#S@g0@nGhG*eStWOl>K(4oEdK3(dc zlcAHtKW@`j&Wv|}ea-L;+7f*K_NA127HhW}ltwvlS~bB0h8cugJd>hTyPly^31bB2 z1y0Z`lQIxIW_|>ymqUhBj_p)@GbovZxXGxx88HA`z^#Oi!^$I1V@*&oU=pqFtMV&< zbA^m+kT<$09cL{4S-Ag9-emnA```Nk5l5Msve`=+g>p)$3MXk@0p=a*W*&$(zZsWo za%-O!Yb4x)T;cg{$g`mu8T?*LHPn6^z7y6C&jG0Rvb=huoGv3e9mTaJUhKZf7{uN0 z*T=?_@UOyQfqZ8O!2jTigonbA(EmPGccMtrKW}1Qo!)?|jzk${Xq8D*QYj}C4aE&3 zLih`_=Qvrn;~`S~ThXvf-8%PA{S~lV1h7`gqFPnn)@t7M@z_4!XH;@HENY zmE_P(17URV&eR8p`xvFs%Rtx%{svwP_131^STDR?JCw@?--nvOv7@4DJ5O~(w z07ouYbeHKd50jw>J$>|EpSgLS5~^8eHpM>3g(v3<$C7Va@Ij1dz>(p2l2OiIps#{Z zmNiJ(COIuWPkPG4>smm{|KGE*z!NU!kKg6AJ>mdgr0oYB3g+enDsW7s-&mssVq?JQ z7QLxy-U{3#NzWqQ>H*P~9D;|v@Q3hcG8b%(@HNTlcvd-rqF-<5xKc;Mljb-@Olj9& zsG%(YNz)s^f}}{b6S|qCIbkH(6?gyLg7Y||Wn8(N!3g@z?0^*aRWd}stv*3##M$S` zVN{igTSBq4CUCTQ`nTcuEXtTC7cR7H+QWZ^kh)y3QSo>qSO0uO)SQ z&LB38L5}tDfP}GfB0d2<}6V6a>{( z&tqWy`U3OB;j)$qnz~Ny;Ztc}^K2s+Pu^U$Rlc4^$!9Vx{^|H|Ee{Q=nza2pwxg!D z9DGf)^k(e`6)%gWX%gZ8VI0r^x*sAX(*<&APQ97}{%;kyk3X_NW&s}m9sri3X=i@1z^NS`*nvZ{@KXp@oPe8&xg3l*TON<0u~DWTXg7HdCf)h0uoG|Cz0otMTT9t zemGOn>MD~?S$z3w>)58Gv_UZBUf?TFn``4K_CQIkM*sw4j0b5yFK^>z1G(g7Hh9Fz zJ4oLuUjs02dvxpknzB+pK>kl7egwDdUrUR~54QeTCf?8g%-k>WuT=ikH7C=V4_{m% zQrmOlcfy5o0l%OVHlm{=i^SlYIE90~l5zUq5zgb8+OyV6IRqvSibiGJl?eUBz#e}N zJis@))HGFtcd_t}R@T-5-9=2V5I7#c+V67y2l9*960d?R%5Yy%SbTZzU@6elEQwFu zJSR@9ayONAAv&W+A|wtth<%uNlf^E`QHbcOLpwt*iA{Md`IdR}ld@4*N5YG@ClM!m z1>7KAXHpJQ;nwG9^u(u@3k0mIS$_si;jgHv?BIK`cjFM{4X9*a;bW!>@LRl=xiqV4 ze)13*VZqagoXSyWfuXA10x16kAE*$yYaak6%?>&J!I!dRF4N;_A^j*WQ*YUW=a0fw zGpytGt^bfHHJ^gpkHX(qDvUZeY~Rk+5;tTu=nN(@QqC;A6JzimwAoDETt)AgElPXw z-s3*)V_Bs&_Bi+ITiGAgf^cdbd$C+zGKs1Su`sM+kI20_k#*fDk-a}FYV96hy))+} zH0gdGV>{3Hjb`BxgS*<1ZCs7wXIw-1Krayl%ZaGjI%)3Btkz!~p$cz?cXmJdw55!? zi~6M`;SiaMSBv=mht(>zF!^D;ko`%0aCyOJGvYaiQk)|v>bDWz5mWcY12W=hb9 zR|a*%DJgqaeP)B%HQqF1m&hf?mH=L{-~2?~oiv*RzpY>h1Wz1sy0G~HY3NAiGH6I} zKWVQq{`OCj8D0*=b{Vlxh`8^iZE&^{W~RAcC7D7R={AbdS|Zv1=p zpt>)%&|>estCfN8<}1@Q>}_}D3wmr_&d?Cn`n=U{Ygyl5htC+xLOWcKz0qM*pU4>4 o_uO7H+?RY{HH?TmHYHppK4Xq<@z$%o`X-WSs~aF|5q6>f1&smH1poj5 literal 0 HcmV?d00001 diff --git a/public/android/android-launchericon-192-192.png b/public/android/android-launchericon-192-192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc974ac97d2b93974d9b0ff94ba735ddbb3e5f31 GIT binary patch literal 4698 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 Ef)q`}TmS$7 literal 0 HcmV?d00001 diff --git a/public/android/android-launchericon-96-96.png b/public/android/android-launchericon-96-96.png new file mode 100644 index 0000000000000000000000000000000000000000..7709d52664fdbdcca2d28e0c2afea291a7c85f04 GIT binary patch literal 2198 zcmV;H2x<3;P)^7I7vi7RCt{2U0rMxRTMt6yWP@-v<0FT z6B7v7MFcUy7=lI`)B2aFsVFFf@?^j_pR}6R#9+X`2YtiD#8`sSh&Ci97z@clqTzui zKtL%-Y(gSY18r%`mbSa&`R?31ot>8GZLyqQyd^nUG@}toxWilDMbt_F1lN0=9WZ(gGvMN?Z3l>znTzLR4 z!6~>sR^QOLPMRYN5{i&xY7USir5w$Nw&UePLpLdrsG$ee-bc%q-$RL-1!ORVbb5^b z=)X!AFa1u#BcoJTyGSUhJ*BB|(qbeqr|_?B+#)fl{Y|n1g2*8sLuzd7Hofrt)6}-( zMM~bgl4_Xzh%rMs$THCo!llbs=*vTg>BtX1iO~R)?GXaF1;;y?^Us<4lgdW5%cFaz zA|DTb@ZQ_BZOgNCdwg7c$MDAm=~dL6Uk zx)rQ8$xc_TapOXExVzZq!|dRN2D1Y=19$M7KlY^jQIX=h2?9uZJMkcf5u%+&cDS(l zMgX%1I0JVGT2?o%qI2he6H%m`Cny0VA%LawLUh9UBF(T!B8vtf`99)c`b1~x(Iu`#M- z1pO#=dt4Ux5)D2f2Wn-MD!VoVaY5kuCk7y<})Myv!-*|uV2-9n!cD>lH3v$@pVWUl-O zbw;cd058KMBQy#-Jy9GV5Xy{Lset(WnI|5nHLDw`x;j4RCMdKSu~GnJApU>t)i(L( zkHwjag*GErD!>F4dpRPs8L?6z3|p<0wE)5ZBLK}X0?-U20L?H0&h2@qwoMDhmKmaJijVjQBZP;`CIbVPORcYId z015@TQ$;?(sjr+Nh`kO0pa!}t07Nq=LW!!NeV4D$+BHex?IWg^*sK5^5glImwNG#f zPCb#L5|)Q)i>ROL(~@bO;o`(hC?^%37=iOEZM^s zPmxmtT|`DOR~R-Z$%?VE)l<$E72-^RH$R+mwlF);{6kDWxC4j2X_Df&2i&VLbU!%) za6K*@2DBa0e4}F@{e0@QDDK&43OY{<744j7o8L8aL1#b_2hJ%bi_4$n<3YaONuHAC zN(iWj``wYFqADl~Q>r?X1_~C3?P(D?!r>xlsm(8G4k&KBnDZ0h9wQ(t-?5vm$|iE^ z%DZy|wd|^#2&#gjFr{rQP!3=a5Nbl}eYJxXz$wVT!i?^beOdSbTa1D~`_g=D=FVPj zOUN@40QExHI8Rkj0}r6AFxk_PueiLyt$Fa;rL?p>8Q}wP!W|GsKOZ-6*D-QN0^S5& zcb6mK=j?d^SZaI$R;#y?Pys^8k0Zd0v*0FH_ARAGW6<)KvT) zo07M+tOP;m#`rUEzR}#kv}nc2eBB5$EFr5YLA!xb;8u YFJ=vo1JpGM!vFvP07*qoM6N<$g2r9;mH+?% literal 0 HcmV?d00001 diff --git a/public/ios/100.png b/public/ios/100.png new file mode 100644 index 0000000000000000000000000000000000000000..ffac59ec846a6ffadd36a14fa97afb4ca07bfbe6 GIT binary patch literal 2937 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 literal 0 HcmV?d00001 diff --git a/public/ios/1024.png b/public/ios/1024.png new file mode 100644 index 0000000000000000000000000000000000000000..bfddd72557c7b144777993def139062049a18c43 GIT binary patch literal 38960 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 z z0vsP@ogBY;wpK<~c}3)~p&jRPu@P~NugotgR;RgQy3_$?4o{!2#Xa6@Jj(L&Yry$G zD>!^1-$qV&4ECZ>yx(tCg(LZ63I(V8en^QV%M^?IS_Lid(w^UvkX&d$Q{P-0HG8Gi zf78wxJCrpKj9RG!4uPhPV#fI@MX6bcyDUuQLBH%=TKk8#ra$uz?6iIxm?AmZw%LBT zWARD0b#6MAlXdyWc$t0FfN1uNGSZBeaOBuuM7)=`!d5S!-z@f{Vc)IQ^?`A+)SA%d z5fh(mV^d0l?!v5w*JR}DPxa(GT0VvwEX#|1i6ZUhS?mrxmjMse3ki8<{+Aqh(}uRP zeaB2gH;ydK%lX${@qOw6YQ%G%?0d{`$)#FUXiwf7v!y)lB+av%_ku~{fD;dmF&2FB zD_CM+?rX3r-#X8am`JS@6so?}p3B{4Jsqp0nD#uo@M~|4tx^#+91% zQAV}))0+tO(8rHdyS_2^)Gp3_(^>va0e;J_(+uSPT!JNP z|0^GATXWAY>^oo7Q^D$s!RA6Th>y0Plw@V~rpvbZ>2-`LY1#0;D{$#S{7dv)&WE?V zOeYT=3pirSi?j@KxDfTwy+KD=EP-q0M)t|C!pBc&EX8of$j(cYK|f|Fe_^${ZgmsB zrIq1|SjiQ51qRm#sz|MXK<(cgNkB*4YCZ~-fmxa?c)ER{jb#N};Nq=k;RRo=c=QDA z6^wM8Ia_$S={Wlk&cwqt)RQBXf>4M_9-r@Sn)ysYNlUR`2F^Wl^a%iSy1N0hDrC2+ zH7~2rw)@%%#V-|c$IR}1H9`>rtI|!((r;dsg$c@b8!&0NI=Z{5MvNsDF%}Q#!kMpe z^L0J^b0J+XWeV%Ge7B@y@yWh?FMjETYa%7-d2}9jHB)OD$$A@m=QOXOl=cdrwF;d? z7l-1O)J$piwYG&HudyA(vv&}vz&nS&*7gfA+K&}#%=WZZTvx4J|~?=H;6YF{|dCttG~b^4D{3m9$MyM#=iq0qHL`VcK1;mvUu zroviww64c&ve${}nrMdnDrO(l)ECHSJ5KMXe#qh;#%f+*$kTLh3=X@y)VO!H=Brfz zwW!RkNAyJwHY+E<=(9(Dq3721vnrQY@iH7YuKko|RA@%uu3-+*su+13jO7bs?OJmC zp(@!XaVM?N!xR;)$)kCufT|NeZ7cjt>W{M2*j#P%T>j+OG%)EiyqTNynp}mvx0C7O zr&XO|IQ?F_%%{vFspQI##l=~s{T1vag1L!n8t(f#&>Vb0=(~yWqGb2fA-#!nxY**N zxleQWGx)NWjU`?|_)qcB>-37#>_COSM3f(X`W&h}KtCeEiuovlW(|&c`p)dT$|>e)F5V29)5$IA&GcJX@Y7ROvkY1eu&<9=u{Z?PV^ixiM-gyqW7F{tKmD{RY=eKcU!Z z<`Qocs%QQ5xZn&-|JUmCe=li;gM>lrE4x$7mS-_5yg`R4xs7JMRd literal 0 HcmV?d00001 diff --git a/public/ios/114.png b/public/ios/114.png new file mode 100644 index 0000000000000000000000000000000000000000..04b16dab2148a3a113dea1c09e04a3f5d11179da GIT binary patch literal 3319 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 literal 0 HcmV?d00001 diff --git a/public/ios/144.png b/public/ios/144.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8cff05783dbbb7dc19edfb4fe082c1f0a85b2c GIT binary patch literal 3684 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 literal 0 HcmV?d00001 diff --git a/public/ios/152.png b/public/ios/152.png new file mode 100644 index 0000000000000000000000000000000000000000..faf2abbeefb12de10cd2dcf6511e045d1529844a GIT binary patch literal 4047 zcmai%Wmptk)5qx!K~|QAr6pVe0RagKVS#n&#+4h85|+*dSvsVQdl8zOmm6q-f z>5_c7uQ#6idB40L=FD}j^JV5YbFTSM7!3M~oP?eP3k!=}MOi`f-lzO+LB>cj~&S%EFs;uABT`(DK%!ROC)>K4gDsPwxQG0mocceEbz!Qhmm{C^y%aWuy9KA%6~##`I3m{(2+6BBI-l zpS)Q9e?>h`s!cG_e?Lw&@FexYT}j_@iNy+v;=+~@b(r%Q`aP}Y2ddce>~?or}$cd_h`=K0lLa^g(E z&JF4Y>iBKNB!!|)rexC0xrvk5Cls&O+yrY^dpOOASr;FP`?psIRL=r-2clv*u9D#P z(&MqVlFyyk_`{9Ag|!pcW1{qDsA6W7&pwMz#lY(gJHz%P}hcvLEp7 z;(l0$&FFs5q7XCgwXz+(_-efitJu-h&CdA}T*35f2$5b|+yfvZ7$;QapiWT!)YBEh zfq7lr|B8YlRyn04PXoXslu8D`X4Kq@!zB|Wa2Rmxr6PMveq-F+lAKZcJ#Pdgjn^sh zYqV5)^3O(=di=EER#}*Uww_)oC~Xn>pmO=p_wqWzetN<)M*6vnK7P1Yxx7g?{s+Do zJL$&i$-)hn60)ta$+3~!7t(Kou5j^>8S`|T+pZDSh|X4xpYq5@6anM6CJb=Mh$!ee;*CHT3D zqVwT4fySYR!h#t}5t6>@)$dG;rLm;dUOQwcQy09hh8m zUcvMim>iL#n@C7>CJY|g-`E7k)2>2_MnQUX0gZ}G&i$_}N?%j@DK(w%=BK5l`H=hl zj$sFi9Tmk0zrc-5TR1?)A_5=DxU@A!2F-!={sgqgK@I^H$V?lDyX!1M5)&Pp5KDMD zD`?VURjprkmSGr}N$;>UCT_d#GEVTY;W6RZv$U7h4SN-Ly*f2}<3Ijra)N-ZR2T(q zBGI}bhW1G-4mDDT#wek!NEbP6*5YF|uF}SQQG4I&l-8$UT9o>D#nWk0N-pY>hpyWR zqT>Lz4!K0aZARDVR%rc)pOZXdiAr?3BZBHd@P|-wj}cPtc;2+x`4S0@;XzIlszjBv zYFfs2D{`;v($do7LKQGJ>RC48fCKzh{BYorn3D>(&6*h>As5t61G*~LG=_)C3wo1e zZl?ij$Bxu^L}yvjB?5T$pk3cM#`6@Vp#aA4bm4bc*ab5L#=%?gr(qaswNjzSz}0U) zmDAH{m1-RT2v+Czz6`WiyRX>13oigRY!yi1d(GQ&+hs)aQ9(f{8Y`E&m*Yp6XtR2aN`Ag$V5T$Ist{iG0lj~GT<9IrVR?1(`W#;I}XL|3|KdEmNebFr8`{#+mUIu?j3Chn~bq?HRP-8x)~Q=5oo_Hob*H|XOe77&_ibc&tj{EyH= z;s3=Llme%rQUiw*asBTzFDYg<>Tq9aip(t?&p8zbdv;az8xR(aVxAd6E)c&V4Q`X2 zJ&W4l7x(*UX5c99J~yGQhfb7IgRC224i2W)KPh>g1to8Omubs8v-s&pr4JqJcHYl6 zYz-`LIMUqy?j##*S$nAq&H+s>vNA=S)(<*9vBCZkPKc5#N$_=v$F%R;Vm=ry2{3B* z5A}9-Ew}IU542T$5IKryXU;Mb)QkWA^yKO>#{173FlO|hnJkb7^X0+7#o;hU4^c%h zjY~O*yzT_am*Q2$bBBszVaYLfh>SX#u-+o%Be{97xb!MT_4Tbv@hK@G!B)54O(<06 zMx>-XJZaVX=^9qSw^7$=!$B=u|I5oMnomUaq=lwZ@3>4n{}^*7yHr1-CUg&{)$pjE-N>6hg_ zb|l#WR}|ynma(DS`xAlsHz|~&BBkSGpcL!}wI!wbC+kLcd6e$^I#=TB09G1ipzz&v zDf;xk&f|F%j?W20Ab3?dq9snnZ(%`U^_>Mr$QJ z;lLlipCp19y3yQs9$UdQvpQo86zEe>=7|9Bh##U)j$I}b%Gc0LgJIR-%5=1kd+LMz zKmGmhWaRj-H_np0x3(g%&yN$9ABMq$W!ILrpJpm+3Z)*6>2NgiB3`-kGS{-A=x|JE zK9Zk`w62la*xBW%{gOvHYU?0fhKZ(vyCI5T+#EeA=KZ2K^VOky4LfdCQWtPssaycl z=bP^6{*KqzL~)dlo`))cR&^kUi{?}Vti@6VkP473AQ3xBXKL`~|E2uzB5+a-Bs~k1 zQZXQNTVe4pJX3h;fL$vzRn}ItBU`ThSn&mJKv(j|hh3<`&JuLFrt>c~h@~3%+Erw1 zVp!(3A)eXi!m(rn`AiJLC|Rrj^Ad_gI(pgsp>AC7Q$;7A2i&)LS_J$IffvEFqapUf z!}G|56Z@VcM5eKKk)`EO6lfny67rH}8HDo0B?^`xPLOA3@niJbt20*j3dp_W!Fa34 z{O1QX(*@5ogp&oMd;oL>YM-hcmX1g~MDe#d;PnwWK$-zvB)^B+S^F@sP|JG!&*KcQ z6ZsDzEN}NZvV2Zz$+)P;et9tqn2zMy=O){eION~jQ!qX8=q)ZGx~T5;kDWMW-Bh>;0mbf)lrohYXz*J4wFT<8!K@eY%QrVlk{fvY*s1q=W2@!deVBXqB|tKkduY>PHweD()F8YN zAVH?1<*)NWyoRdM@+uLSYH+K$1XQIg*v{DqFog!hhB^9NG zKl~Py>gK9GSl%AsxQ@!gF6$oS6y5G@%1Fu-s5{tc39iPfo-W0$j7jF|yKl6vC!LvG ze`gdlI8W#H=Me>qEBEV4tJ~hzK<4%WYaejxB#9}1EVhj_5HzX`k3(~e2iqRiw$;ct zO@3}^WZA7)B@(sS8-4CELFm0X+^sjF^;%kKH=Um3o<|`DQ^#59GMmpywmLrH z`*rMl5L;OCGd+zyB9;{Ty`k*8|AV4#SXt?@?Y#8ho4Y90G*yopJy_f!!{-$-sgo@~ z>qGhT(X!Ohaq1T3+%1>j)jh*DGjutT`C~PRPxg$l6*ZeJfQ@!&uWbF~0x*kue_52| z+>ov+{M^%J3{k*772BQiQ|Ge5QppzK1PsP{LEfPFV=m%cPU$`WMciG!{ZnU$w(Ff(SBi^hc_W{lCprmPMt zChl+QuSz}raQ6k*ai+GNpyLAG|Gm($DtE-Qcr{23K5NR*S{7U3sv$&Frp)B9grW38 z>Ki+MJv$}ZzfC$H-ti+$HtJ0++nh@r45~z!A=(od25LN0`wh$QDjXjOGXCy+lJse_ zDcmWKPQtux`8NyfVv=Uwv}=u8a57u=CqgR$PsTsp4?GaSdy=vi8CLA@mqfBOw%H+< e7LU!^k&JG(X{X1rZO{Eij-{dqRVaT6NBs+!^p}PJ literal 0 HcmV?d00001 diff --git a/public/ios/16.png b/public/ios/16.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf35ab851a9e88ac6be00e1b71d4737bfbc48d7 GIT binary patch literal 629 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%0AWCyhdFL&c-REo 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 literal 0 HcmV?d00001 diff --git a/public/ios/192.png b/public/ios/192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc974ac97d2b93974d9b0ff94ba735ddbb3e5f31 GIT binary patch literal 4698 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¥8W@O)rn*9*qRlyp6%{@H%o7!lF`0_y+rY!F>F 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 literal 0 HcmV?d00001 diff --git a/public/ios/29.png b/public/ios/29.png new file mode 100644 index 0000000000000000000000000000000000000000..233a37a21c1e06d03d97bf32f2a57fcace8b7956 GIT binary patch literal 1060 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 AI{*Lx literal 0 HcmV?d00001 diff --git a/public/ios/50.png b/public/ios/50.png new file mode 100644 index 0000000000000000000000000000000000000000..ce015a03a28b57157dffa7d26cfb7ac109ae365b GIT binary patch literal 1493 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 literal 0 HcmV?d00001 diff --git a/public/ios/64.png b/public/ios/64.png new file mode 100644 index 0000000000000000000000000000000000000000..50e063754385ddbd1f82f4a0f5045fd3f158952e GIT binary patch literal 1492 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 Ef)q`}TmS$7 literal 0 HcmV?d00001 diff --git a/public/ios/76.png b/public/ios/76.png new file mode 100644 index 0000000000000000000000000000000000000000..5d3a48e1ef0a67877095e7a0921b3f430425e94a GIT binary patch literal 2359 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 literal 0 HcmV?d00001 diff --git a/public/ios/87.png b/public/ios/87.png new file mode 100644 index 0000000000000000000000000000000000000000..6f723df104bdf421567c43089db70277e1401aa6 GIT binary patch literal 2435 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 z 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 literal 0 HcmV?d00001 diff --git a/public/windows11/LargeTile.scale-200.png b/public/windows11/LargeTile.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..2a6fdec175e305d8617a41e299082776b5412a30 GIT binary patch literal 16019 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 literal 0 HcmV?d00001 diff --git a/public/windows11/LargeTile.scale-400.png b/public/windows11/LargeTile.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..d6fe335853f98efe1b0f60faa5035c20dd83df32 GIT binary patch literal 43463 zcmeFZhc}yl{5MQ#RjsyKvuJ6lDyr7ku1(FN)K;4awYTV^YSyZ~H?eoD+Iu!ZMpf;R zs68Uw7yaFT!E>JHIrlkt&dG7bNj{(Vc)j=My27+Im8otp-5??&qEb~+&>n0J?uM))h$mG1l7D<`Pp)R5)q1OS&i$c6CjvJSK{^qPPmw0KBC!Pbf&+2$ zUWWm^xF!j-Yq$i??Yt_j-TdKg4%deKC()r79w2Kr9zC}y3cM+tdA=a1*{4m9pJ5N2 zSI)}mB^K(r4PKeJLw5O_7MOLOjLyWSCp>Pfeh%@nHO*Wh@t|Q<`NI48Obn`kxW(*{ zZ~5rU?CBmk4-xLh6_MXoDl`!cu4Jt;)+B zol^XXzSRdl+Lwj)Dz;Emz?)^~P(Slf8IgjaMETl0l#qhEe{Op_^dvq3zu#Vb_-OB( z>%z~BN9?(H5>idifAPN*vzS7;a+5hR1$)8*NAEJJIk)4SD^zb9dw6zxdgJ~4y-xjL z(#u_ga;E7)!YO~s+ujIdOH&*5%IiJ4Mr ztJeZ3Nu4_SVlt%+0;ig=sahqF?k~c(t$dCU1=e~I*Wg%Qo7UDAh2 zvm4G^o@3QxSTZy=Q9{wGH=utwqCx&b)X8i1^n|RIx&s%8_kSL{4h^RS2;R>EE;U^y zu@B~0X7Tn%fDJGMH3Nz7YX+RoCr_866qJ>f(01I_X@a3ZL)w~5@yovRpha#Gu}3yiDBR?`9YItbC5sy?f9p8GuqyR zMwBTovO+O)(uK3At=N&w=*6=Om;alis;zAX96=eLgg33L-gK^LT(A+C{~(dEHL76} zo-SCW;^}V@w44Dc6Cb+@^2$g_gqWpep6qc z2{z8FvFfF%r<4~MNE*(RF(O#66uf}e!FW`HBQct@?HjPP1F8^wA zQ?ibh_{ATTv;sb}N?6|=j z^F?fBRE+2CW_(x=pVtZ}UlSffXIi6=aI&7>MDF}Sf6f&ztM!3#soM2v9Lq4O2Av4K zW!C-}OjYy^k)3`L^)@2YLgU7xHI!$O$9|`==twaFo(!Uh1>@1&%IFa?%mH9g^Mg4g z$Yi>TS?S>|!#A_ehn$KQ7m{<5VcY+>Bkp)Lm+gp6q&EV_%&(UL8o}~4^^L+7)O!03 zl zM+@R`KtJa{#(uRJ{fYV*z4S}tB(loTdpZ~uf`$#40}|&9k23;de^-^{N{wXfAXU}C~MAWwnQu0z3`quuZbs@naJDCVr%EqguEmQk?QYd zb-I>0LxS!#Q`JKLx(3GQgs~JH!g`qQFyZ&1$WUYKv83rgC7CNKGv*)qj+69)CR`g0UY5W@ z=P0OpI2I$IL~rO*yZk=05g)|P=_80qkmgKp4Z8KYzr1|SB9o{6wC$Qt1Ix=Bn+l{( zGp{CRw>xOgf7TWC%$)9pbwXE??n^%GnIySQLzArV-!g76%&UxX%^m-fg^r`B{v}ER zt!2jqY#OXoY(h^vV#L!I5!TMFbCM6+8ZmA!kPuD285U7j zZw=NnN)l63X7-}IBI4w~*7k~Hppo3@wij-bS(N77iFOKJUm`UjjPK; zOIFvuLl_jFSU4s6B?o;PV*La!(I$4`nqH7#oacp>R&?W1Lz5GqtUU6Z7vUDYrzZvO zKGjh_n!;_)jA0yHVEjo{B7^+HX~~(H;#Fq&MNHFnMV z)Ew_jZ1SnDYvDsktrF4OSHm{7B9b64?UW&DnbQ8%e$HdR-zRzYB!1!L{~D7X5BP04 z5hr6n=w6c~R(`i=9@1TtRbx+)I4lUdvLIgViKxI6{SdUORqu?l`h9AXcfWe)fd|HDHAuUk>=XRl~c4A z-Za!VhLB$Cz!5mpS=`O-*fBd(T;!-q=*`NvsDZJJ@_J!>e!c`5SJyjFUfT~@sNPO8 zjOkdD#$hP>b6_LqlW;V%!aln>;bEw=@WrkY6WD@|*?TXI%F}9X2fqp!HbCm#M)@NI zASt6!1e=?m3Um7D$|66^dTUjvHoYgFNd%0JH?M{^+Y8DF(%2$2btbz&To$Hcvb67g zw?0+$o`4`$pJeI#VNfrkS1FxDr$l4c|4z`rZeNOd^G*XorGa9e^%>{5--a&;iz?TI z{chU~t%}08>9%Yu75nLUJ4-r1^5#i9ABf)B)s0+-&*#>4sd`FpU=lQ3+CdTb z);CR1RuY_1M$D!rNn(L-gVuiK9n?>mZi>}02R)(n_3OQOD?5Tu{!(lQFqWPrvdzC9 zTjlUf&+n`BkpiI@8)Jj=Vyf|4jV3?YLgULq3CF8jGksDf5}?*7j?;C9bSF5iU=B#E zI@_JMq;@{$gIrFUE9~B}vnt-sBkQF&p4IiJ$u7QCna!P#SH{!{KjZw84A_L{o5D<@ z8j!_P7E;>^f#PzWvby)YwJ4uP-@JT<9Al%MC{yMD(jn=gZzr46+LviGI#Pyl+_#J~$ByO|u4f9p0 zkD(*zrQG@&Zy{EO-B=jqc?hgTda1mZt0sw{LTtf$IMtd`Bp z%KZG5&J5`_bu)Ks$hO1&P4vwY4A|Ea;m;ov=Xrcl@t zvzl~thD@kq;~mY+fCjx1mnhJ<`v}y-H=I_GN~HmmsTu${M30koQ?Z@j75v=DknG08 zji~4*EVDCyvzI=eo_~CIpWTFT=Q0{qdj1qq)uWdiM;RI{t=&UqdZ89%J5OExEKXq} zwsWS90e(_4fqqubI1evinNLpk|H+XHnTSg;eyOX%Ws^*t<}U=*C3%s{@k|&*kheWt zimH=p2uMEL)aTC`uDUFrjZ?3Iw$kNM{qDU<7zENT&-yF}WU;eFXQws1Ausij_U)b7 z`|0VAmkX1>Q$;FvgoLObMl&DMGAtKr+85QAALhH!k|=GOE%afA4A2KABj3vm4xXA_ zXq^ZZjqqWLe;pdN?m7wfj}!>REx))qV~S}CgFH<@Xbqc6H))G$P0kXs@jG9fMTBk; zGc$2Qmf|&5I7Rq^iZ>N1U@2|ud}-}V&eCgq`OPWnb&78u{S!^PLqDBI};R?!<2Gj>B+2>P}RyH_?svUnEA3-Q5->sRN z3|jt>_M#C(WWiN}_y||r_LzHMnc*1mB&FaJASAV`~RuhAys zeO6>nlx=4(S&LvP`<~NNYPV+F#T61vm08pSvI}5#aol_Wd7yq6W!;@(fVSBN;g$;( zA=j|I_du?fOaCUoZ5dzLv@1s(e|K(|P*E{&wp*;&bziZ4xjkw>e>!#@@i&aaqKhj> zLXee-qadF*f-h5ol{f9I2|KDO$*mMLCw2NM9)@s)oHhQwTvGam@oY&t*wr9Z`q6tz z)#qmsrLyOk)8kA+oOBGv{oxx^V~VnxXYS1pJ4}^201qM|XzOwR^mMOy=PJ*HozCnw zpZ9bgY+s{+U^cRbM3mCYi%(xDj)?6wc25q@9V(7)4@IBFpi(`&TCBlq3PJOjjnd<* zGPOeKEEFb>9Crl^9rij*<$=Ya;y>LrTs-odLnFS8!LS>+WsZiu;-v5K;(28Mm~<*I94v`gjAM!{Xz_K{3@-19Pk8_JT8f#Oqd*@o?+J*w`}pq zWJ>Eg1N9|zkMis*6N~P_n10$*`Lzp7ZXKAeZ62K`WJ>RcNWU@SxnpQ}$D4wfc^x4b zaNpU9yV+|^k9&>J7TgqO?ru<2(HNR>i)vbA0(xm^jRuaOaapV3X@$*l9C{|ROe6iQ zBHUn1sa1X)Bs~C=)mFQ0YERK^;D-Sr|~52*M-tbq&y19W7^w1xMAcpxvr{SD)PP z_tB3Mq^#Ao-M*K+fP^4)lSv$C6(IMQ66ESYyhUQBDEBq9%T^;AR41?W8l6zc-+05b zvwI}SVCZa%La=Yw@vWi<@fzhSH-YLmkeWPW^Nv3g= zP%d%C(m-XP$@BVvsqE^dj$T;Vo0gNF#cj=3m=DBo( zA@&jQSBB?r-!323HBoSdU%BWC9F6NV4LplLsM}BH@YH|al)qJ>|wh)4@Re?&n@a;VAw3`(wHP-1s}UjNK{x$_r2tMJNspO%xK#nYIP zV^lDT-J*-dVI^fyEB)^PApxEd<-xaGS=Gbe1R62`b=JM+=Jy@0)V?6ILtiJ|N^<@s zQeR+sLskw66m;i@NMm;ykHfkCv5Y7oYj-Xq@!5A=q)v^w+8%FK9oWkAuk|7$1;&`a zLDtH-GrhmxXSvbLx0IPpcPUMajR~b&P#4da52=uT7^yiS%ja)za_S~;Pt)6K@;dY* z1SMs4$#GwTsT%Srm{!w3{xyNiM#ZHV(q-M=B*+4*UvYteJ|w8I^PUBWoc0x~c1I6oyAc4S?4{-B1Hb|0f|62rsB<)nec{Hxe@8v68)n za)(!r@Vm!L+%X;%Z&7OHbY_%gCNg*fnLtym8z{LH^>;u?)u`&X8Z%(-Hx$w%=WD@03dBX|1}k?Y^9RtGZn%V(^E`6RyX&B1dT^~xAg+Bd zz-dOIBZR6L{eV^hl=73lV%RidvWtu+spv>1tjfHEk*)+DhU&ciEmpn2WtnjO~ z28GS`k}|pya5b{2_roQ1!B|aY@aqEQ=Y|3YshmR7Q-N0Je31RUrY4HQ8&b)yrqX9! zmhDDwRs$KC4d)X^f%j*UWrfel{33bJc)U-k8tU{lC*JYiyp*}uHLPvvB4@$t2!bf5 zv$$?@*tzH1<;BLUB&P9MF2cHCIoT&xtBaA~%}xaqWMuUZW^ z{gargy3N!rQ(j!4C--li0hjqC$gWn9w%L%`s zxYQt#JqvW+NOf@JF^4n0AS_uB%zl3O2VUbh=LaS{;E(hB0hp${xjVG$D)AF1&s zQ>hnWAr4^iV}f9b486xc?^DSgGjf%P%oKhaY3=L;_Fdo0Jo1m2FfvZn2bf~GQqNK# zA$V(4EAwYJCKMz!yNyS?5Dd`s?mBHM@t@viUy28<>DgF>7|n(i*X_YQyiWCkPJS{w z@78%e5o85Y@h9X!Nu>g9OG*b3@anpRs$pwWOc`|t`M#2EfZa0f-Cd!%}mW6TAyIn=lE{Vz+tV4A|_V2jUz9Sq0KFuWbEH(J-9 zO{CzRX{F%JO0fId{6{5rW*};r7zljBZFa}uzMrMy{(gJeSa7(Z_&)QWmZh1n+B{#k zY^UxjU^xKygmv6{cXm2@v(=|3s5i~tKNtB~Yoz?C6_-#P zi~>7&+~30|^C@Pee=Z{+k#xCZ{U1lC+%84P82pzAM$nB<#@m@wr8lQ(S9!nQwSj!L zp8HBY_9-g`roE@h`_~gsn?4=(A3V4NT46hde~aKkMwn2|NC`SfeyQDQJCG%dZ*5U5 zv?b zu?KxRtqUtRrYY=J_|x|=ptUyFxOTs<**PdmVpP4}jmcTn0jKznzj4I~)DzC$Anq?imemqxkf&q)a1UE{k3$FEQSAwENH926)s8Fj8t6=E zr>z57M;7_*d%mPltvGAi=YNCGM!b;ZR0>S5skINYn~F%vRQpp3$;dqBKMOK|k(GPd zneBl;1%sJ^WzhW9@GS>fm%>RN8rU3`zY(0XEQHi?f!zTey%!=zZ3?`+jo9=16#nPLN?KB@OD zP@Fo+A30?LhYu*D6qZnAI=%7I8`Pdl%{^5D(fW(}N#B`+ zW2eZ6h5~y110+!{3z#3a_2*dcd~uAfJgw38HfIXt@Dp~ORWy8exUZfC06A^1f?rRa z`}eVg=4;diXzW;Hc;z)G_-px63g(-2LRBeF;02AJTj1lWom7yR1qC|w-JJwMT~Mh@ zWomW`@A(ByS%yiG+mBN@v?H88IV=Z?5d7PlD}tmLQHk0F&4$L4O>Xi{dL07odEgm_ zw#E-~Q`G2Z0;w@8G0N*LyGCE&p%H^p98L%S+WROt%K_eI==i3ofJlSL%7oCAU&k zg4Xjgy`dnBYLsbjrdQ|~3@R^zdUb3j%EROK4aROHgh@<#VtKjd+SXRW*)LXA&N$q5o=2hXBm%iU=ds_Gn3xCQ1M{zF&;bnD z-(#z6YCkrZMquhWL8Z>_`2BrPLu3B_&dwb5F_UjirytObRS%Cp?*vJ=Kh~Y9iS<7G zUTgdJf$6KS`8#AgJUl#S$E95=q9SjfsnJf@G7!A%!MGbjzLS9vR+sNbV~Kg%H*|S7 z+-Bhi1iZ%CAY&WYm?3*8(N45Hz4%PvaEPgOvAikMlOC?V^l5!Th+lXdip8ApP8|Q- zn<^1L6?uyeA;&HpIdWEvf?;N$3$7aOp>mRC_>&@3(y;FGA%8DN)k%{5FxE;h`^ zxBME`$o}=>WBd6b7G=8T z$aAbIO1K$>!Pb>(z-G!#S~&#;4Hp08b2mu}bI|jdC5C@5>}gJ6H$2V?biWg>myuas z&#A*V-dzh@KjjHS|GIjp`I;E_fp0SjJWZma9QwWn3bB zjYLT5w69MySqiH2c$coFT36}C#-jEFA7P(OJ;+2RBjB@Z5>s9@G=mn-FRGJ+25iWz zEwar0{QUyRQl%3@+#VfXGcx;|b!q~?N`1=w_vEBEz$w)w4<3*Jy68^4+X5d*qW6CI zTLhS9K~^^U;|}UY*xJ?}(-A7sY#a7>4im&p_K@hb;Zd`F7Vwl{jhn9{BGhSmd3ot1 z@{ys5N&NBY2NRgc$_5ePoitrIjJIX2%e%8aWSs4TBUkEZB_RzprYLd{*Z@IEF)?+C z+Lm%ypgJd;wk?9z6@F$)I5oRjk>JX;U_-lt&U0pBihZu3A3|o+f`95Y522a!*(PWI zg!CPa60O;gR=`(?7)Mkd3 za-ZJHhh8aN<1(y3Zx9C^&+-ai=CS@UAG4NS?=;X7QITu74|tI$GM%YB1vfo)H=Ddg?RJpSZlfJa`tIvx=d%wEv zj4wk)c^yOt9-bsjeZDU=fzFQ$5UhU;aPc@jm2yXyE2pVA?(-*5mSI%)2Bo*O5$r!k!74uMb9?V}V}LuAj2FAl;&!=9F1u4-oxSzZLvC z`_3D0Q2~oTE0K_V<9;O_lv#=7t65rlEu&?m1`0o4Tz!wH9_nv1bvyc<7ZDxVpJDnj zsOk#glgjr+1o=zP0qhR5)o%krS)lZV6*R^fZ-hA7rJA3ruh_cNfUpyA_}Y4mG&%Yh zf3UeT^>dSnHNJ{~U&MOz9VMuEzSc?a<4smMy7eD?LXeV$&<(d0P(~kYyr0o^-Xakp zCxNaVb2c4@vl*9C1aS{-G|Xh251i0Ns9zLcGZb;X=nz`UVY&`xc@ z%0489?ewpmw7o7<`K>aHAUwWywVv+~>pO_;LmyC_TRhE5ct?>lI43u0Xgbr8QcAC- zXiAdnYK6$C);DvbA8Jj|-E*}6^dKkm%X)Xt$uCbU2SfctgMew|;!%<0?xL03J2&-^ zP`7HAIp;Oa!qe%pjeDTaa!a)NJM1q!N-uJ&qlXUI`R}T`k;F?5V2>b?^y-4#TvH>X z*q{gXp=>Q$qiIt7fS&pKqB0Ycc?<|*rs?Tz*;z=&P}pendO~Ev)8SwVpQmt{gYdeg ze8Jrcu%XkT+@^xfGGU8*wxa>QxS#>QD1;A+eFn*>hdK3`_KXr8l=fdWe;+|eC|#>R08 z39s2&9{q7`+WIT&`}eHtxv(&={~@KCmN#;2N<`5Ab>eq})9LO%0y2(;C-)jRMEs~R z4eP$-BQW0d^z$H3)x_GgvNEnAigrZ+mJfPYgHLwgBMfow5?~INGRd+orDT6B?QbqB zX!&iUr_G|dNf1FlY{J-4ex<*E^P_al<0iO=Fsqa(Yj~^O&Z`S$+kaYr%w)CM>sqWA z|M>aj6oz+91|NSc zOB`}O=WR%z+)7aS_6|$|l&S2KvtjRmY{zWkYdXQI6`?ftlalJSxMX}Vman*N&7KSy z$vkv6m2q}vCibk!oLVztz$#k$akQjIW~Mjq6Gb;G2i5Y5vJ=Dx@-xK+iCKnvpm@uw z#lq?dv1yOhA`vReMn7fPj5rcyW4+}Jz%n9D8eczb*2Kv>kmuo5kI#aNvkBvF5JFZZ zovH?lCggE-f%T=3Q{?H-VvyelTjJxjxV%(jB4SkH+dB7=bDhuGzMa^h5wMgn*UfT_ zVyX+%60XkqP|5xL8_5oGMVcei566ApTT@%hzPo!I`Aky=bAiKP+d?X0Be{@-*S8W4 z^aExP2qb5w|MAs1?Z1a}`1hwva{C5luLLt=2AUoBrax#Gpd;I# z%rzum&1$+;3BJ|qbT-Lo#p(v5#}tG`@lnLx)Tf4~n&17|`eQXUGAIYwdUJ(qyoW;i z@Xzkf_($baE-^x@)ERRQ#_{uqwjc2_t=U!=6-|e}6%WOO$57W=&UJU;v4v= z%1CTHg>oX(u<7+;v})hv3!wR#)-gT~doicyu`>$fyocA`K1yBtZkHLPo&mveCo?c7 zj2?&>8k?4`xltVDU9^@u>UB&jp++040YAeObfnMM)t-xpuvb8~$aV;j)2cMcN{&MB ziTgCg)mzKfFlG^uKZvFgdG22Po)B)=j{jJ^lYUEHG4r2zgst?dS4hCkXQ7*6OD$>DVCBn2hLVz1`$k21f6>&)<6n zH*j8J7CbbW>=qzPQYVe4>FGjY3dc|GZnf|W*F3ZUZy z);iRhxbOTeCpj&D(NjSxMZelBTYej7dS1{HoSua=$)cm94{Y^V?f8_ZYdQ&s&%+Q= znUWjI$M%>{&BrzhL#Ym~4LDIHB{bH2{iE#j-W#+UQQcXp`88I!?>x_IwlczWlDFx; z!L^z;5Nf?i2ZP+CAkWF{jFb6cw8<~X?cJU5vB9BCU(Kj{X)#V-9p)I1gnL###TS6t zG%=!GGXZhZoivrm?4Al%gY5fh7zqd7?OUKHrl&8uMD&@UY9nuqr$CXC2}}$UjGwpT z+*jtFbE|&K<&1j(sp(l8J}(%a#Le|mF&hRZ*Nw{T!NQH1C(RQ9lM`zBV+CH?0Z7? zkF>pgFTBF4|M?L|lbg+GW~w^p^;v0Y=yvHn0^+LBRtFm|CtWMY+~C{mb)fn%)E z;9Lf_;6TeHP{rW;B92|wUaojpR#3+C={n=R-2u-#R~LF`0(X9yiv%bD1Do(5>i5|u z`qKEx-JQ<{=7~Vg5g<{+CuV9^fc(cl5n67eK(6X>{^QuF1CiMV?}nBG9{!VSAua^$ z+)#coqXXFCn*#gt3anST;B%2zAZfx`iYs$B>*klObLSY!8`Gn#b!%r;_aRF{+_rHK zEI@L-3QQSyfh?D=;5nHR4^L8idW(O;r`(6m=w1;ex2TC4EMmWC8*0ARW0}L zP>CT}zH@y&WlLY;KQTTm7+hUn&o_5AdKj?q0bz#R4~fpV&0wG6QOclzb$OSkOL>)@ z7MTZr2!;;atQ3A=RYo(j_uus#GBj?;8D;AK^*2Xxd2ntzh^ajAIJ}}CRMDcxO6Ta= z3)@k9`L9#YrVir5+6t!ZH>SJ<@qjJH9emFA+6i?gP2ya|<(h0A0@iyRrM&9?4`awM zpi@(C6Y`lidzFj;?jGq%6!>+5Y4oBz_0RGuKddV2n2lRtOry)#=t?g3WJ$Xhm%n7w zJ|pX^_^R`A41H7?KxG51D7CCgs;G(|?KwC(JX5u;FxwrW1nl+Yqmb|*(z+@6x+ZLl zKjVH60X2vj?m~RJK9iy%4x3vn9Gf{VrrlUV<M!GW+%|5Vquf-eW*;%z*$$5o7c7ZL-lP{UsGiQBG=&%+0Iw z9BZ5J2TlW)t%KJ0KS-}SrvgVmJL@@RI}mywBJaxS5;!oHANw%#_8MiqHftQ?TG}}} z1JUPWOV<_?zMK7xbHU9@ZJOKsn+0bD8R@P))5hwkaUugo_Iswy4i3+IAm_%(DH#cR zB}4q;29NJtWkcFlIoec2z6@<{<})>GVGloRD{B1qAZr`ocBoh3GiQV+3=@a@st0Q% z<_QhDes*J#ZxP7Af;59OGHN9c_ZD_G%+FeYx~KG%{N>G?mo4%RQyr|e@x*5ur-z|5 znlGP!i z(!b$g2S&HNs_aw2y_~g9GNW(@lJ2fUqigj@ETs{7dXT*Suwx>wekjlxBp(6+KH>)9Y8}$)fxJ>@)9-!swS~wsosp zTK=T6p2ka;@tw%lzJt>bB+_7u{NF31e?;&7@X^xZZWXZv4iin>o*@MYc>xSr^7Nih z8B{2ll8}+?PJIk5tDSCc5ZM851u`%tlB{6csDJc7hvmTE*_=1XME_^1r7x-E~G*O3pXW_IaIq3Lj zjaEO!m=tgF`yfM8)5Dej(La|Ks6ywCYOPs}iC4$8ZFsooX;IEvGEY#F{l4U~wZD0t zqSIunMf4Z)xo6wmZbzke?YG=j5EKc@b*3@1c`3xi#vj-Ijvuel)^mx@S3JgL5+823jz|}pwetILP7h9(U3$juT zI$m}KY-<|;H*cTz1Wn%6im_|zVmu5rJ(j5`{?&~q5B8k}?^}Qxcb@Z9B`(GGm*S2# zS-st}mPvC?59j;#VHAV=8)`x49pB`4)`46&ZUO&@HGF7iCuhrqto5s`yx{E{3%C(-R>*mthAAl<3?H*vbtR_Q^{fGR_#2cGRSuk70TY_14K z#&*XbDHI9}-k3&DyvAl5_-FJAI990Z{Gm0=q_NpFS(!d%`pFnkaM^P@gk2V(l%#g`=_i!Kfyl}Rs%br`~iN=HBx)k+jDIzfea_HYCw(M*w}Zk zN_eU09r@OS_kvZSkCs)Bp}f4$|4T{;WtC*7Y2Qvf-5IfxcA831^!$(8)X7_qxpF`3 zoAM(enRk6l!6VlJg#s}lgF2CK{r#bsw?c21kT%wdXvRSJ>*{PyAD_AjwI_c`#I%;s5f) z&;MbjdHkEFWgh*Pf=qdjuos_B;Zs^MxEqL5^<7wX^<5aTI&+m**n4Y#g;CVfJG^do zJ)M)%o&b7wrT&^A;>f2By!A^PVQnxXUtjGS)}*+f)8a#DcHs~DdnUhgluPpxsBFoc zn`4XWe)Lw4U$7LsoF)H4Ex+HO*{Dlu*|Eueg}cq@&m5BP&>(w$z|ePdeRHHEX#BAT`Fr8NFDjIoq^G+f$A{Q>dg{9Uq@a(e()6 zAfLdG&u9C4(+sUZmK1%Dvhmgq4n0~KjL|*+29#Ok4p6%2J`+Oy=Er(v6W&61d-IHx z#JIxI+m(U#O6M+*?FH~gAMsJ<{)dq}ry%0Gcez0N@O6Jax!p3U-=oQx#<&U(`tYDv z^jFB1b~yW7PvY8E+(mldKTi_NvU<^Q(s`=%Z$2N)S>S1!t-U8NN9JxQ=3#-x3hs=4 zR$KZ^O}b^3`@0T-yUWa?+MUQ(_9dQ+qhUe`5$qox40RP*F%wi;F=BSb%l^Pm{#BR3 zjB82aWZYh4_^u1AZLDou9SzAVH$`1Y^hM3oyAe_Cc=k2yS|S%4F`L|YpO z1mdQ7)B|-~cK!Yev?y!!VM|rmf>w>f_#?p5mtqH$M;}uqRan9=q%NuGM0iDrJrF{r zEnpYziIXtp{F+=-pswXvxqh)v*1&6eD6FdX;hM+ymV-e%YuD}OG%a}$AECU*&UXMvs@QR9NSaivdDbCYMfBXiO4HpCv0q7{nM5ZJ z><#H^Nj~-WqB%yqZC!o7^=|{IW^Gez4jCN>AN%oXKgc}NwwU+~{Hi}(h z9@^<3gf0n=$#8J^d*ihv2BAIwZltV)+XIM$-VJ{=+u+hrv9Fma#=kP!#sOvl11{{L zg+By}NW$xoaJcXeXQXCGoZH5aMmfA!@9>HS97u>(3e3$)9J-K&FJ==Fr6JGH-=%9) z8!`1kAyL+I8K!O)mg;(??jqsKg!ujp zb)lqfg(4mD|2Q+#(r&8lM-M+W5i8_Ry5^J@dk92Y`S?DC)E)FEe~bvOK5_k{++<6( zB;VYLW*q{N7lA|Z07=vlIX__m2=6~^aF;pkOiF-;!9Y0Bnh6~7J{d;2Eu($SDS9o% zKgK?Ag0(jKUv)2c!p*7N_DN;}GIL_}rNMbVn)k3OglQPC?A{q z70Lb|uH=u@?IhW$IS#k|v^M?W?4LxWPLcDFnJyppuU|jE_5P22Ns+3A_O2VeQBm(} zUQKS7sdZlOyo4Zgx z?10eD(RK!oL?~4*1!IvgWw5t1`v$cHPxLBWL1OmECT8cVe&3%B>4f$8R{s#2u?*87 zlc1ot6I!2&!`UvFA*vUF;$P;+ngiY;%bc_CaA>tn%58r=4bo!7JlV7STJWP|NLF$u ztMTJClb6$&@W+jZK&b4D-<$LB(lfY;h582bC`RsZF(}IX3i5fp!dIEwCj4KCiT1$a zMfGZdFS50(dKM34nX@w0%D?j%P|=dp@v*x4Ufd$s8K_8>g0)mnUf5e|y<10OuP0fdT>g zd2&qEM4;R0B4ct!a)M>?LsiEPV|d$r-rFH0&N6pvyI+3rj{+RQ?Sc2TNftj@3LJ3- z(KT`vw`CcQK2z3Of$g7hg;Hy(7#o+uTt>Vb7 zdgVYeX5H{sWh_N(;{Bx6^>iQn`kE-+)kB~WlbcitCjcFu)ZbFIW3MG3`&W?2N%q;{ z;Kgc22p$+(+>Y+Czr1fb7@WtHbvIlQNE5yX`g;%IOywt$NOrX$p3btDTdwXMoX;Jv z%yr9mATF?zOKfazW3FiZFg2Wc^~Uq&#vey#w-{LmPqZ~qADRj-Vra)f{%)CrDMNH$ zUZDgpfzS%HGH3Zc3ZvKLt`GMtgKe+t*L*G-W2wDyfqmJC{d5osZu&iSy|JD_2v7sW zGOi{JguPnZ!fwAeKDK;GO@1K&RDyu4n0ojPUeOJoR*lfE? zsm}Ikm1aQ+U7xh>GfQEs)jL9@fUX!E=vml}aE^~GN?&33gsYPF4m^f{6bKjtFRs^# zwO11VyD8nt9PZoXIaLr2OctAAQmx8IXMf6g*^-xtDZN_9iIz&+6$WY`wKm(Ix4&hLlrED; zIk@uQ0Hg>A^Ti(nbLyqOt-tb+a7R19cg7@IcZPyKic$TJyhCyIUnOfnHo>F~l7*6! zxigw`WQeQ5sc-HJAl6Va(RuH{nb+;=lz#ytSyl09K|HUjUvRp#)9L#$+8Vg`vk zy{gxT+BouS@Aw}UHyNZY-0QLspNyCtBYkjKZ_|;+O%f5OBHly^W0gmzmIof>oWg_4QtMWKXR2@Q~}6auLY>P{-X zTY5OrT0dV9tkL-*^uw)6j1{R9l||WECA0oPV^8nRS72hVzGU@wO3J+ic~SAp;>AL_ z7<#o%WVo40;F+w=OwrA1Oyb%*eznZs89?~E9_M=Q0sr;Dqsq6SW$-*Vwl z2Ty6~Sx(8}h4Ufu3UTb93(4MVMpll&zr0;t@4U_8BURv)P`44-U0*7?%q{*`rxP(u^z9}zuIh-YdsTS7M$g5I&P=5(|%Q{?eZ9+ zgl^NDdYvbVvFe-;CC2%S^}d&tm7Vwr&{2F2z;Ysor}!=z;;`%XAa}Op$$SBHc=KCx zN4#qkaqLEI`nV&?+m}MQzd%x}Q?&{>Z=9x@vOnx8e}&2&L+i=o*^u;?sx8PL`o8xrR;sMg1IbcN{i#aIYZlM1gWBZE ze$<&L4P=bP32)rFSS0dCN%q!T5xy8GuPWf@4xw$|A}^1|Ro1LI<^TsQPVoMZfD;NJ z<+&JH(OzD4^lJq4(oYLqd0+txYhw^6GyW}-Ua4bnE3(fjC{5~OUyINZQhTP#N3^bh zulhDRNmoU=IQ<)u)TxEuki~PZ}AWpv?wo21%5lV5xh^F zs%gfU^x`WH5|U_s@!OdRkCzXiv?wEELYt(59!O=q$G96!K}&xr=!vy*V%6DA+oiAf z{d{ZBPKp-RJWT>`UbCFWuw=jeNAk@362QX0iVv!WhW2)94`LZ9Z$XQ=lc1W)cdz5b zF4Bk`9={j{_%rx55iZtnwdzM}T$R@9mqP!&tVsQbnaXL;5IAJ*)5})@q556U6M}>Q=+OwnK7XMS!~Bg+sbiywZKFHXoAV_7MXGIs6DG; zr@RnI*05f|-4ez%g{Ci@avdR@eae^kCUTS)5(Tzok^Xe?Eh03zFh|O*|5u+b^84Iw z%Q@)j>=rBvqLm(+yoO7bI6N`4`_}!O`0c=r8y~VP-se2cQ6MhgWKaxSWKmK1a@Den ztuus$g3jsYwfEgqAHGn@Io;H`BWF1qb)PQi%hqt(6wTC1+LO_WW`D^kK`Yy%XPSj$ z8*tq~RzLGys5hbHBAnd6fB7(!7cc&06u}*ro`U%OWy|f#mCGlpkdj{F_4@V8XQ|x0 zdFfpL|M?+*vO1?Qr94<96?qV-;UxpOkctq@SnYIk>1q(f{ctzng9J&2U#c;6>mAF)!puN^C=4v5x!`o2P}bV zb$O3<)W7DF(Q&OMEB%|qe~kuQg?9U?=i4&y>9(^Gqu~|d%(31fMPecg^V%V~=?#ta zis}8rp!J&l8pxR)pY2lI)Vddhq>;Unc&xU@6@{&jqNV}Wi5El8_|L(C`nkwtoOfY>dk1VX5>V|xJ zMuz_WkT^tV-};bna@qp;GxK5ka3g*L*o2R-0P~jZq6iPn|HixYOX@$t8t-`MY_%R{ z6)4N-A4XGe*f&6@^#Q$C$}I2tLaA|ZH_vCIy@$MMZhy;Li&@x!nI5Kmwrue+uUR zzbCZE;X!gmf^QBsmSjU_5a1*dqy=Cb?d??0-_=+ zN)=E6K@pIyw1`NPCcSs0g(6+)ih@X!-UL*dv``aDXo~a>l7xg1klsQkkWjuIeDC>x z?~nVPJI3LkL)d$-wPs(>d}c=opn9N7t*va=0Li?hpf3s0V_QyCjw=~xHt(&TF@eMu z4_ZWT~M23^sbgeojJ^Qbx;)(&Aydx^wk-bUEmN0c62>{Ci<#ak1hu zJw66UNzvMz)^G0<=xI_iw)uz+1mZvalWeE3UoH}5yuD+u?eY9A$N9u$OX7#kNd~O9 zNtmt=pyTlpoCJ)kE2&xT^~v-ju3F>z{=PeG8!~U{Udyww4h#-Vbv;qCRWGK1BBKS~6; z1W^2g_EV~|@O5;%Eb6!Tl;T;o4U^0@Sa@^GA$K{TR&jzh=)9E<(?W{IPk;&{9z9{c z1DxVi#I^q)P3Ql8G5Vi30winyeSGKt>&Foak_flvqX-4vPwdX4uu!z3oaz9#x!?#; ztXm0Zct+ARBgMWpOL5lUOkZ=2!cmV49zFDRny0^J?OK_JER=iQGQT~J_X^ph$)clp zof;m+5M(Y{G&))hX!jUw9W1rh^UHtg4G{K7T1cBVTDUJ`a0ieZE)=bCW~OZtYX#z& z8lCmOUHL;-fOB;#^)+@x`s_}Ik#?n9NKj(u$!yLTvSpLBd)yW==Js}k5N=8_g-stQ z@bUGPfLM^!EcY+&vbF5B`=2z?>>eq{b*d?06Y0o7!Yf;7C@j-_1u#vr{*9#}+v_3K z&AYoN20ja;;*7907zM>-vRmbkCs-IaK#z3t0;=PdO@uV zwL=KJkLStaE5g!`SdNKuHxZWgerk#hNZ-P?$(ns^e=(cZK6KiSnOOCT?%(b-WSC=a zVFYi;*447PtaBiSf68k#bklSAQc!GMu8H7>vgtgC_=caX7Y#3Qtns2vMCLOjIWW1g_UJL%)IAZV}!t&a$s5iuL~XU{S^QG!r=e=yZUN|uI&Y& zck|WQ5YuhN{)O#LFXS#2AXg83MLTVT%M0PI5?Qf0IymQlbfaX`M`WoOw+Fa!9UoZf z-166k?mQUA^$bNL|61Opr;pjuX0hhrK(Pj|EA^RENt|zZ-~#Al^ZLsEzBgg1E;h9j zF67r%1|%ho3Zn;s(O~^vDd_;IV5H_D9b@GgB#@Cz7zvb$ck&kQZU7p!X?f62?2rT* z(sRl&3te>`rlXiLPam)c)X%^Hh~GctkjAktBQgBr1)~rOaUs0(76LcT5m}f*$j%FJ78ELQz1-?|bc!{#be}|G{pNkuEszMu`9lu9_%ZVxK{|O)d zo2I4z_x16A-uS;ATZNiBF&7hq;TRy?zc6(&?&hb1%_~`|;SV(goF_$HvWZ^i-~t@k zZG=IesT!bejPYpksGni>CB-wYo*~B@6jO+CHii6c#;YdabX_gmiI&pRfqA6m#73+9yBc|Ez*7z4vO z%DYx$5z0BluX5XoAPYanC@ITwA%o7dW@L4*6E}GRrYkEmBUy%Qlo4r8HaN$~6$Gdp zaU(3F-yVu(=ca5dItVlqUIe-1UB zv7y4W%Wod|>*Dt3PfF+fS`2#ELn<-@{c_iptSBdc*;x2Apqq@xI0IK4I)c=rb`9Fj zB58s8$;2I|5>@nb=(x8DXV88T5&bupxG~BZOViEzT%)aT|-wIcI{KaU2Jz2o{&_Yfi_?_9_MlB3cDJ zE1#CFla_sHe$sQ?Tx<4knGD#kn6Gwng#kJIJbD>A=3-FTYs}8Up@-?*IeGz+pn;r9 zs5nIMOi+~>qAh}c+5IS{{14N~vd~ylfFBUS)AVYF)($;A@^2b7PhhmTc6`Hye1iE~gu+BMVQ(4D+>(W)AVwsCI1M2D9+uKsIvH=qR>YNtf#farv zjBrIa02f-#O&RIX2RB7Bzm^3YZ9&YXBUm|!K)yPsHfY@RH zDR`BN!Yb}k+oOxM>A*cs|1%3p3wbNb;JWD#05J}Vtxe6H!b0PJE+5Dy{lCLa-T$%G zE`J!^0*7GMcnZY97;lpx9B{m=Q4*B3#&!L_XIx}hFOZYv*B`p~;kZ5hOjlPl42$pu zC`($KQQlaxc)b1+qnvn_Tv4!icqx@1>HLEnm6x@c^5Q^1jX$?|+XwjVNu$1!0Ry;X zCsXyNo041gmetkMD53G|%3Ysk3#6S$(csY%$QZYO)M6A7LF4o4Rk_592KhZ{{SH2! zo+h20yfZEnqsj7)>6anK7Ywyjh_k~p#ADt#=S$$Svh>@4GVlWT6V_&x2nj=93UU#y ze2h9GYTCM%&VYP7;Slc7q9k~c%0d~~pcQ8x@*VGn|9_tdJM?69G7D6nKJg~_WS;V? zV1mzP@%<|JIF`EvWw&xOMv2Q~hDZ%+lfA4ZXK6RYDb!Qj_HdjG+tiH*Q$n z=A5U&^^u_^LlpltKIF`QkOlx#_J55Jq5iM&A$0#WK7{qZ=8=en{;zo?judCuVC?+B z1A*j;!&b>f8DLhPk3RkPo>WITY7*de4*DY({;*@;eue%N!@l>hB&@xE(0_xwHafIVI&<6_0#& zYtB=VahnS05-Kr()(dlQqDe;97mRd)^A3yue#6wdGf|4Qg6i!$_r=~`5l~LDPSL8= z@IPS7o&?>f_Zk$SEHTFMxd{qCOWBblzI*nc?SBvzACnoo>d~AHg?0ZVqQf5u2*3xb zSNYM02eKy@$mh^H$q+{cy`_-KVDjL)osVl7jM}u-sIvH2-^f$wg6^}-P+(IfP!a?K zM1<3r`7^_p9>VLrAq?HzInT)=(3<`7XhJCK4y#f;07dIjDtjkj#qy0%4V!8%I0eIs zGUrPBU#H64(T#Zh$+5YDd#U~nx!H_i>@oEBKQOiOn1tBS1z4bk-&J$WmoqQ#S?gvB zy$jGVz=9KQkdaOOl~&ITRyfuVIDWc&e!byhbNDWKeD!;2nY&90X{(;B@)WD)QeuB9 zZKQJH9|hI?3=8S8=TUCf`P_)o3uIW+eA2#2m*Qm4vuL}TB; zz(LqON&C`lUORZqOF}~*EqPt`Ds`57FH%-S?EOEmuH8!Pey`VaBRxZtbg)an`So$~ zC%<3%PTrpi8of4AQ?`pKho~2wA74rusB<&C2TPU&2(MPXA8tIwy1m;Kl9Pe2L&3G0 zR~2InO7wqy>dSNB5tZiEo|PIiF@89G+On`p*G$nS#AJ7LiI<(r;MY(bi$@|+-TFO?Cs|-0NV5!rs^stg<2~KG!dY>!^c4|D z=dPZQHLCpE8NK8Nz^C(w;G`HX0U3LF#a0D>w+hq?wmd(k{Kz|Q+A(9V(%ZE7;`{&}e|gBaT1bbr1WZq7*l$VA60>u!(+ zzh4emR|3NNcP2{>447>I=W}lfkk^z8e2SNrnDW2GuU$DSrGIKgSD$)NWyW4)V)PX8 zSgN|7lER(*{J^%f308Fc0Z`yReFFLcZ3bW%RVUz9*pGHttk3ub)GgC9rg!3BWi3{j zH3sT4GF?n?Ry}yLhfu20-#P92LTMb9-j(F|!~Sfc`Y{Vz3->`I8$&@taHC4AFB<|< zFTooRS0o##IBM`kD2BP|{T~{aw*Vv`Xwo(CjCyk~xhEJRJE}nbMk}Tgx`UqNPwE;D zc7cBr0HkTx&#)#P!Bkol>`&7bdn}a7&(VD7I-uq@-`^Q|bz{4c?D?s6ksd-HlYOwl z^Bpy2_5S8WQtZCDlK#!#r|b5W>+kpeSeOjX*HLAxdfY;dA$BOa9`e>PaDnl?U(x`p zr3(14sTb?@R@U>sbO@EYGuHsjaik?`#HZBydiQKT|JLNe)um;rDM=X=itpNKuGuR1 zor+P(TNZC%Y+{l!9q*Bzt*Vw8aI>z`^19Ny%s(x+sE~rm_XXa_lNT?a#7AV8eXkr9tx>YR}CX`2@Dk zOKH=g=I5Da|IUGf4TnkV(({A5ji-=5xbl}ACujzqRZ7A`wV+@$ILM8it!fWV`V;r5 z`e4Th;+tcBhHTGS-Yu^;MBZH)21thy&k+7&;bR2Z08yD`8wY0TWjFX+8ZKLl= z|CyNZJm1dN7MPWDsxy!1P$niOhl1Zy%gquma?MmVR^5>o@NOghzHPc_(b$XssmGl0 zbuTTnj21ZP)?K#aRN3V>U9unTC$M0=xiGhB2&Z1f*l(Uzk`x-SsK{>3uA)TxgV3^k z9v(1w#pY5b02TyHzh?eSGhfvR+Jp`@Kp)qg>E5)kzK%oQ4kl4P*IpiTpynYE%{|vl zZk8I)k4OMoDvCmrZi)DZSVU{UYn8^?otP%L@k}+j=9ak61i|Q@qD00Fdazdm6jLuK=c6^gFzl2;{)Yxg* z7OjKQf{FJtt;vn~H@!Cy5{F)`ecq@Lpa2`t|SLGC!&`Af~`2Db2XYGP*YMmagMj zvKxV-CKY(!P5c`B@tI{{=hBxqTBYVp6WYv53F_Q-CvT5L64R3lbKb}|NYQsWaLCRS z#yT%OWXnI@!h!GAtPGJ!U{#i!#@SAP(IsQaJ%KO1bdcEshqaP;faPm8gkrC=1 zZGheY-Ng*E>c4nqe@q@X*NJ*Vh85jpXSR0sldAdd=8{=&M~a*?!(` z_jxe-!)YjF{H`HE1FVK$Ndi0Mu|k||bHhv>3rk#WgB0vXSXfvxlLmwKN^i<}4{0%t z?V@Y6pI#!r31cebtCp{G?L&MXlL*k#t8du^o9_rD?X8tS`aArOYClm*uA9Yk8d`#0v_!OEi5P(q91B`NJ6|i(m~YX+m$#@eD5Y z?XjG(iN)Q2B@gx|UZU&`J~g#!6199n&0FEPKblZj&3=#gFDM4>uO0n>xpEW_t9$ct z{F?^Q5%jk>DcT*^Q2dk|;P!D$bn*eyVZe$Db<>TPMuLeKw zlGhXJI!L6u?Crex)J@ys^^y+@OIA`!3L`+~s7}{ZO&otEieKUJGcA?w{ZU6YpZ5F) zg03}?8W^Kcor2*?_7nH5Gf$D@28EvndNvl{-;@h{A%&JUQ@**cLI1<%H2hgpjpFiN z7g9)`qN;E+Hm#3rp z6ezL->9W1Ij3GoXue!RENm=IPZ^>3-j_kc^ukB!0*T7rsmsY5$i_kM_9}Y(N4Itq( z>zvQ+%j5L7ycoDIXgqC2a33sLpQyRJ>M-$Mx~S`3x_gr?!^@pXBU}0<_~lax={m)m z6>ES+0IbFqn$5jefft`B6tc7p@T|#O+Nl3y>cGUsj-6%L_b_)87AkK(PGK8u%5})w zZao8JcY5Vm8DrTOirM>sz^rH(WNJJH%XO9_-W@1;aHRGJl;rRa&Y z7f^Gm>ngKP!3@?hwG(SQ^TusaNSF7IGz@FomASWV?0#Y4gHQ-s`#uW)q&G70-r5&k z&!sK>H>;b4bBn`mThO<;Ium@V-9D55vgQieMP>*Ts=v3sz9AjH%McF$GJ7zekxHE9lAQ0nA*Azw!EbRIEt(d1e7lALp(T$% zO3rQ;W^dkb4IyeB5BZElZ1Cwz zrz}2wf1$Hh*8IrkwfC>Mv5{)8VBX*M6Ti-NJBc~Aa^t263PIeQehBO~FR!;A0lp!7VZZ)!%l+_7i098KpGV)tfFdo0( za1Xu*2^gEKuF{^68f5m926%|6U3{ABbF|p0T)$NgODnCib)YO6&cfoj@kv0E1EhXk zV_@B_=#@rkz?y;%X)F`p9_Q*5=>@8a{Oj`wZ19dQsE$l1$^&wkIm5xGMZj2>q_?Ul z2e7fR1&VpJ7JR}}1(>_+Lr~~CgiIK$p1 zT?7{6*fPa6TJ#+qseCu#A{Rq*wOru-=bKV_)vo>Xyxi}BJ9eNBw=^W2s(G^W($H;H zT={ zxz%C#H@hn;(z*sMA?IOKXJM|t@4|eKDzwFBCP9M@`1y|k0N+T3K`qZYzdZJuU>zW8 z4@xV@+8b>NoFphJ$K6cP<>gEo%A$8>f6OjLUj77oaK~po2Z3cH@ZGHVmZP6qbE=Ye zN1eWr=vNaH*h*-r=sESjoN??*@emqcNqAVjsmdTC?JW(k_8GkE4;3g@`FU=uA%OCz z;Yvl23%atlCNEEiHt&T|f}v%IY3$9%d?8!PE&LADTEtdYA6JcQk>}W@$uAaD>9jJL zswmHG8-%lRu%~tg?$4Wln)c}y}fP}nK&8nhxe`k1pr2K zb^h0fs-$&OJU)xfcfGJgQkIg_xZZ574#*<&D{8nw`xA{kTh6Tly~OVcqW2gXXj}t1pHA< zcpGb9Z?pBC%U|5O`_+^F0%Yct0Fkww`-Q=pOWr7`1yV{PN4|A0-pK(sGV&Lsov!I{ zSU>|9knIHy|BYZLp9MseBH}dN3XS_&UO%r?C?%lBj}$Wt0DSR*F!Jyz&?QU1&!T|d zs9d~QumXW1I9g^b)++b&pqI>Qxd3_U>Osgj`-Pyfjcb##4s-Lsgb;;^qS{($Z%eKacfh1EHeA2Jx$IF zH8q{*`JeiP?1H*I!Qhg^Zq6Wuf$Ya?LRU&kz?op0D>dY0w)Pk6gU1TMB};Wnzq-;6 z7b|%WnbpV(9<4OYe|p)QX|WX6d7+v~X!o*ALSKKhUMbxh>sp|_)|C$=%eu?afP1g> z4qD_FRYm|2VS3LQY-X#WH%;5b3nGKhqJPr7jfV_qrki&4(1&c*ox{KT%EozVhjUjt zZkhGWZJs{h6DT(1Sby*^&_sp1Ko!2jCZu-(4q2Yq@m!!h`d9M$Z4B>}-({bZrC142 z$d+Mnbr|Sm6qKMmn6;VnTTkNoweTAr?CJEgv*4S3uAdweCg87GS|SboQ(gj3s9M*G2G{M z-1wY>-u^1j4$vlB_F&|TmUCK$yt+@Vx}r+ig}x!S#e+3Y}UR&v_~i`p6rj z*b2i^-P7<5)Oy)&=4*))ze9sTwUJ9 z<)BI0MT>=w-ph@A_RIYp`E)4Y>5SZtqf1}S&CPZ0r`o;tewrP0d;@9WOX$qkyHAR_ zT+>iyX5TqP-3~54cz(rpl?vQXMTb081t%Qz85sjKpTN8b1h)il1?J%w(GHnuyfYQX z0UQBkQlpgd_XqFQiT_r^ROnz|N$`}v-h zuPZRWZQ1D%*W{-mY z?EU1%BRthXF7AZ=VDMxoZg%Kfm=52AgAoUFzb8xt?o*3gVd_{{V4V(;FFRubHjV1* zvjYkUTF1*&s)Y_ms~il>Am0%iDg$f__;0926S(Xk*v)aNVm>dN?`g_^Q=?68KR=#aVG4|I`$n(*WgsrI81)^Rei39s2)&^OBUzJ$S z6@o?>bZl%4Ek)U(#n0nHb`KS!j!z6+-9po!t2j8sao*Ax%$w`4E$=mT&q?jf@$V?F zomY~pa<_~CJd3{H4If*+4tYO~!>1``@QO4J&M}%M%0g2wQ3gdq8n;&_@O`({v7Kj? zRx|PQ_xR@l%1z6)SB)ina<_FcI#QGR{w?rVi-jWox9dIE!UH$A<9awxj@MN%$d)@z zvRJ&0&Jq8xqAXdpta#BEx=J}`934|k`+9rJoA1TR9@jJ;?7cAtN*Du_G!l}Zq9ny` znZf!0Rt83aOFB>v*tN{sFP)d4w8Cs%lEX5(nw=>}d6hKb5%frjB_1ny)Xvjy{aP$O zOz}YBd-9F@GXq29Y}3WutvR6}`R4r(gDSXqh2yg|^Ma2W_Cn=wX`w^pP`nkEKjzRN z`eOhw3@xBv#VtsNkX7AFsQFHL(=jYM+A>KkwY=xA&7^E0RHB1cf`9TA($Rz^Zq5sG z)XGe94ooQeCQSp3Vu@Fai-=ecK)tuV(>0*}z?(oX>;C&V(y`SbUsrKldq*%*h?Nzx z1bLK|MG6YtBbu)Fz!#Kfx5iegsv7RcWlM8K_y-&Uf|9aK*uR(Wa(cgFl{t=Xy>&bC z+4HjuDmtla^<>4`e^mp5WLeN^YW8y!Usve)nO6^6u`1J6}iA#kOR*Knd3$gubkbal!=s@Zx z^;4JSTVY`+K5J~|Kui7QBuRu}Vp$xVk^qm$DVNO;MqZuZ@i?e<)5eYr;<5!)7P_%t4fxONr|z-~%Zra>9u*7rj@% zS)1HX-l}%{^PR0TTFWc}pmJwnf%6G99yUbRce1UljNm(D8aSZA<>6p;nxjAaO?!DJ zKVj1xGIPhp!P)8th`-wiR*OUS_Ydu9jK8pNyF(^(>3PZrEg*I9MA^=83om#0V*+9| z)p^e3%PWTIiI-zli=SF>lZg3DgW{&+d3ZD34x!uqxPxiVFL(v)X}^)Qio;bNG&S^} zvIb3DtR471T&Z59x22KVz`~xHL@subYfvCry@)sx8k1KBZ3nfOLC(wRZ>Gs|@LAjd zXFo_Wu`ub+7UGl&9(kayQL%@1LVC^e{2lt_q)Nw^-RSmc-vP0lR%ED}S$ zLul>v8Qsxh8$%eWJqOrnYM?M;WhZcBWCj-&U`R}z1zd+&v!}VeNHuUNnHsZ8N0^Y1 zluw?N-KVTqJR@b@A#3_ckEpfsmiH!hT z^`dVvkuG)r&G@tM?qs%!kVP=V`>D{D^Zot(y>n`Yb7i%Iy|eB7p0>^%G_LeAugu61 zpyE?$DRh2Qlew66lr!6%_u4fFqPFMU$O7Qz1K!X7mL}+s3lClHW07rXZoWM}@!hiO zZl?LpD5#THkoam1uoG1cRd<0DVS9!l>+*6Z_iZX&!spl}1}KROa`cepnW5yM(wPtz z=_`PyC-p{?Bu%wWmi|2Tx7pnI84>crN%gn^sDRZeySNSyzDB-is`FW0-+*tLHF)Yn zv^08wft(haGOuzjWd$2?$V&4$aIz#FH|HiizngzEIjG*+XJOdcjn%NaeTC;=DEJYn zH%h;}QquR=L*+$@8Gmw5!a!elz=HDOYDQFQ`9WnjP`YOG)0^1;E@AJ1%T=4w>*UZY z#oF!)?PuPL=e2jZ`z!nS=N}vY#xK3mS1Z<@00uzM9rqRDySQ*~z(FV(%eJZNNB9D6 z;W8ZqZ@!D%Pikl4Hh-k2R=HbwQp1;;nw}ml)P%T~=WiWwR7S{KU%dJ_xK!&h=W4P- zg#X-PeA~#Iuf4p^$)4k>9xHBntdmV4*29^Ss&(R_T%XDQ2i9V$08m9SM%a&WZK6R$ z_rv$)FVs{-mNF&_5{@&0#2x$ERrnvCL`wW*{giSVEKo!9nBZ;?6iabC|z+x;#NqH#jN$@NiXu zl2@bhOW^JJ^YEBTUhKCBu-1&mn>a-uUD@4VNbFes8_n8A#Anysx@k$3p--@HKNCHd zr)lQmMGNQlD}$FD-5HwRBg*>=n1-Dl?PpG!=$RCO1z9;nf|$!E(=cCfQXGb*$-OUI zwBJH%3%J6dyL6y|x`#4??k&;}n1n2o4}g)Lih8NvhCvGaV-0Y)GiZ!Rzf~z<<`Ytg zi+sK})~q~`-q%G1<}w`^)Oc8j`9_|)7HI!qnf+1LtDq9&Y)*?cJg0yEZp(ssPSF`t zv!;%48jWhG$J=l>lVAYNe_t)%EIu;I&@T8k?|L?8GNqO*KTSZuZ1W7I$WVwLF_t6c zxS7jyw#z!itmLoy+JatTo=J<-JAjt{<)pO{KZD<3rM8&}himW_6k7iPSYBuV|8Z?y zk-!;-KXU5jkeq_Jum*Z0bcqHZX}8;aoGE9atAPweEagZkDEXZ<%8AdEAW~9Nc{2Oe ztesRPBtA9o^&7&+!zQ;TKN54ffg=?(-808wS#vqBNd0DOw`n(aP5WF+o3HL zONCn1UKg8-%j%j1@1`fsP#$^WHiJ2XSV6z}D7-+U77TWx$lz*$nh44T7mvmA1TrK3hKWEMtN!w1yfH2z>Y(=G zWbc)Z^Rn2iV5AP+#10I}j@+GSn3zGNB++l~{6d>x5~Qc`Bt%@n zKt%z1Pal-;h%niH57z28XW?Hu<9DK2a>kklC|yhgnJEUaEm0~3b;Q3XOa-xYP0N!_ zz=XdR9#b}sKkk&#cRvO6@82;J7>D3li6 zhDSy4v0@mxE{hWK%}^&=2_~!SyXzKZ`cnPn0&uPrQM zG;(0dGP9gU=d8TL#EM8mjdD*$>E|mGQMFhc4yUC3=7HRI(GOJcvu7}ZSJU4EZ9f=4 zk#x1VL7!c^W7O`?9IuFh`T|qkYtU5+|H|kv=zj1~1Fc7zeeNHuV5oiZQD$RC?wEx122I~QH4X9M$9Mhdf~>HmAXCZu3OTb}9al`0vdv}# z7&);fG_k+7lwZ&Pfr~(YcODYAQWbcph`)Bu1^#=auL7_?BCrOpAJ;`@#sOcF(*Wl+ zBPkT6Z1JLneUmm9J1U^6b(u2{c?;1R?wdDHAjdLRq>m*-Fb?E`-B|iPiC}|W zh25?TyVs->EZ>(ZFj>59tmUuxR7>t@7wS~dm9jldI z3u8%kS|I?hN`Ayd+o;V_vY!Y7K>Px0WS6ILd+WlJ%Yew>ba$y~f*za$-#_R(N7-l& zOsPxlcIfz?{dQE9U=Kam>HQ`iCd3-QUSGQ#vZe`o5s)GH^+yOHNs=7DQoJHKIu?8o zl8RFAoIsYMcwMeHR;L6AE#sw=&!6S5PxnArV1Nl`zTfx~Dn7FiR9`p-SER+tYLpdzDToivH# zMIIUhya6=SA=7SyCj2c+ZiKPyVy|DP1qWbc-KS1e2DG&9?LqIIdF2n|QROS$lQRz2 z>WhXe9`-hX;a34cVH|6E$x!yQ#CrS~D*fn|!2seicpq_xyc~+J+Pk)^V7JvHWPI25 zX7`V4&ifsIhRi>Ox-wNqCWXxGarpBIhrINzTsT$^xof>tf`4(dLc8g-oCi!K1a$-} z_RQr7ycA;c=X{jfWe&gcyk6((stF(vM#n@d42Doqd2K%_aFcj2j&J_v&T1ROe86Or zuV2i@v3Ten4B%{mpZ$HYN28DJ?nyQXHU!{2)-n%P=Zs}plKCU?GY;Pm|M2N5_z6Ev zHWy5-&vT#J`f1C{AnzfYF&N!6fdyS>tqjA*oahq@w8pY~{7*~T6oE2QDG+=9v9gPk zufjG?fNRwjgwOKDyOou!vu@GJ=itDEJdUd$-r6x01ev&%v3N=1#BF@4!v@E)zbCs$ z8Gga4|NF96&0pK0h-EHP>wVdIn)M?;#+EyH+b7u=jNIdEzgTE;XeI}@#ID^ zkRO!aM+IEfR*tY5ku+aAS-9Q2`Dk0gucFt4G>9#-g%*nNo|2b^(i?z$vtb>9gHTS! zc_G{oB^ww_>&F0`fM~}g7w{xzaQ}R!w6v&yv!B%>#%8u|h4on7&P!Gz=&~-r90dHl zZXphpt||=*)nVM33OWbe<$hjWy?4$fpwGr%Y?Xz1LX8 z!N0ZGvVv8E^Z%Aqr+@Ry!3A+i=imYCvH4_7*{+q}$&!I^!IvBsda8g6XD}9a>Wx=& zYxhVkgrnFT(D40+>K|PmMQ*~Sx6PiOZcFG$rMDhfiqb{t4ynw>{x8XAkPm#6VKoT2 zi7>`O<)9BH?zkexMCUTQmV@=&J==xshp@mA_LEeItX@E|8&7E#b@J(Hhc;=JjEE@@ z+a&cuf-ot$yoibYhV4bG&ni^i?M1^0R$72cwcSxo+LjbVg;5q>8(+G(ZLU0c$SHrt z=_RJcW9^4t2uRG#w&4^`WmW#E^SAukW+@mK{e4R4;`rv_Paq9V^OsqblhR{cH3qiI zNKSOV*TB^dnt1+Vb?zJF?ZcM46%8sgCx070H=}i1*|xnD-V51m1{SSPG0gBTzv+vnx%i+@-l4ab@#%b&W#A^8$zP3(h zuAgCRY%dZ9KpY655U)OGFPO4D+Lj8BlikXRj=B7?GQ>jCT#w1ch3sJgq!@3RSybxt z5jwgmn?Ao%+GZeDX)e}UTmz+FYI|m+LN6+Co#PCf#0`-)7zt%urkB{JO#SX)DZUb7 zyKwAk#cvRO#A(iy`_tr5x~=0B$`y)L>1>E>hyZ<5-@-8#2u?hj2#`q|)KJtOVr49# zMOJ(WrIYMNN_`xvS-KOWZB6{Oi$DIx*)Tbm7H~M2*YG1ZrE7Wbw@cvZ2ck5*5h?aO z_fERHv`XV!hF@uLh6@M;mww?jYZEw+dSz-oG%p>c+xfeXF-$VdZpYQuB~^MSE)PBI zIQm&bn(04EES+8kCGx~)S9KhMtkpKQ!XlIEucf%Axo{b^0Ts$=*oCF|irSN;^e@@o zS)E-v$aqmLwOjGRzSykePH17f=?&gf&}V3tT9~N0NReW6xeX~&d>#Wiaz5zkTCS2F z!ua*f7AQSE;|2hV{H~+(ya}Ldv!h(v)^6Urt<%ccs@&hd3ybh~92czwUq)mXXT?#w z>Q$Ypv~L2Dj!w+1x9-~-4)r9Mnd)bz8dBL{R~6gIN&B=?uY5WdSgP`ez8^yIF$yq+ z$nG)z^sPkm&cPTe?Ux$SN9*Q>e+2)zrqC?j$;R@A=DK(v!kjx-;vw#WE)yi@!tV#F z;%2>CG0)Bh0$}w(z7@xNtI2(NS}Q&t%E+IGxVxXsENxGq(tp-X0JSzxsyMy4uD~u; zDQ85TbGr^-4X-*W6#p4A(to@&YsYPns`=fMj+5#Po19)*f<^<8QW=OT?2K^@szXS>61kC%cpmJZ=Jajf=saqp z(n)!AEJR{eR?d$5lTLklWf3IT;aKGSowcvW(n#t&v~~NB(=nYCVo|ZGD;GgxE}0%{ z813taF9B`G1+02Uos)n3fcO4~OVg}!a=Xn@!)v?)@ve z96rSFoPs(b3h$EJt^!rJ3oG1>nTVCO}^s4Q&E8!Y_7>j#MUVdxS zl{ons;iVepH$MSyAS}9hBrcgP`+C*;SH`o?nXCdAhbVqs7JHCdzbO4ZjF5G)3U^4* z9`-S4qEujj%n(x%=$6mRN!snar?MOxkRN2vhT z_kto|GhZ2c6X;k>1((+oHEEJ3`cMHhGy{jq$jlpNIeQKe2GW-mw0Fjj;CEkn8i-~E z|I8l#F1!13oo;7l5!!ib-AFjZJ?6mL+J7hT@b|O(D!!cT_ZJ*G`KaYjpFbzP#xw3 zhObXXZ|@R5e?HZl4b`Q6oz7&_#}UcvMz+UcbbUsfDwwJXl*~*=X*f{0)j#J_R|2@n zqYfI`BZq4pMx(HnEB)$b#-5!PD|ogMTZGS>mT9R5nu*FIsQc*p@Z)u&Dy2NR@rGh5 z_Y+b}ZOqLOz=5Ip-SQ6l1N~RUWl^52)dXE!FA|s{{A8 zT#(&^nZMd=UF|nbxTAuDB&KxbTf?>V9dM5mKkHoK2?Q|;T7WG zl4b#4@uv5orosQB?%G@`b{Ikj`f)7-40=TfzRE&c*4f+oE+?#QLhm0-uWD2|tYiNL zP_jQ)Y^HRfN%dE>PLi^lM+FLWE-whh+?Z(VY>3THr+ddYgFk_Q!yrCA{VjR>LBth zbUv$#TK8?Fg^10`Z+0Rj|6PdvsOF0{==&?D_PEu8iOGF&=SK=!7|XLmYYy%=c_aKF z$rBj2WhnF>u*ufX`S2`fB_>4c$D?4RW967403u??lhGpg{kBQNOsj)EhEOhKBs_}W zT(94IJdUQ2Z(phBIrShFsg5eZ;3v0FOb*N@(7o72fAAfUsX9UC_SPq%`Nev7J|{I` z^O7He#D68dm=Fczq;Ly42&Snu{$3&-H7~mU0o=Rgj~o_d=s;aX9#3Qu1(2~l1~*Pc z!)l$@xt6ttg^+{4My#sbGDik~>5q2UwR1nQx|7O5&*UDhe-6N3N{DF~;#e5c%KDXn z0O-R2SDXy{x#1e&Js++;LTOrggD%NgYj_Ly=+(vdMY-f{2Cm*RnSRR~%dm^R;%Z&^ zjc)NGSc=;~I;Kt5FzU!}qXiWY<;Pe7=r^5)ZdWw%@eVdfq2r@QLBgD)oAWctC$FKT z#i94Kt4Y#w4();c?9$UFD*~W*8srq3!piSsn6NI`qoP0_Bknf~jJ2149JDFTf9>FT z44yQ=t?~H6#3+BgSTfjA5cqg=IZ^unA~nC4ZmJ~6scSG+fMW@?+g6oUTZ#&C{C#-Q zZ-2!H$2ewk%ao^${CvPGLQDW4TN{*E`qv5E51`e+@>lvhrZakQ%w;=!SrYYqkMzNg zQfDPxE=EBVR%M7EY1Q)t;?=a07Df_z{FZGTPKxs1r`5nuiourNYgds(JAR`mzXa9u z)~7qadfj9CnM}&Xz()I*-9clYpoV4vB9|D19t_g2puwISs|y->C`aMsA2#=`llmX> zTnE4rY_OR8@%Vk+s2_#yL(H~VN(OEoaZpb4MqTBW-VvgIC`KH8dKdv8C546_ zYIK6{h5U&__hD?-L?KP{*<$G`+~xgRbg8?2zy7>mll4VEw^Jv?>n7x6<~h@0E(7by zZ(qLYk8|=RmxXmHEDF=v>?INC#uam+1Uip(fW zL9md4MM(;&sNO7%EN$SDDq!>F%@#q(WcNpFb>L8<57RtxEJom-`lZSjp{{^)$5_b8 zUiBf+r+6-vec(5&Ug%|~q;Juy?DjKrz;LFi_^}>|^3QX28#t8ZL@yG~d2YvwkzW+5 zg_{?70_~LIh)N~gW3kQgsSV*ApL!$wbLZI3Nx+oQA0;|7H+d{yoyL-DLx%xkU*GqE z0%j}AoEOeUzI%4(!a|{-bNwrM%+F@sZNz@e6${_BFW?-nwH*P_-N|Gnr%p}%Q+b$> zHE_E;=7w#wY71iVZL8EKIR1u8MxzY3mxOal1R4+le_eF$$Hzas;I*{*qj~5oY5-{8 z%e_8gyD2C-vQijp&>LO7M7#Dmq`0imedDU_D#(j)g8KBBf6OU&^Ja*I!oT$>%h2hy z+X}HqIe9!ou#zA~r1#LR*SAH5IYM;TD@SQ7@t8XdbCAo1=TL8f7uXsjrB^g_<*z92 zb~1_1aM6&o1eCAI%yDFwxQ1`M4pW-HklyWmM6b%7%U8-hu^2ne>077R%|oRtKhU@a=&DX?atBT$v?X=;SFp-VOHna-wsZ?~3|2 zA7m9&VwzfCh*?-`Ze)gQlR-0hvsT^LUg~9y&94l{WAtkyg6LcJ$WS`?FB`O9*E&Yu zUf{$6h43YgKf7`)lJxBUr?cj%YjI#*6_8)==!};6^3_ul|3v?Y75u#O#V*)X3ofy$ z+028GbLg4IbfhVcBRxiI2BX~Na&eZ|te9?FwLwNlC4X?fKiACT@^ZT4x6)eD04bz! zWikDwpC;4T%_L`WOxrO+B_{;Yf7R3&=6ffm1dX~$*40)w`xUpDdtap(pR1a^zmj^# zC}2FOY5uaAPpx}{#1h)usVvaLb?Nyq$YC;OltU`@vkp&1^7A}>@WHq$P`xYxS~ihI z8tl6_TmfrZ0AqP-)$X`q?I$`TNGUjLh@b+{nwtbo(f0#P)%@(qjy1X;2SB8x} zX3+!sn*pS9j5>C$jEdUi{nwxAnpFQ^d)NAw^c}_B)U|Y`)sk{v(nM=Cr;i#>G9*pG z#7mkp@3YjrU}!30I-__&(?PoO8bCe4cY-M{}Jq)HbZ8-On$Ju5f*wGByUP=u$6!oC65yC!fy~_c(o; zt_!Fz0ccBvi?Tf}Hme2`7!{XE2i*2XBfGLzH%++JfGmGSHEQWIF;787_l;Tz{dBol z6~rzFZaXF&q!!)7s$D?+=lT~W-ME6eHordSJxs?pIwtMJjHLLs?|;%06s40l@G$1; zYaVc;N*~46&wes^GFWPSH}EkH#mNuZe)I!a%rn@3oD&NHx*uaIs-+O43f8ITSUo|bpa7Hl$Gqqr^Bj$DiK3k zTSfj8z&zQkOs=l zth#<|cliE%$#Ds8VKwl@R{X&XjwHKN%Q<=VT9yifUkPL!^!V$ZsmWydJ0D=K?#H&w zq-Q4VH(2YTXF|(@b1?;Dc1OVdiJ>GBakAwY93&`>`9!f7Ksla?42?Xz=ko4*&vKiM zz49L`~|`mty_H@60&Qk@kp6&eXle*CZB6#A*5G$4721~TiDsL zenj)^2eKVE5qtu&19BpodpptD-ji;m*#D3 zh0VrJ>}6t?saG1RVIiqjgojAPY z^I^3rhTIln2)W5GrB4wstqoJNW)=tJ!+}SD%I7L%+W9Xs|P64Qk5VNHjqD zxz>1~eENymHN*xz5}Dlk_QmeVCi6(m>30*>r|}~t!;9dTjD^k_#D$87+mLJ4Kj?QB z71~kdDgEO%4s3ra7B+5kv`ex$+iZt~44I~sJz6uHM|HubdzIu4!!OMd2p781(M#v`THUD>o?zc?IX`9rv0XIH?S^mZ4ES}* zj&1NwFF^_xM$Ar|$#5WRYBcN(?K|rss0m)V8Ya;2fqG7+P#=d^3`)-8Avfp!Y(Dli zq?fXmfjjjl(b%H<@^eLj^<$XRwV7cwmP^m~kk`$k&bHi+8!A=Mcsk;)vZFdz@8TgK zwmc1i>db#-xIcn@sOmE{?H|?b^)@FG;x?z5!*8WR8MO6Fm$;R?JqGq>5nLf}9U@^9 zHY8@c7;q^@7pkay`?<^p`O$>6W`DH?my(}sic7^BpXpn{^{NKrgY7!NcBjIgj~(1+ zc-#w}!u!IsSoW@2K5dn^d=-`-!+=E1$&572fJEp0W}K3Iz~%JUcN~%Jp6Hrwyoh$$ zw}E*JV78>qcFaDCp}6((p@<)1WVoG<(I(B^NJK(JTUuLQhRYO;u2oB0U}j8{{x&m0 zh{K!#@d!w-<1<0u5d&s1ws*)OU{zY*biVEdwUi>Pg)&J|vkGP9M>$2j$`(jv|BkpPKOc6xjn5-QQ{kZ1+ELY9}$Q2Ndn17T+=cfN0N0Ly$od7Up`@8E>n6PD`S zVy}morRNn+;nDJfvb8F**g_vXI4i~nJmQ~-qVsviRN9+UN=D&~IlfN{&1?jQ_{g;a zU&m-&No@wcs+ifJrlsez&|L=Z?KYK*B)!RYsiP&D6=hVgL(;zNXe-dba#v#F(@?&! zSYmLATLPAF3fE#;hPd}!_Nrr3&Rr_Jx-`L32RGw@Su@m@7eBBn(7_yNU$InT-k z?6VMSU$+n?(2beOf6>aa|Hy;M99KnUPx56g4%~(Fu|@!NIsa`rfg0a`b=$%J4{B8X i(~S}TWBA|1a06kGa_oBI60<>V0Y}_@+-R^65lKWrRCt{2Tw7=yWfVTMm)YjBxz}dX z*80|}r64{?RV;$O#41)3TD8z(Nh640AGG)&rTP@5R8Widridb?J}LF3MJ!lF@B&4o zzN$?clFj|nz0G*Oe`b=&c4sm>+nxPK_6z@R_A)#F`Tp~t|D5yBnHbgKh&nkgsFUM@ zIyo+=lj8zca@tdyW0NC)<<0*eSu*6h%yMpl29-M0&2F3|8!>Zp^R!`oigx!sN!zyGLkT9xU`HW&Ve~JP z$2!#!W8BO#b1Kjt*AdQZVlNyh+2@-=0c|DW!ARb_RVPi0rdb-yMV&d^It>DXG zQD}B{UT8k#89H`?*0d)gut#LLC%3>!(i9%BD#7@|#$YOiQDf{t{~-tDfn1Q!{HVLs z_npWQ??dCTD#7@cvN0y>QbVk&Hb9Pqx!T&?k&-;DK1cMWhZTUDwj`6%FIIE&^JLiF zq7OW*Cms#RG6OJRu~>{IC#UGW4^9j1VZ$xe+J)YtpU{r|d;6)K4RJo7FZ#yn@MT?b z(pg^KPk;I)Wpg>9MI@8U%!37O;nj$qeY%℞l%<@dlquk1mW`S62t+OmZaSMvxO{ za*Rd9U*~+1qwsXnD4m{^UUSe-zlPBlIht0Wrlv;WaauMg#vlv3 zL!m=e$+4ni%{0n-KnyLP6QP6ub5_?No9T@;iG)Zn1(zISZ`hnx3Q4$H!9hf#Y2V&{ z>f6;DXyh(5mW;@zv!k7IxqPtUgBKvgXlrfZ4z|_I<{*zF-BNA=o%4}rx^1W=V^DQ+ z6q%#;RZx$uTp&F;aONtB%tV&bC!{B*xw(lV73^*-EG)`vko^L-D#w=m&9~mA@$@9c z*v3;v~B*&Iue|d19 z@2MpvIl{u|#&cU+D?5`5q^hbJ4tP15$>HzDV>Q{DsWx;m`j|%PiAkCmOH+(BNAqYq zV7&3&nrzKf8-}Zod{C4I_CH6{GqYvqtF5h>mX@UNm`+M^07JM49ei=G?^GxB3|FNs z?dQuBTip&!O;1;Je9g9IfbuNVBp}|E6b@Rk_SeA;0i1* z-V8Q;K&-Qv$fk{xA}Bl5!Rt)_=>(BLbFjq7t1 z`K~gBhYTn1>+_$`U7I#ih6l4;_`b3Wqk?N+R5L#-8!(92%rp8HaQJ|e-@KWT`m(n| zAzsmTkS}tq>yuO6>qL%NR?We-P|@|qWx*pk%fBx2EUYbetnH+8pPeAtp{jAw-<9Em zH?~$MM_GDU`8J=dpq)HA_to(F~uz8!X|vFox?C(-d{ZB6|??I1fy!) znsVOD7#TOXZ9wTCD%?=Wg?c5F<=8z=C1l$!$n9X7K^~Tini?CKngWCvDfN9Pa(>{p z2gO<_{X>OY|E`_X(a|Q#a>7_W17ecNCK|pmDk}C^E;5VJ5ZV4%>KG?-&T!j6wQ zNUe%A|eY%L1?;Xd11H^gn_d pF+i9`KXBB^aY3CN7u3md!GD~_UTdAb+vxxR002ovPDHLkV1kEjrIr8y literal 0 HcmV?d00001 diff --git a/public/windows11/SmallTile.scale-125.png b/public/windows11/SmallTile.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..9057fbd082fb13220729b9f1a3d52db80440679f GIT binary patch literal 2507 zcmV;+2{iVJP)^8ZAnByRCt{2U0ZAvRT%zf_SWvDEz}Yk zF^E8`s2COFi$RQlC|WN?Yai6acnQ9Ff6-JDzz}co5_mA-fd^@Az2ha(2Q~6QBryWo zfX0XtN>JNf=8SyP{~cm*46#KFS-9Di?*S8<19$$Tlu}nU_1XT&^43%!cTqBtu0A zf?F?Ug7vTYt<_wzT+mf~d{;?TRpKrrN;Lv)Dj{N=_@MTzt&{nh= zz4ySuAL!JnzbF_COdaqckY$m)YT{@3hcL+9dh?Cc!YTq1ToVKvK>IV9aiJbD4!yB! z_tb$9SY`EnE2dhFM+J8bR>aE7E)hByDx%haHlytr=)r{{#ipigwfL$f$rG+JDuhms zuoZzpu3B}l70_n19hMZhIL9}z3@en@=Pk^%YH~^pCuD{XsK7yqD2?Qz1oN#723b#= zci646t_yN=xjc=JXK5y$%V}E0qZe#OsF7W7@1bwMJ3!HB#Iz$_2Mlndqe)tQ-L6<8Bj6F7#PMf8Mf5rsk_?rQEF_!I@6U547*mWnp1lANxJNk;dA z%ei6g_0)08I?{CA#ReP+2_7FGr(`NEP3=k1$+(zNHg_~Of80v236p45V(38Hz=w;f zy@O!b3 zQRLP;MXBtThUIrT+Y4L1ui_B&C=74Z)V9+rFYGW!MtK3HN_^JV?v$f0$tL13>P4Kc4y8= zR#h~@Y5v~-121-A13Z##fJd?os0xzdM97+36n-9}aMdvI$%46p3G0QaVpkY@7!+Y6 zW6`^7?PQrS3C5!IW54`1(~{Pbpcn)%XlbTpOP5G!s^vGjRQ6y&W zPAZRR+@#TXg6`_iD4Z;qq%<^O1CmK` zxe{0y?1Xb8aU#L>Bm*D?Hmx)u)G4nvsv7IU$*cRThGZwhBiRN>BU#s-Ih9l{969|2 zA0JanZs%GtoEyhk7r5)mR7!YDP9A_}1F=>w7!Y}f9J5&xn+qEoqO|>`H|gU~zof>- zn0U{PK%gm+I7=NH*U`3~XDD%Iw6JWULP*)iCnPzUrs0vexchG2$2SsBh_*Ov1yMmg z;Eo3Ze&Kz&Rb_x=v|&1iYnb|$0;lzIcjd6KZk4KX5h}8d|bYC39V>fCUe%tei$L-Y%X7XD}ycR zaf%R)iy9kqs{~I+(FKQP3Xm1aNYETKe-vgJ_D>_V;!IS!InTvxAox`ad&t3sm>`&R zR>rNqYeh0LU?VxRj`X(3zIy2JAld9k%`t2C{wnFtiEeS zGE$6#WDWU);b!jp;wyUafi8AA>qKfrwMK|W93#Y5(_er8BQnr}3nR9HKUkP?(CYhE zB=>Xa#1nK2EQ30J`~>ZIWhcGz;`1VRCGuRA2i6u(A7)T#eEU{z0X zk`?}}-?_VH(ygDPBFxnDeK@JX;HvZ_)nuGV zp!@yZN-l@2suKqXKy_eGH1u>e<>)*Yrdg^@W(YG64gkU5YO308{A+oqGvKrValFHy zKWR;iE?uMKbJLE%FhZJDeFTOfJX4RrK$k_E`?P@Co%mx=ujmL2VB#E&6F;Gnd-?f? zRLFDRMzsS7k*N=12y8JA3XpP`3t*n3L4{+9dgr&c_3I?^-6I`)EgehLPl`S;a&p?S zM6(Jv&MJ0c98@Bd((sTNNqdb_ldu}(W`eiw!UlLG+W?Pb8{m;_13Z##fJd?o_!phS VEheE6V#xpi002ovPDHLkV1mZ4q*?#~ literal 0 HcmV?d00001 diff --git a/public/windows11/SmallTile.scale-150.png b/public/windows11/SmallTile.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..6cae11964be17a7b2f058a8a2bde622c0135f42d GIT binary patch literal 2738 zcmZYBc{~%09|!Q2Fmoig&>TyR@yIc`#T;|rxk;PUkfLa*LTf8xH`09FT}B4q*kW9v=SgCW5-5 zN7O){x0dc=Cy~%ZF{nUaNNkjupt3__30czYiJ{rBX}oHDa~%A+^lK}@a-jq}hZVcT z7ksCmyFyJ(9c!wAo;DY&&FrpZIh=vtT-Ox){uc9lZ4P_mSK#f=(FgCQ@Y?S;UCJJW zQd{-r^Fx01X>4XlvtyHi6MKB9g(Q_iBeW|kZpG{1E&Jalsrm~%~$#hp&G znN{wbJxA(mi%ckN){bO?TV^Obu_{oOweOk#>WZ3%N>6&oW>< z!imCQMT~6q4<%R9wap-W^w(f~k-vYKkC%2ebs2WrE7FEuy|~GdeF550iu;g_ij9w1 z@DJlRk7nSl_qG+6R=-)?>7K}vJ~&8zG+<638w)GC zm-pwZ_iRfkaE=r4@7oL2I~V=#^;ZRqUWU3Q!Obkd@do{Pn8MfS-xKEhZ3o;-zkhVB zq6^znNv==`-?_-ux-*(PlkXS|m9`4}jp9lRS($7Tem3sM+AekH$V(ee)Mq|yg!xWC z(vg=>X^I|$WqiM%K)Nq@vq|ZKqwGNQWtJyV>2=tmloW8Ogn#%s&4=mq7WbVWC&Sm4 zCC0*o1C6&jb%D03oD!bRg-Wfn-(DogENaysc}gt}R`k+6rNr}5KRTUZai4p{#Uc&#r$oD$BA{Z$HP z-4^#OR(bUG1^I>-jcr$rL%fme;hP-kgazFGB`!3gnjDb$(N9-iw6lpT(%N3hSg5hu zL9x5q@^J@htXE}3^=<)dxOS~hQFC)ojBx-ySLP4r=L`YH$Yq_6U^ZM=WiC!O);Cv4 zBz$g<_YLQmtM+7WbIti6oNzrI4}Kn4{{2jpG17TMrZr>cO;+*!d! zQ~CZIY%GKYel1;Ny`#mlOz-~E%g$GRRenayyxTaGod}gdIo3EXEiac49?tP3nqVpb z5kltY!yn00P6}L8Lk8IQwSHW1a~Xp2@Y3#xYqG14PD)=U!eV54|A$&JBCnoBMY;o7 z)B1-NQ^^DB>3E%%cjqbBwIY9=uKC~sZNGa;|s4Z?Baxlgl>kn zv~KjA)Xz0@9p{kGNX0~(yTZF$A-yFU;x0n%&(UZ8i;qb*C_XnSF?R*rl>(#nJu~Xs zC5lYkk}DDwBchCbLxl^mOku`S@u30rUTEmuLqhGnhDM9-hfKiglp3V7NjNU7~=>F4*JExsg>_io@sDt&^)a7w9sn!8~~kv|4y618sI zb1A&7wmXv#_n}_>=s+tE>A(4A8V%)dh z(%xOQraB|_y=70gcQj>oMO*Uoy-j3779gy~ZriTDwQ1gdCb zYLrHb*$4rPlAouD>-zNAJVB`hEi6)pVf-$owB9f2e8LfajSw5I{W!Q zdb3y4+~O}XIUAQebah6S@)UZGi$MOWn0SY8_vv7KFp|9uts)w+vxC(9;u?2+*6juY z`$4xvknDhQ`;zts35g#|qpAUE8jiW1;WhUqtCw}#(Rw)wEI)Pt`{QOV_4OeRj@(%N4Ag9ihh-)X00l6Gdy6INwpaFWI>|Rc@0- z!g4dylK}A~eUnqOLtLxx%FV`@mqwZT+VE%7esbu})^HpQ5#PrNhw1Qu zfetf4`FgT+aS=0w6v)}Axu-_Omcw!^pZQS$59b0p8wA{`n|_ccUaR|55Hwz8`?V^% z1Y!=OFXT~Bf-k>((oal7l5u*eKfBzUj{6Elj=0C<6Al~UxBXs)X;{(^tm5u0jk=CK z6aoMKrQCte?FGd8BwS+ii3CbXDM$1ChTeU=Zm5Mg5nwdgsXlmG37=$ms?ktjI?med jlu5Qx5X$A>JUKccmTcHUVI-eEE}a0RkrkrOz&qwY)WANm literal 0 HcmV?d00001 diff --git a/public/windows11/SmallTile.scale-200.png b/public/windows11/SmallTile.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..8662921031e15541c3b67d3b4cc2bda199b2088e GIT binary patch literal 3775 zcmai1bx;)Ex2JdM27#3nSd=AKSQ`9-^a4^!BenDr(vpjmE(%MyEL{T9AxJ2>3W8G7 zEg;g}@WVIr-uzz7yg$x4_s*F!bLP&SPsHiN)u}1iDF_G%s5LcIAKg^+-vE-` z?cndHnR9{DV&suzydV`ydUQ@SQ2oaP6d!`8gT9V#0caMBB!Q^HB3W+Q2{q)!4l2Q4 zpx-W(=bBS}rUx=8Wy+W9P=*}EFu`P$ck(KI?YS$x{w3c#LH;9(@!yseub1LycFd;NI#UD<6VsUK6VnIB{n zX_6h5$3$3c|EbP2e?$!@ZJs#UR;(^~Qx`;1Be!z%pz^oddevvbmuLJLj+E4lJ z9yvCQa-6g?H9O}+Kt{SAgZT5~-4&Bnb#NdzT`a$9q;(^0Va6)mquB|O)jELR(~KFi zL7n<+8nX^BQS9Rp`ulr7;fl}NF&RuT%@X<|sM>5F^oOd=)F*+i#8aY{@d5H26GAKA zanV{(&!qAdXfc>Pg@ObX!|rG1l-`pOcUoNO*OhPV9>_ogvOVT~;n1q17TY66C7~NT zQ?)&Voo3eR>Q}eh3pdx>xHhZ3l-eK(hDhr$-tU$*cCUv>wa9+6(guN9(L1e;;C>!< zb1{L!VP{!y`^ZoFR=4+QHH-}5FeS)3;_ByUe?9_Qigu!ZeJ_g=lV)RskDX_hmgQEJl5sAtLj_G|OG zopt`!w5_9uQn!C!r?YdggF!SxgvDp@rjNL$;iN5 z{n(zKp3|On=lxe>Lt~=NC>DsD;VML)^bUq&8MxDl?OT5Lp)&hwo%T`5rd15*931(k{s3seVw=I?v^z8<;OL|?Hi-eO}bJnAkUiaMUwbP~Cge}#T! zAR!~WtjLcs3>DaKI7G2b`gR^03x)M

K9Sd=K3g6-U5M&mSv#GotCf8~)SeEE> zIVguCD;2~*Z*LY4dNwGimX{0u$c@kge|t(1U69r;DlzfC*ME#=uIUJWFni8r@cg-D zu1jA%AMYhz9R{Bp4jfnz*9zyO$}Xy|&f;u5r{TxmIhTG@h4Q^1Yfx_EyS4>jE=;X1 z`Lt@eP=Ekz=f)e1}P8dMuhth>T#Tqvs#5|{3EAeo%_-AoQu%)0qcA-JtV5TxP)p)zxWZGLt0AT z_q^M3*7++duryiHvNC=v#i<13q+^r9vMhIY zTpaM5Oo1#faW^_GYyT->MKf0QeRbnvZpuEjX+CvcwXP)g(xGbHb?<>inh1!x{V}{4hk+N`Gy`8Oh|~5Rgr9S| zMId11- zx0Fp3x1^f?+dEbhj}Y3COzT^Ag`n*W1eTl^bM(WxwKqOvmmcXFOEcjA7byQbW*Z!K zyv4Z~1|xJ6g&2(?pjZKxgrSzedg;-Jx`}K`57x}mISt|Zy*AIA$Br+etfqHMCo5Bu z0QXQYx!&e@T6?iU&WG5b14K2e(dX);6!k!rYYVn! zwL$#lW=$`9-h0h$=ek4_PnX`E#N>2+8!b|-x4G!AV*kQiQf|w<+|_HYCDw#xf8i3g z%6<8w6)_W($IbBjBt(=+*P+mHM zl&Io|E00nD*j~JpTgH69Ojx8wK8CS~>a}O2Mlnq4amxw5V$6&jy$ z+}{rs*`9lxLzloWBcY|#Y$s{i5(=T-57j8b8v%~0(BgmAHx2FVE^G?41o=|YFrog>~~F*`awV@sL0?S%6lr%TbW!LtUfOk;zL^Oc-(YL;*8wi69NZO zPoOb0v_GzB74wk5w94}O^WLc3qGe&l!`hL_AYKPzy2Q$k_9@Fh>+8SEE5e3fNzcHk z74`0&*3n7)1C_!Rs5i{&&NYS*Q&Ur)&pNGqO3c^Fq*LSgQxc(u=^I`-}c z>+6OysWelmbi2+BVvWdASM)UC9W28Do;}dIpzDepbhK zsOMlyYaQ_%<0*E&|EFYNpBG0D@3+5a*Skz@dKj&=*K%<|-mmrj%lN1#bSVSjD(;pL#6oyd|W8bzx(ruKGv6El(%$ zCD$;e=vG0$w3T)YnW91d1d7CzuhEN0Pc)NHackb%+dEY= z_uEm{)9Z^onrR89*Db3Mc0#h`rDuc%v0fhST0e4KCx=q)lC=DKTux}7QxJim;krV3 zG+m0Y-@a|iCrSy#*DtMCRi>>6Ko~;R8jy}Am=Hs1>cf%RYvPY*A9W8t&-f3$)s{Oc z!h=%=bWR!R4Nl*Fn|dsqS6bkI)KQ)Hp<2)Bg&kOCgsLcJgJiL|*LlmoQkzROn@$ zH-|p)Hy(Bz>aw}9Zi42V=Fp$jJu5HT?pErWg&Sk>r(t0=fCoeOQ`yWyK!ZnqarPAa zURt)Ac3R!=MY5R?h+O++74DWFlGckI+B6sxd81#*{L=Fayf*!7&(bx|S)y6F1o4Hs z=^ugvf|asArWj%keb2V@COdl5!4eC1w#QG|pS2y7-d5MYLW7G#U`rXW?{7XKy!qz5 zBT(5M)PvLyBf^iDuF{1X>HafE_km1IzFXo$ziMrnS-gO)PZwwo9nml_?FTxoPo9Q0vW*L= zK~?!*;=Q`^<7GxtT0TYTDe3r)E-%iePq~XckPU6T3OCq*6xTRnIDNV%*Brq*RL)%}i9^R!$4ti_Yg0Gnklvjh0wnx9?|o58hV^vXfs zrgt+v!@e9nfx0FTlN)uH*W#zj?9g+_|K-&FC!L*e-IlD# Vn9*~5dgDL|G}Yj$6%TA8{{{K~A}s&_ literal 0 HcmV?d00001 diff --git a/public/windows11/SmallTile.scale-400.png b/public/windows11/SmallTile.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..a21e56a7ed9553dd5377f207211d2008ea83648e GIT binary patch literal 6932 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 literal 0 HcmV?d00001 diff --git a/public/windows11/SplashScreen.scale-100.png b/public/windows11/SplashScreen.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd538c4e0d09c75d081ae71ded608f3b7a3d944 GIT binary patch literal 8148 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 R6F?e*^t22$tJNKz{1=Ya{g(g$ literal 0 HcmV?d00001 diff --git a/public/windows11/SplashScreen.scale-125.png b/public/windows11/SplashScreen.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..528db1682dc7acd07b81f8e190273e0b43cf2c51 GIT binary patch literal 10181 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 literal 0 HcmV?d00001 diff --git a/public/windows11/SplashScreen.scale-150.png b/public/windows11/SplashScreen.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..9765333d79e3897db338c8f6391e7a9e96938a0f GIT binary patch literal 12352 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 KQfquO=|2GOWYL`f literal 0 HcmV?d00001 diff --git a/public/windows11/SplashScreen.scale-200.png b/public/windows11/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..04eef39809d7c402a0699501d2870ea05bf716c3 GIT binary patch literal 17364 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 literal 0 HcmV?d00001 diff --git a/public/windows11/SplashScreen.scale-400.png b/public/windows11/SplashScreen.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd23c53793c031ef3adb672ac97a12cc97eeec0 GIT binary patch literal 48364 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 literal 0 HcmV?d00001 diff --git a/public/windows11/Square150x150Logo.scale-100.png b/public/windows11/Square150x150Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..283ddcaca9896f40b86a1ac8cf132eaa7cc0605f GIT binary patch literal 3350 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 EKY2sBdjJ3c literal 0 HcmV?d00001 diff --git a/public/windows11/Square150x150Logo.scale-150.png b/public/windows11/Square150x150Logo.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..b6eeb22c74d93cd666fd9dd588445bae8b56c051 GIT binary patch literal 5157 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 literal 0 HcmV?d00001 diff --git a/public/windows11/Square150x150Logo.scale-200.png b/public/windows11/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..509de7b7e25f0e3cac7359fe6401b86f106ca9e3 GIT binary patch literal 7475 zcmcI}cQjnzySHAWB!VQO3&H3uT9gpc1vAR%2{L;0ULqnvh+r^Ugh663>O?Oox)EhC z6DCFZjuJ6i2E!feu6x(}&wbbZ-S@tKoORaOXRo#Q^Q^r;<#}FMSs1agTw|f4qGB_? zXJAc5MGZKAm>4J{QE{1Jloy@1p1B?sRbv+Gi90>zn>py7LkJZW!1Vl~hHFFLQBhr= zH8#+*jV#_;WX-(}EE(KM07jri3x~}tFRfm5=@8>`(Wes@@mA-2YDniCL=U>S_k1(j zX;HMtO2F9aBJ@MLcbGOKh@L0O`48e|aHK&7D@#Yft!qNe+4TBemtK#VDQ**tw#fM3 zCJZ3@j?U=ysvbd$ui7fw##J4^8@9W{w(DA`5=EH+R1-o-s$0o@G~X}KuqG<~Zw&+~ zBC(y(acHgtWWt?O?qf}k!tJP2_oPUpqHRG)IKN+;K(psK#;eVX`atHF7oRFFyxCs` zx2q?#p(SU}cR9_Ht-A{{xX0_=8Dn0^k(Ny6OaCcUO(Tu#9^yqGG8|)g$MO#nQ4xm% zzl?*@o} zKd9c~cCw&@s()~-ATk`OKC&vjhIvaKpIa+bTcKSYy>YZ^#$|@nS~xZjzHt2B4f|_v zw`VY*Gy+EYsbQ0efd%3rE{{{0-;W>BE|f0ilK$afKy_SnYGeo4R45KEn5LAmh}UHP z(b~>gCD42M79LoWdwTSGx)duD#r{4J9J%K5nOFf0BL}&9xP+xJHwYF~{d$=k$A?*G zZT-Scr`JC-K=Yz;o&l^>+03XQ{pwSPPp|HlR*z9ub8UTel)Y!7KT3tM$0ovyRAah zXNVtkwYFdQ%?m!Oy)^d`Fx1{+yI3ZNDoT>uo~vh(UENWpzi1PV3Pq-C1DadQQz*D#)9prg*09Q{V22M>NV z#T{ELO!b-{p#pMBXp>iy)nBcyibEbflJ5s1JcA&OjVqw)@m93|leAd&v;#^%O z!YF|3iw_JA9#LiuQFLD#Q{eJ~qpr-WJ?(D7(!Z6tpuNp2KopPKc1RE|LhTL59X3EU zx7+PX6Mo!)_!o9pcg^S)@RbE_J4U8U;)~Y9W|0Cah+q_I3pM5NL*<<_#NW8~BR1d+ zm*sL(u;&kX>Vc2lH8WAsii2sfSkW+3cn#PcU$rRA#g)^>;oD2vUH+BtBDU6Z=uBM1 z{eBG&=*7h+qG7XsKAyk`b%=Wt@0b>PE^J*E;~^f#32{q#P)|Yj`~o?&+;)9OINZI} zcP_x;Tg-F7*;MrkziC!p_E!b)^pxer#l*_O)BfVoJlKo6y5bk<<=mJiM=jgUCXq&Cd599vB~2wj?_rBYHYcLc+_QamNAsHmX+)M_*>5JHl6Zm+uIY zV@Tu>xp@UJ&`BG>t&d&`4g}6fs~ccbXP5jnarwEuh?~wP72)XzKHo>A<#IAJ5p_$} z%`{6Nrh>|h3w0vuyWRG)d)pD%a(4H27Y|tSV8QD5Kr#Jn2Iw#>0$K+8c72a*-8(xd z*KP$Bh{)K|twgib6mPjKX!|wPyGHi66Xn$K;tL0DKCox*YsZqSUl;onp?QMR9no+2 zpJ6c=y>iO2)4Iyf-)cuoZEG}|%}zhHlYXeP_q^+b$UdDmY^(870)Tg1I@1%m?BLdV zxHpm0XYuhqH#`I6Dj_bud=i3&PE3##m0QxQgsf;CuTEM-^83{(8PtRKWgvcjh!!X} zbQ{$YAzQ4|vbC^vDSL=!lyy01cT)6+)41Bv?lk*9h2DVXT{^-;MxQ~KF~t>=>gL5G za?B<$vOCRQPsVf&#r^PiCoFm+AcR52J2 zZI0QFLBfK)5~d!0&%RWClXl}f@qyvE9>3h%4F~?me?2rI&FmGYNuRz3!&gl6J*J3N zzxZ3rJ`8x3YuJli_H+x&7nEiKG)ku&goc^et;L6ncz^h$kcgE8vImDR-da@ki=ANS zd;g}2n`ctsg;j2nN&``Ff3xWe_Q%rvyc=W3MSET4P<2n|<=``VZQ_g)-*~Bb_K02P zsL9i}7Z4cAZp`(ajUS($v`TnS9d%C0Oa7CJ71O`Z018pj zL8xU+e*R)YYe;y^_?BxvUb=ft&x)K@3Cug5yEIyq|14Rxv8}iF>V*@jyj37iG`LLuF>|DWvin@CtEypgIo7xWMmGjZ>!(Q)F8@3{KoECnf-A{wBL=j6qg7gdI#PfDn&(~ ziUUPxP4n|-TN|@9ep;#jE~uz{bi3)b)A-%4lttd092>>k3c?6NscxzNrOeTP<_oA~ zCqpoYIp9v~7i@sMJvG4~^S89DiQxY&d+>kp9MWIXKEI{Y6H5F!fu;lbL9AL^#-L^z z&MYz^O(NxE$J>Q(V8z9`J3GvLPR53ApI}*#y=R`s#V`;B`Mn2xOn78s zo3E3hA2)X^pYbGd-}&qzWN!X4csFAEl?sQpNTGV2_07xl!?_mK4}InmonnWLme1L% zv5~n`?gbO#7SW^?0h$)`oAC0SDCVJ&?w@*>yQ$2*>Cg;=*NlIB2&xCrNLTF@11_h( zmRmNr=Vn4Ym0sR$Tdi9&e67j&uck`+po{pdvMHxTdxDx0RzZE#vUyBqC9#UEv%rLy zCyJHH-IFa-%Yt+By)x^Vu~NuK)kcW%Qv#F3=Qr*=CjIo*5iUFWYxK#I6kg~gmix|m zgArsD(|I8)V}4ik9TTEpiqGnL=y#fs;3_fB0V#qO_}9d!t*iuskZC{F+UYRLFN~`u z+~|}@?@Lp#u=<|&uZHkH^^c!mOQa5~n`ujys_zc_Fkr$uTVEVrsYuTFuA6Y1GU6H^ z-@^lhgS9d`Cz`{L%?B@b@aa=!#>*^;qk!*pJRa}t0V4>9aiWf8eU9MiU+Uv7dowS7 zQ(w@7ieJP7_~6jhZ7qkpgI_Lzr$vyQrf@8xDNdpsu5FeU;=!ybMtY)iupa-c$Ik&KFrHtC-fKKSR^??5PDBjJ`Jn2d zkCJ?u+&ofBOc`mrG$XrjKhGX%Ec>t8X?+C2z}5Lo^4sf2=xw>-QllEm24MB+z@Zf} z@3u;dc=oI$=P2OomwozvDZU=#C2Dp}TmCQD5VlgDsDXna(PpEu6b)-5Tm>Lg$yR9g^Eg1czBL>^C^me)63=98<4sOu z;<$u9C8t?W(m4MEq5n$&`%eu2f0%LiEv@u-3_j@jl9eh!EzjJ~4PvFDs(ep8=OP!F z=2PJdso|AiMRk?DeHx^c4@LW-tE@W-gLSAvUY$T5h2wnyVl-Rq@H|;X2nBVn;XV+gy*!2pMYc3@5iwuX{a zNt{^m$Z+L5FIw5};+J1<);=w!N(5ixx2O6>kwO2?)Rf9b{UY`LFa4VS8KuDvsgrK0R z8Zhdd_vHpfTwr7+=`nouVuYa({_)O`wKvOE!9S1bcsRLbTs59YA0L#oeFNUw6$Pw) zJXcY^lYY*5L7 zZ(`@}vaUWn?6*X_Q>K@&m8g4&)p1&DF(hg_*iINMZ@%LseK8Gye9{+#&3S{@+Jdq) zTwd?r+{TORM18L&zA%-8_8a^2RMF|~w-Bm@!|>!;2!MwE{m_76aZg)!{a_9#5#DTM2`!R$GRC^&Y+a7JR%og;m7O)W7dwHf@h(y7J>Ub zF#L5Ihew%SZTLGfw}L4O%ms0|X~>Qq=5)5HSTXw_Kx#eR+^p(5yz-WVNx|MRz;Qj9 z=a%dTff+3yoeg>H#cQU-k;GNPmbIrFp}$zA)}eF(Y1|Vu+e#cyI7#ELhLath^87h^ zq&^i~A@e~_w$}wyM4SOR+f1G|dW?nzrN(D(DXjFMp~v?O96mN>`(HyvM2U=!PxEAt z@VZVWzh{it7tI>+%x}o0*g($)5sTmz&Pa2|_!cj?;U9{_%w`mDvGMQCyZ27Z_t}La zk2oWUB`1MQ6k!F}bV_-3^1{b{nO3!hRWIz{Z|1HXIR&uQ3F3RPAkSWkMV$JYowwL& zin{%CUHFel^pBBnBpQ-O5w(7-hB|w`oFFLxT1S2*cDDrtd?@le^l+e-QO!gWIZ&9# zEs-wpPNFDtUgy8*BsTKeZ@@o5&d(^}qHgWy<)ry^UpNHdhVWTHyRAat@dvw5mq&(X!_ zGRS?)$J&HE{iA2dP{4l05$d8o|IqrcM)L+sGelF(W~;0&Fe4uJi0knNW{cPg#OH#0 z6HwRB+HM3-y)a#Q{*f1_{v5kdQxWa2!&{s0Az02_PFE!8IU-JmQjn7|ZOcI*@#P5dQk8+*OKcw8@z-J8B zHZ~O(wy-j1qzcC6)I;r?A(~B7i?fof9h#mL+ZO)FV8n7Enx~Q8E)OPA$|mG|*U4^m zmU*lryjb=kS1vF6WP8#P?Aq*meRumhB}=>9Q$4+9^L{I5n$gNYx8tVL1PyN=hx`I( z-^$A%mCiu}g3rDFOeKh~Z>wIFudT1dua4?Dob(MnQWZ~Mk1lIweSf_SqqC$fFMfI- z(K1`^ETqCN1^-;_G|VK+zlqPSwZj8z0wTs0%7Hgs4^G;ny0Dv5q4gcKr?V#gz_c6u zWk6WOd`tCi35@%I`$uXZgzca&{@xsN;V|{-N*KxQ?2BvY9>9WQudcz=M&5P~7Yo_& zccB#YjLx3riMM1bbxtUQEqo@+_8BQuepBwyq?@J2+TLPYDUTg@8Nl$lV-}$w#)c@5 z$0^UWD<|a>(X1?nB{3~lCMACwyNpB+ z%4sXXwp?Q057!UETfBJ6=|5T8%c2VW7p(BlzD6H{&DBJy%X|Ia>G+b<7fL^mnssj3 zS;KtqJ)+*Z2pzn*(=|=$Nz8d3jh87t`0=JU6ms(A$lJ_(BhqF%dUDf6h*E#0j$9lF zo|o%E`30pzrwb|d?uyo{{C*(zx@z-B-HT75_4Zc|AcPfd*>&oD&%p|lcJzo}H4GW8 z!0rzB>LPjGsh!dK_O0=(-1Le5j;y4!wynxlCzkJF%%erC199T*6MXA$f<#965>>@v69sEBTyGy8bESI^)!AwJ*Jn3nUYKSGQ45&ww$9 z9_XC6E~;?=+`=(v$IusCrT~6G@}%RnDk12>i^7qvYf&kAv~fkjSh_KK>npIN$DoEA zpd|RSqdD9VO#=Q(U(PpZ&=7E@Yc$@;y6M1>5L#s|#teJogAGVQqIYr6{6EA|CWf7U?i|0sqB z2az=B2DE(qH=>&@1BDMPnq_jV8RN1zE$%^e4$8j;w&6_(nPWP$$4{T(Cuw`=s^%Y5+YheZ=*zw-s`9lM6@WQjS^%cI-^A!qIXe7 zH%OFVbY^sC=Y5|4;CY_4&S#zP4|C5Nv)8@HbzS#WUa!}Vdh=R|oa7z}00895uN1TZ zfY9LI>*fvcFDRR|Iq;3hR$g5m04n22&);4LKi_hFW#|C_e5(Im1PGawLI98&QC5)G z@y*YE)eLdKp3Y14&_(#Q| zN2v_sy{2b%MPCzhsSHL<`Dr@iZc-RRlJ{v z<=kAh7##OeD?cx+WOU=f0U1gOY7Y^lJDAbePRehzNxdYN9Al&oJ-Mbu_UWXO_?o;G zmBH;_BeO1Suei~lljpXHvDY33e6B8)MzkNCk0q};J)vyX9!SkBgvlz}O}}%loAS)d z23Tvc+P=0Y_0lGoL+mKbXZaRJdQBs0XKOck2Cjm45izda{Br!tEy&rGt)PpruhP1*sd%z=3)I5&L*cUkour19=-u?6Ee@BD}nc$57{eT=fz=y&JsKN<0)vrp10aLLDtT; zj%?Gn%0;#gAyszG_x(65!%MANFhll!E9AHtdf-`&Zv%a=chh(5WtCvrmcghcs;GM| zC_AcLoL5fB*<$lH)8An6oQrQ1)Uy;=jHKCRm4$5TFUgzx`HfStzKK)@T=LLKyFLds zPIo9V{a~cLiDl%%913X`?QbVhGUT5qXOpi26FkoZzIac&ec8`za1UH|rRI*kZGy{_ z_R6kDnd-Q~{WOE&>%}g7d_&}G$QRz{Lb+(Of|@(~`RyMjL}EhE7;Lr|QT6Pz`uC%q zWG;AR5CU3x<#!MQ`b+ZbN;=*&dZzWeRRn-EZFxXt%C;6+9nADcF??X<^wjFl7$*L~M z1*%@WrF||G-e;!eC;Ha5B#{tk6>(X2Yl8jScp`YdU{kg*Is!jQtG_JR3w+UzBh_k7 zw{oubY@&Nj7V7n0(qBVATYpVG25aEBGyTiKl%WaZh%!=%4mN^a%&Jmq5dn)<#WC_Q zw?buZztsB63mwUWTyxFK_^4vYS_Xk&8l`7YOilG`qEN3)wIgUYk-x^@0+mCBLh6l*qK)8hcSU$8Y^Bsic)0OSpOhsXqUz8tqnGR+aQoa?Z+2?6q(4OHGu%$qwLz z4V~Lp-i0{*wntS7T6T5qHZ}N?5VeiHD#axCY|U%FIy%g;dyYXB|32R@zy`g$+yVgf zP@EUcr?cfJ9{nv2L+&EvR#Q3_lR#q=b4Qw+ZHe2nbm4245B!IUEw=I6)&R^zy4s!V zj{z_6tn_<~pADJL8ZW|G194U^=5`djZ_q1bsPVql|9u>apxjNUylR!g^7n?uz&FMf zdQxT}#K@}qnG{`_Q0@_nO-$2J2U>l;AiIdpCXq+3&(1rAts>>`EBskh=QJzSe7p;t z16Q9+l~aTe0K2|c(?Q3d8F-T{DJkctYMhgVEx)G@yYE7;hw9R0t4m8kjHIhw7TfcV zM74~9ezKJTz@th_i+r=c4j2#=VF4=oIG0XKk3A$Pbp+}@{u-z8(Z2>`g?^}exZokfu zoxziYqej#YzSb+}QtGW0;_RZ&G}lOXEEJu zdhG76v&IP*oj;8}6U&l@q6`L1#o`=&(I02L%ABdd|MfjNf1~lPzev{*{6|Bfo_;`i zeXGimwMsz?cj>PnOFxg5t#1I(8q27?eo2h|v{U1|-IhU8GK3+|z91;@7q(SiKNK(d zMFE5ud$;8Us8yX>DY;y^q*dZWbzE9fi*v&;4xAN|{-@{{=u?re|a@7n;f71V+J!ayR)WL z3`O9JDEMgfdE_K@bYf+)wN7Ph#z;IW(Gc2T7g~YH)8mZqMw1=RPQZ5+M8P3q6XH;q zSl}g<`?ee7yyC~=vMu#z@_>Doe&Fs_x=@2XrGNRSU%otjq*xiEU6q)_2P!|LUh?p# z`un5hW36R*Y)N#I{F0GJV1BAjz#d0kF@{|KM%*^_Ls0& zPDb6xf^Qs4(9wwroQ4EH&AgAH=M42J2sigMSYGUGQip{~v%iA`!0ISi!!O6ft z$$eRA>oVKr%0R>EDj$WeE{eYPM*N3Kktz@OckWv6Em&h?$+h(Lxg>9Xz1!hE$|e0o zi967wXzegK-Ph4IH83(b=*m@>LQ9v?AbUOdmPT;C%VW7A81-1Ef|J4YvkXzn>hSRE zhV^->L$V(EnU$4hL(@&lLvv491J_Lty!xbfRmy`@u8JXGBlMjYtvN0DXf4NQD506k zyVm}p6b~i#ZX!S4g|ggdCx|bmqATKt9a1o}bI86^pt`TPsn}-kJU(N#W$B~=X`_cO z>}v&^rrs#*VjkEko$P+vU!58-)%D()USC{aXHe#(*)JKi?IF#%a-4orAs@72Xxsm( z>~(q$Jk^iJp-N7piA6f zW;^sIu2Ve>emaQ%!Le5)Rrg{hieXI^R$nP7-g~ zMklVzsc&p>%*EDTp4Ghvf=$ncNs7nmr3q8VVq-gAbS5RgOtT>L+=l$nV5OA>?x@q1^GTZ?^dCYy?yo=bTCttc^WG{T&ID+V2FVs9G$q<4J$FwvTxZQ&yj zlJo_6Cq4^pWB|F-T*11Q1&zymYq7cDawT{YY23mZzdcQl>W6Hy_PMYLvdope77d0k zh}4xAfBS)CV`S+r%J+G;qD1Va86JXyZO>^UDI0m=JuHR zoSt}!tppzGX+Xle)17=%PE@Xple_c{Rc|2+qlQRT)#&Kl!^x(L()}V{Gdfu+3Z@LQ z_UIpkz*!mMMOBu#QK!fAV)_>Y5MeF)mluqoK&q|6M>*p#Vq4vOYrGE_dfj= zGV~s(rD2CRe{JZ2T*>XVY5%1%=tqE2+-FTpI=B_6JaURy(RE|@a)qvh;Hrk6xE+P! zGo<{>2L=b-n!s%tY~#C;mT^o_EGEh4yw|Mnnp9-l^-}gb|8{O9N>b^EdGQwnismp0 zbX+L>s-!3xwP(#s;&-~BPHW|fQmdbms-34q1#Q{apLEHkqE{)L&D5vBo-vcmTd=Q$ z0gBD##vLy#K+ke||4xN|XF4|BxQ!5Wan`yZ)kbRj!TwbJ=AH;$;fh|8Ya&?|_CT}V zmgJ99Z+V{ksI+v@eT&6}zo5j7ahr1OjyQP6_ydT~#?_8ji{#FdMbaHVc8Gg7S;)+=1YjRzZLF7zMR|&wi}zh@Pl|rVZ5m59oaqMfWp}^r6su5JA4M4=1e0!7`j|q0uX;J?hga#7 zdwDIjxny@s>H{Gwwv%o4-^)ogM#P>Te#Wv$J@WGE{eC}Q*FQg_+|;(LE}1^+Va03C zBj5E)8$WF;I(icW$mcrLiO+JfmqWWY{cfB*@JwgQrjodM_Fw^Zq^{o!bvbsuYjFGa zjTGt&$XRGn{LV2$e=D+}tJga6(^fO17@Tr4Rb24wPC{05MtVAozIoSgAD(J98gzXTdnYRJ!0RWY@*HwpOXUh?0(^9;`t;c)Ou!u z)9FjHKdOE^@n*$Zs1XE`Tw6AMa*vTQK6B|lIQ3Opro z8@oB!h?@&wT!KQA!CWelmZ%OjzH9y3h#VC45$}rn^{Cc`PK;rW$Ip6qOg-G%CIZY_ z3i@{I5q5qfo%DUA0!^%$y`Nei@O$6jy+5W-l+Eb8`^S&!0IAfwmv)yypc?1=PDq^i zA)DhKSCX<{|E3v#=ko^vUI6ecdAhQ%Eb?e|ve{_+d`aWsa|a6sf6LiEZAtgD8wb=c zD#`fz@l6CH?nWo=)>%9x!=g`R*aaKU6J2lDJ+FLaP5`i#Ba44A?_L(u%V=C4z_LBvCqx3tc-FrYOHj-;3 z6P`pmB&7uQ6Dz-#zgBF6v#S8sxvl=>#FY%XbdbX@*SxkiIzIkmZb9$l7mJsTLw7_( z`-zDMwFqbnjbb`YqkT*}YtB^af zo@KFZ#~jE=fL(xI$=~EK;%<(Fk85(=|Ij5FVcgx{w7d<=F|il!!_CGi(B2zTVb~YSIqR=qCm6>2BCiEN*BDGr_r*85l7T$>nK-BLS#1yveF8rzPOSpKGt) z!6ZCp1=5jKv1lvMA335rl8cUKQ9jmDSF#ot*v3g^`ep4blU|X{KH$7tW&rm z`MYTUh0Ije=<3;L*gWq;wl!x$VDZEHGZ3CGZd3m7D8^-V_FdB5PuAuPgZ&reQ;nI; z2c;(STp%L-#pvCEgNZ~%-m~b9gnzf?HgsE_a1UZ!y_y#gRxu+0iXs@sv2V#>W;x~hVB&1h{+Q``WF9;MI zJ+?Gb?MJdiReexVChHWbNP)seIIy>b+EH3fNmKxp2d>pS;ZY{muh4*^!i~J-?;-$N zrRJ@p)Z72RL*{z1ymvmasQ`e0ok%NZfczF)g?+LgHhRYoX`$G7@{AN{eSok6>;Ijw zkjVLhDPy?GZPlyuq)+AS9>Lp zn(Bbr6G(`7c{>{%rO6Kn^;T_GpbJ+Sp4D}|b8}6PI;HhWAAon9=lu&sReRxISz3mj zq_q+P^vU~H-rfQMaVs}tW)#iQkIszxWVh+*>D#Xfi4OnsZdNIBxD;my^D73w2U&)v zFaKv&^dl1#E>N!NUFmhe^>?z?(m_$Dh{OMF`g2t(B4OBY|9L<@5$OG=OX*xwozv61 z5)-nMd1AK>M0pRx{(k%2`GA~-U6gG*_KG{=|ivICoZjd zA~vDwp`8>}64FJu`_w6$Iyv!0QY6BFY`{sLoUJ0nQiqR@13e;eg*$TT<&wL&zP_Or zJ`1!W?%trcCk6Lpmx997I60&wIgNu(E$y~9VBmC30Q7f_ zpJOuz1P7wm{NB$fm=kpWe5sce#b@^}X=1{L#^5@5iAbnul3LoY{Q-~gFE4K!w7MY^ zIOK(-Z}3V}kOE{*guIVZvT3G-3>t6pfg#cTzq2kreRt4*AibBU3?fN+HDJ{~NWMdY zSb`Nq{L3HRJ+g0Sz!4}5X71k-6PwO8*7+X1hA3rfEs~WAK?G(#!Z^(~ytTW#ih$n; zsny^{aPsM?|Hx|89pL%5qW2d6&KvTbX#h7*F(+s^A*4nMDJdz^dCQ*Rubc^CX?TGK z(9$Zcp{A}LUS;rIoruo$zN6LPuwV}sn+dcg?FE{>0j;|Dbh_vFtvkT3)&Gud{~sL* zPvwmq2(n*sb9^@e^Jyk9tLNpVyeBQ#H2C?`=X!QNK0fLN(U?}k5SqoaZ0thtn^pQ% zMQ#nCKSCGZCjbVEf?h0J1+e&(mP8T6>r61a6LN_x7k`=UoE;Lr+`VZJU*k?s&q~?} z{F7sS(SQ~f7a!hky9XYx)>{=-G)G5XS_@OG>g42FWH(EUY_Ii`#J?stW#YSgxkb5abWEOT*067KeN&&pX88~zxk6~&pt(J&lq|g;A$m9Xg#8{ zcB`Z^ea}iYF2<-I9UYxlLpLr!ND9OyWqqxXM`LE#cpJ1vM@OHV%S(H7r)9xu7VrwB z3A)8#+&_Jd+Ud{jZQmDXIaT$(wG>=Y*<4Z46PORCB*67Owv5%An7{x$lK(SS`rq(r z(OV-2Zm=Kh3t|NT`o7`9s1JfF-11KUn!;G#1-$jjr?Oo!pp}VHkEXr}gzVXhL63;? zB)sa$eUY?}&uLIk>?KOL4#Z7;F@o^*IG7!f*txinvXjQy}qHMocqR{uJ{JHWgjki&2MyKo*%^72h0gV*u}ot*sis$ z8Dtwd(1+^g^OPg7PrTVQSu23ngg$|`-P$jD|7%@}s7h*iQtyX{G`DV5(*dnf2g!-g zkx!cT2aFnTmfW*uzM>`yRf}UvZjX)4^I`=;XbO_K{Jq5j;%bI#!1|%5uBF9Chd>|< zG44lY6Ge&`#LL!d+z~MV zLU?l3-fm4xQOCJ?dm3L3CE7*h8r(=Zv12ja{#NPp47vs#xRIg+jvYl|ObZ}KG}9Y1 z>N(-AVQqKuz2lAaHPyn4732QK=wIjlyGu$OH`#vS!8wJBC{(%$s_`_cVxZ5m>E3^{ zZdA}y658?O z2zlp9ip2e={8Q;;3TzLOk|M49C$`)>`%T$Eo~+|Q8f4_1v1LC`BmAe`uP7v*NN|I! z*;1`_!69>0uJ4T$imt&O?bT7Xe&72kS*1L8u1%vn3@G9>KK!IbZN4`IXV;ji%Ko^w z#FVc;h!})2%%=G9RarJ>J%^8~#Qrz16Y~3MSQXU!p)TI2$bCq<3QR+~INK+iP|C95 zFV2JfMil8YHsm1Lde;F~W~}eT%naMrMSkN-!hF24rDePOuxYqun_gN206wy7`29nOtanf)AVk9v{`_ry3rFM7GUm&o zIyjFDS5VkSu4x6P6RR0DtEj*l9UZOEXml^--n_(tvr9(E#y&`u{%BC!xDl4T)7i`vLwJq*#*2+P>|{61v+bQn_s5)a zu#@t;A3Jm$ukqeIj|?n7u1F?yFm&L|?6i0Myfc5o&Tud2)zDP3(9cfi=fJb->D~}4 zw%cWE$6Gs>k4cE@j1kH-{FJn7@8zQk4Q}Wa*}gDwzKVnJWL54w42V-$gd~f7TOHsH zF_yyzucT0#34%@TzmOYkL(kHn0#0iMBWbRI*#5}$wS24H-Q37;TI-hz0#Z%qN^>mv z;PJsV?H0HMHBLSpfPX#28%!Kf8{u?YDR&x-w~sGPKnn>bw?`HjAPE2}1Zp~2CWADEx(`q5R^A8lZ<QBP|X2R|RZ^qs~Q`NT2m)`%&{Eu6E-e;eXC^GD*Z^=&vV%Hq=!Ez5$+NYf6O-v#{JDk2Uq8}^0NDt z8sV0@P^g2iv|e)Bg9FATFCt6_$RRKqoFx3*WtlH`nWGy}cM%aEPP~cbtj03cl$Pp( z&WK;mY1#Mk`{NL-`mMmW?Whs}39+~At>hxAnI{I8%zxA?JBy14&qA;kR?1O; z6s-g0!}|>Lf|Jeou>BD@hAS{o=D!yIInb)CDKXoFNhpCp=g(F~n$OziKj5-X1RpvFe6((-d`aUf?|nctdOZ|znXB1wXty>4ILdH@x8Uiq_gbYts9 zrEzm$p#gCULNWXR9{OEMX2f`Ka8Qe9sRtWb{;C3bqo4ZI}03N76rBwO}zw+23fhQxJSpN0c3uA60Thojd=578f@^ zK7J>==6pjgAQf_^q~Ficf@|ANy1-lhm=Y=6CUx$Q`$Ep2!PCxfR4keuD)M*;9W1OOUmxMl{^WOHGt;BKRAtK-%>x5N5mknnjZ}auA69CTm$+(pSn$IpWEyc7D>co2UtcNh z$7x$f&u&?nF5~%LVEf3WO}v&aQ3{Na|LR$F!1Ls$_Bs2+k4PWSGu%{oxZ;V!!N%`3 zV`h*wz0{Mio}bzM!6yapB-s5=-E^n%TmuS)lab5a$yV$T@N}BAaCCh4(H}C+5YAAF zR>y@|jKnX4?3|`(sBQua(@c_ztt=11u;djJ7NujI`emN$^2jBCOB%Q=bwQ~F9qg;N zAA^Jzxh*nn5ENB1NI6&wmX`7_rR|*v269MKmdRYin!KqNE~b6!t^Z}~bNmYOMf^1R z$;eLw!NCe0-RpX`4GZudidpCw*T4#T)x9WLFCuo?^RtXhZeacg8Org?%CLR<$pyZJ zmV@s77R>SNKV}MH@aWagru_;b8>#3i!jKs~iSkmJ%nlUk{E*iC-bLebt>9(x+))zr zVfw3=`*ZI#+JeGr;(Eyb^(N@tfP=reg;{4R>ESv?w_h>CtFcv^9W=8qc#@4a`dmYf)I zD!CURc%QO%=WgPEg(}i#o?m-xY^hRDkL-6}(SS~1Pt0_Cp=VbI`VAjyFJD(T)SA1r zjU_{$%$ZbrM}2iQM8Q}8t)lh4$!+24=+8lGaV$MqoVD0SvhpA2qmQdW9*N_Z{8L)T zuwrVX4mv<5wQpNaN^B~<2v@7;Vch@sQfS(yt&iDgzga5y;Q=XW;*%T~C%dTAN}@NBd-t%vzSpCEI-X`G2YpU3u3hTYVOGOgut3ZjFJ||1 z78+g*UBL$3fBLQUREgzq+vZ5H^6Gi^p3emwFZ$0A)9zgdM!x2py0Sxm`3IV0jf;=> z|J=J(-`+7E_w((^&)_Sa?O^jabRdH6Lnbyp8EM9n|AQyT<8jkb<=#jxq)0p|vxkCT z1y+4!U#RWUf z?Q^7N?}EO1uX#GM73U#0f0Yp~jE?dpMHVa<_*_A@>wSu=>uQvf{H~A9H$Q)E(lP|` z>779ba<-kenZ)98=mC~r~mweO2W-IbG^z1d1tsFU4sjNW9lpyM9+_|J)cb+gVhy#{!)(8AiaFo6j4Ycn|h4Ql`L*;P2H9?T*_icbkfL-`$s(AOYUcR+sgy9rj`J!&Y~E zF50DV$*DR;aoWG7VW1w6S6mo^g}{{6u#7X#W##D5IZoYw^282>r>hyBO=5DAO&sXd zJrDL5x=i|dXyO#>-$lRBHKwsUjHh7xcp_T0POilPc1(bRfpy7+qpZ~7^tMQLaaZlt zkBvWlMNzHDPvo%(hb^_SDR(T}Ef6AXUoqM9Q5R%GRi18tp)f^;B5v}z3#eA6k zSZ>j&5H*0#Tao*E=t4D3^ZXh>CE~4C1iJB<-$DK7x>ZkOZTqcM6Z)?+tCvG7K6WSX4(ft}CmbWG`8<&mJbPBxy<6 z!AnQqym_wRmQ{b@zLXUX-jQF*!}_<%Wq#V><&^Uy&cwc$O3_LTTDx$)6}kVPYBU5C zj|rh`-N$y0qZZpae+26@mpj}1bCJ7uNp<6OP&w^2znm}iO;Rsi$ji*B8>V{@Y7MHs z!c?r%Da&6UkuNK3`lQGWQd0oHd0wBtUUpP*{PN2i?diqt5cGhNzD8s#53izL7d|@L zKfr3&q|no5)Db1G;?^nf0svG};-Yqh+>S13=Qnj9Xbumcsfi}2PewpRtAFdJX`^ZE z7DK~`LW<1d#Y^rBsoRF2+FGB1bW46~60F{%yil}bUhZmqy+0e_=B@qd(QzAnAHS>; z)WEg8m83R1P!mzJ)wAw`CE4=6t=TxFD+c-Ww%TTa|5)c{Nx@^;T4OoX@3Ynww$m{! zN%?BUcLadFqV>Q5_z+4y%wIKVVX<}y%}7(z@bT{mYeja1$zHSjc3Uk*U2s=-WXP&n zo;inkWq}fSGnf+RmBa5JRm_EV&e>7JbAfUEuq^vV=&tIN2fg?IC$Pm?P?a9Kt5C_$ z@WCxwEr0rO>J)bX(4lYaA0C2CzrHKN0)Y=x1P%qUp~rUAtsLbp3hIRo|8T#V#81s|A;43tUw_NJ7^&yPB6t*JxX9^teA-Y|Ut%KBg`Nio- zH&$N|N6={%3rFq!EFCanx<rgRrNuQ^^O9;48%V{X>6IWgEiOn8-ptmb3MP-wzy_Sul3QFx-WeojH4xR z%^YA7nA4a~*cSJBrV(pP?Bb+qi?ZKFw7Aq>71md$wj_Iijdq^Z`VXsAQ{SmF{9iwe z)1Nc%IPbCzd{`dI{8fDPn zZme$q^?CZROvhz)CwVluNYTVvcAGD_Fw34lD=-uEm2?%>S6jjgamdNX(O5HKMqMhK zFier!W*s}<%2|Xsj#JWK93=$79AsIc0}Ude>}CTutF-OZ`~Bt{WSiI1JQ&?YZt6}`!Ca* zRgO^cY$j$gmP=jea97Jw(<1FEPPIQZg6n*w&)&=`ec@K>-|!AWn_Dr zN+~8yhcvvcg)aCIAGJtUe?PG(`Mri@`l&z5)KlXGq!{#1&@N>Bvrp&&UbE>k6-_{)zq(?NDy zJaudkv8H_K0V5tt+R}Q60$5ECljh1GXZv!))WS9bl<@x7{HLa+EAU8UJ0<_cdzgdx z_va(p4d1=uJczSBi6(@5VkxfLX4r5B{D|tnYk3(x6i&2I*1VA!s1Yd3xTeyiJ)ocS zRxHc-|ZzY zJP6&UUMUqVhrAZaQH9H494_Z1JsJ(M0xvm^R$HbX4A>An)3G}s%Mx#ym0|d^ic7O& zhn8#y9gJU8_`P1>m-HPkvn~x|H9I_Sk5r0SO}Ql2Di)hq|MD(^P&d=pSBkh;>1HUc zQ2pqhk;W;jL?%^17fD1xRCt_)Q%!3VQ4~Gz%?mLz38^28 z(rR>}GJ>GEb0NAB|A1d$DW%Yr8xh)qV2f5=xpS|g7D`bNK^K;8`~^}dxD^GZX)-Nj zY@##odGC9ZIA~h$K$v+s=e~39hZ-0>dSYv#PQr&4LxRmJ4d zYZt?@k;}T%=}1cQKei|qi~8w{#qinu%LT>hX(QO`x=<5_%PKP)oKMna2Q;IRx2i{8m=DsECQOaR0C*Z?Eeax z(j-aIZnrI9;`%f`fB9;GhQ4hI`tdwx;r{FtTd?&|f8;rdN+~?JGlieO5>QL1>O>@4 zQn;(~7PuxVFRvSi4%T||1wE}ewhH+yZvkBkS%^1%1J~)RCt`7l}&3CQ51&XJ98%=&4*~) zP;KcCa3Nh(sz#B5;HoGT6%o2HSYuZ$Xo;a%l%PcycA-$kF2q6>rA5$%Kft1*3q{f2 zV5^HJo#u09Jm=P#B-N(c6DDM4?tRWV@44qhK72GQQWJM(Ow&vVA$07(90yh?)G|AD zE0vTC3$+A?M}~(GYi~oPS^S|6bz5RfEehs>$%$;q*BbZgS5Q&5lKh!Ij z!7Rz|$`$q!#PowFc)j!vVOnI_c2l0NX;>rYN8^1s(SJ-a*c4FHHIzyvWG2T|3Vd%{ z7HrC^S?0Fw!0-2|y}ZW*@+RKgxvvAPp-s_I)e!Le)uydX(*(@*g388qEbAnp=*p;2 z=z%~0^9wKW@$**%>9_6tnZ8DXl}crFcX#3P#S5z94M0^URa&9a`1Iu)p1*j7UC}5- zVAV*@hIfrMTw6z9Zx2Q;4dFMh2K2<%d7+7Gqe+a9T|uqfLPg<5;+jQT7g0+T(Us15i?j@TJGQF}r0mu1;>_WZb-&S2@yd)1#@y=JEC zy6XG*;e%MrK2{75Xcz{H#S+d94xs<|5gJKSY1GU(;tCZj*4C=_GD87*IDTJV(W#2g z*}(x3phLagps7JYXRyqT;1EMFOY)@U;mGe}?XA>$)&Co?hNJ=eQxJpue^yRq(#h1s mZSZj9d4?UB_ZN`4p8N%JSwyC;G2iR}0000^1=Sf6CRCt`NR!eIWQ4~IR=4O&f)0nhr zQWplbv@QxFQWY#xwNR`Z!LG!O?(3qiTnX-6rQlq>aAxY1!32YWk)0BmdkkcFx44x2`D-WU5wcuzN58*%wco5}PsYv6y=pV#J|_SdvvoZcCuF`0x}5hKDS45T}qO z2|7s_rP);PA}}n)1{6yrlM)rwGz}`{_PWZ33)Z_&81l4T_#DIx(s%pTBb*0F? z=oFNyvBL-9#P~5++uEtDZ$Vfn6h&$o^B}NKL7i2`8n~|wGZnp|p624W=!Pu`Y!U)< z_M>ver@+_mKj7YjG;rD7VdkJsLtiu^QnoEYlR#=^#RtpFE09Xv1xZmHg2q9U@fX}h zHk{V-x+X|r32QSlvLD{Oe&%Z5&4b382F(KCoZEBOOkn-r8wx>eG}0*4Fdj zeLXO7d;)Qo-eb@xSiyXL!{S}IG%E(JQ%~4DXs*kSzz9@TRX9Cy9G`WIp#AIAB#;C~ zqd?wpWwI!mP3q=#0O$mKgM{|v*4FJe>KMk!pvgnY=E#XEl`67#=gFjXAl46r^>%Sd zU~_VRGHCM9BWQCQrr*tSOkdb9-eGf`J}t=o$)Fd|L;u5P3nS$OPT2ndv8!tJnA)S& P00000NkvXXu0mjfA$o%V literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png new file mode 100644 index 0000000000000000000000000000000000000000..3e30a758cc7ddabe4f1bac199e23359e8acf8db4 GIT binary patch literal 6905 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¥8W@O)rn*9*qRlyp6%{@H%o7!lF`0_y+rY!F>F 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 literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png new file mode 100644 index 0000000000000000000000000000000000000000..317c3f5ce9f3dca65d6214e27f233924517631bc GIT binary patch literal 1010 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 AI{*Lx literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cd04d23fd0a12c58045ca0bcf9a36331840cb7 GIT binary patch literal 1373 zcmV-j1)}^3|4BqaRCt`tnM-UNRTPHLof&(^c8Kk$ zd6YK@n$jX9HXt<%DwYikkbn({MJs_2j|!wDNC;Je4IzS65OS&@7HwCs#U>V? zKgC}Ye2fVpG8Ca~+b;6g1wLk&Zvof9YP7+A!e0}brlBy^>kW!hhM{NJXh)=!N5ICM zQ(!e5*l7n=uCJGD!!Wc=re6pWd>QW}Lc(m;W%H-FvTE0Bb=lXK5)3`*c)}!H;xLz* zbYR8PhsU(nj=e-9!$TCMmX`A(H-Ab$yRc|8G&9QyX8jfxR&D^x0(Ne8THR3Htn$l- zW!YQAE_v6TBLtRL-<%Q*4NDWC0elEPYs3t;?8~bB%E}sih@w=vvPtRm9fa0C|Kmjs zjI1#O(EuGRo9-7Q!-KTRmIW+dSDnu(7@ANo4ltmV;hN}AYilLd5skK@ts7ifmPwk> zR3``pmOs*#%4iNu>$FS?0Vl=>7NJP47>=eM^1+oo}(Q z`zIdo)6c)sFPAP;GLcYk9;DEc8|5IJ>z~?z<7wR^N?As(cG73=vw|CipOF-8C2kY6*j;D zj>9iJ_l#TP?E(KE)DL*Jyz1BupRXH3==jg0v$dud6wgLyn++g(K2dThO zC6!Ei0>i=;ULrkk-#xw~XQ04pxaH;g@i&gqI~t6RvNcG6oL{`CWzrF+z1T(3>JBUx zdC1i*s7{Cc7em{~hap=7$45>fN||O{SeB`~mPKL_C#}>iF7WyHuryykgpL>`Fgh3? fiw^8LTm$RBJT_~|^%PR`00000NkvXXu0mjfsJx0A literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png new file mode 100644 index 0000000000000000000000000000000000000000..fb51d6971ba61c7ca9e9fd19c37944400e634f49 GIT binary patch literal 1245 zcmV<31S0#1P)^3e@R3^RCt{2TF*-qQ5^ry?%N->TiVgE zC?iU!z@SSQWEuT9cnF1{Zh0tzE_#T-OGFf8P!ZXoTSDL;Afm2?9mS}d1YSLruDUzx z?EL8ac{`)4?ds01<4n*;9^=lunfZLb@B7~8&HFwCxAVmzE{&m3h!jO3%d#j4U@lSSa>6vte*W3RTyHVwNpLSF zpRz0K%gZZauB?Q@VLs!x5ek`xLF`m3nM~+xNF$$2G3SdgLfBz5WY^YJH7BlIzCa!A zZInzT3ay~{#NCn(rIk#E#wWijw zdN`rOIx+9ugd+^`%LK46OmmGBj^GHcwqv7Wy}Gp?^Y#t8u2VXzlAlQIsUsnTk9#J$J+4WF@12rvA?_NKp*3&0xDWBiK(Se{+up7cK zOj=x8qF6NQivg>eCOJsbWnN#}06c(X$EKW`lSf}#U{#avR<;<*OBxUg6|6sesEOXc zc}5Bkvwpy0^56h2;8Y5wTR?VTgBt4h(ePNR`h}uwJ(bzgfb9@wL4k+7vZGkY%Asll;F(M&OL-ojrAm@F zSQD}`Z>Y)u3~f9&r~bz;Xkv1T?1>faB+3feCRE=7{Fha;w3uF!O>B5zKuton{ToPn zNYCX+Wu-PugLV=%30Wl%&*fI-{QO4eH5sFp2fd(rA=?JdO!Z9bDT;u+S6^;b3t1)4 z<_Bi^;a-1s)+A)xKivHs$*uT#Dr9aUzwku3V&U^t$lRhZu4_E><|yPs_&gCZx4_4E zLw!Ac8kwLc&tJ(|F3xQQ&xOn_5XxF!lfnmbl^Ecykhz2;&BLLos-(tam9>CZLgp42 ztuj31ww*gmgYREbBvRQTfoDSI7Vsu!tp}S9(6OUOD%TD#h0HCSPKhaq8{w;2$aeax z%dPm;BxFHaS}cb$1_W?v(T$J=dTDVJ{x2M-UU;k~}yvCy<{9cVTawxJ8An21p|3N5?*kkn_Q1x8 zi+pkjErGSpfNk~w7lp$H^5kV!;ARCt{2TU%%xRT%zfc4o7i-E1zz zL_xepLuwiuks>8Uia~^s+Ip$9_>e+{KB=I6v`Brk7O4;7Lm-8Mk|0_OzDPlof>Nrf zjYOhRQHvs^xzFBb*Z(^+lWel-WH-Cco+7%jF==&=Z)X)&sbE~AmaW_=@ z8L~ug25hn~Jhzulyzx4P>VlL?XRHVM0t)r^JVbj3o}}Y%y+flPpQjj;W=X@D^}!iK z!bA8dY!+(#$d2uTEWWMTc$}~M#X(yz41J5z~Eu{Cr^LCwp}M(JZAf(WGY3+UO7rV+q)>vj(3$q zaTs;=N{*V(FD%m6UwuQN2)vzKgjJOZ8wq-8=#Z5lk$bk_O4w0zPFyI~6tmsCe1zk= zF6OvieK*3U5{AlTGFe)jougzjC7ttve@Sx)#T+r$iX@EuG?hwI$9?zE$+zDWUQb3F zMv{a%Vy>98+Z5eZT1YoTZEdae;=yNE$jXvYJG?MY!-$Ky3MsoV-ZYhRzQMV&orlzyF>CM_KDEF*&|XE`MGKHM#qgUG8Dm%v$7!Y$2B zG<#bsg+g^666VyBQ(j%yDo-uT#oYV?&COgVJskEV1qC^UC7dy;lv!b^R)F2*N(d`A0@T@amEI~q7N-TlpkC$~mhCUFk(W&JGS>7qwcH9o7D>Y&e_o@% zuKiv1t_t{>W{$c#JE*BCCP=%X=7f=;L?RJ7|M?g6?y2`F+R|Lss!Ktp#UbhJ@M+rf z_%2#Pr0^=W+$t=U)+rc`h%=#V8H5pzR7EX$l_mvYXJ-_wu2jO7XNJQHmzclToG?^zdD)=n_Ya6s2@;83pz*NaDbR^Q9vHVyk@N))5F} zX%Y~zj8`o%{`G2t2O%++8CWK+h2?C)sh~>F1Yz_Dw4;(7#nq@cMhPyCA5o}z;|IzM ztc~k}x~QFo2XAVO#glprsI8gGJV90l0{^9>++J@R-C6^a!AA{)dT4x;%c>H%%Uj-Q)qA zg&N1!l7)!Dk(@Rj^!407*qoM6N<$f)k}$%m4rY literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png new file mode 100644 index 0000000000000000000000000000000000000000..50e063754385ddbd1f82f4a0f5045fd3f158952e GIT binary patch literal 1492 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 Ef)q`}TmS$7 literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6016adc60bb47dce40291d3f64ad589ac82425 GIT binary patch literal 1803 zcmV+m2lV)fP)^5tw}^dRCt{2UE6OIRT%%~vfWl`x9cUg zph(b^2Omg8(%=IoSpEQ$Hj0flX(C3A37ROj4>l%>iZ5znO=@VeHBB)zQAvHU;f+V4 z2@gC-lpqR}kg#nLdfSWN@60*NP@(Buot>FqI80}EW?+8%-OjgXel=+o^6lHq;^p5; z^5-XbvyVp?j}9I=9y-Mv6&`au&hj|HV}kiOgE#ElDBMOMA7J1B-frRDLp*v`ACmyU zK=M2~?dk*+6-Kdn-!YSn60y`Z=lV~*OGtIrf?rt)iPc_6PMPr?ag z7zQmbFVn)pB9$u@N&*aBr>3SxYG`Pna#h7PL(W@qPU z_D1Mr@6Ujf%uk=IkV5qKb1L zljY9BR6$;at!-sxgq$bXR1)_N4t_s(p1vL#qt@1( zii!A3aEHIT%ZN0Ycc1Q`5q*Ow)ubD?++JV23&f zr3$j`-e-4H8^=7jZPF~y4rNe?|2v=DPRDF=BviadnB4MPk z04`90SY@2xP7#;`f&ZD?3b$S3g0=!PR=8WJ!mD>F-*i{=T*LufG%hr%dyxsk5gZc; z>qB70HZG|Jwu96746&P}UNc9X5 zsP4xNoVl=OnR$^b^5V5wGBWY7z_Q(i9s2OP3A8#iRmwJI=?$JIFDxz!3ycHMd1`8G z6!(UEbdrf3Ss?zQ#w-)~YG3T;$FRQZ|J)Gw=mf6nK)7%m;bz|NE{UY`h(e9A#0)OMB|C=0~g87N1Lz);&+Zh;tx#)D`XMa+%=mv)vD;6H=}qFP2# z%f_L$vz$VZr&-@MFV7e08t+Fj28Pnkasyq{IsPrtuFj{3-hNXo8AH1$Y6z{J)LIQ5B$Yvz$VMA~MPVRsT2!uK1t>da1veAXVE(!^_6c)e* zGzG0pElf*QbaNmOYPAqstwQz^%WzNqdYUd@x$3woj~fuKpkfIXHwZG?mMAL%&w@Zm z{dQW%TPHxdu`qs&h6diM$=@Z7L~sGOec=B4=*!_z!HG@&PDQvAAaH`mL6Qjt2eh;_ z(`ex+J-&5IO@I+9W=R4J3FM7`_q|ZDgcPW)TZ1Hk;&B2Rs%P@;+m4YX#Hi#gDU-?2 z;LxY^$GJa+mS9`LBtQ|uz8F3t3<+GwSp*JI98H2dRmKdGCAuxtYM~X1B01ZTq2ZAN z{V?@2?cA|l$l@hJgqD*i@_-PbWp4!Jj0+VDID+*J-~}av42AA~-XD|KsYt<9;rCE( zJU%s@I2mMH%meH<-!D0<$sik27rBjA331~B=u|+tF+oDyBHP-?tA#ekyEZlRl5k#XogDJ%j7V4YanJRx4p9zJYXXc2b?5JTe_Q)`OTf(SU?<-?BJTe ti~x`%ikQf|`}pS%DgAXAYyLWne*qcG$~cE!OM(CZ002ovPDHLkV1g$zNgn_J literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png b/public/windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png new file mode 100644 index 0000000000000000000000000000000000000000..7709d52664fdbdcca2d28e0c2afea291a7c85f04 GIT binary patch literal 2198 zcmV;H2x<3;P)^7I7vi7RCt{2U0rMxRTMt6yWP@-v<0FT z6B7v7MFcUy7=lI`)B2aFsVFFf@?^j_pR}6R#9+X`2YtiD#8`sSh&Ci97z@clqTzui zKtL%-Y(gSY18r%`mbSa&`R?31ot>8GZLyqQyd^nUG@}toxWilDMbt_F1lN0=9WZ(gGvMN?Z3l>znTzLR4 z!6~>sR^QOLPMRYN5{i&xY7USir5w$Nw&UePLpLdrsG$ee-bc%q-$RL-1!ORVbb5^b z=)X!AFa1u#BcoJTyGSUhJ*BB|(qbeqr|_?B+#)fl{Y|n1g2*8sLuzd7Hofrt)6}-( zMM~bgl4_Xzh%rMs$THCo!llbs=*vTg>BtX1iO~R)?GXaF1;;y?^Us<4lgdW5%cFaz zA|DTb@ZQ_BZOgNCdwg7c$MDAm=~dL6Uk zx)rQ8$xc_TapOXExVzZq!|dRN2D1Y=19$M7KlY^jQIX=h2?9uZJMkcf5u%+&cDS(l zMgX%1I0JVGT2?o%qI2he6H%m`Cny0VA%LawLUh9UBF(T!B8vtf`99)c`b1~x(Iu`#M- z1pO#=dt4Ux5)D2f2Wn-MD!VoVaY5kuCk7y<})Myv!-*|uV2-9n!cD>lH3v$@pVWUl-O zbw;cd058KMBQy#-Jy9GV5Xy{Lset(WnI|5nHLDw`x;j4RCMdKSu~GnJApU>t)i(L( zkHwjag*GErD!>F4dpRPs8L?6z3|p<0wE)5ZBLK}X0?-U20L?H0&h2@qwoMDhmKmaJijVjQBZP;`CIbVPORcYId z015@TQ$;?(sjr+Nh`kO0pa!}t07Nq=LW!!NeV4D$+BHex?IWg^*sK5^5glImwNG#f zPCb#L5|)Q)i>ROL(~@bO;o`(hC?^%37=iOEZM^s zPmxmtT|`DOR~R-Z$%?VE)l<$E72-^RH$R+mwlF);{6kDWxC4j2X_Df&2i&VLbU!%) za6K*@2DBa0e4}F@{e0@QDDK&43OY{<744j7o8L8aL1#b_2hJ%bi_4$n<3YaONuHAC zN(iWj``wYFqADl~Q>r?X1_~C3?P(D?!r>xlsm(8G4k&KBnDZ0h9wQ(t-?5vm$|iE^ z%DZy|wd|^#2&#gjFr{rQP!3=a5Nbl}eYJxXz$wVT!i?^beOdSbTa1D~`_g=D=FVPj zOUN@40QExHI8Rkj0}r6AFxk_PueiLyt$Fa;rL?p>8Q}wP!W|GsKOZ-6*D-QN0^S5& zcb6mK=j?d^SZaI$R;#y?Pys^8k0Zd0v*0FH_ARAGW6<)KvT) zo07M+tOP;m#`rUEzR}#kv}nc2eBB5$EFr5YLA!xb;8u YFJ=vo1JpGM!vFvP07*qoM6N<$g2r9;mH+?% literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-16.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-16.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf35ab851a9e88ac6be00e1b71d4737bfbc48d7 GIT binary patch literal 629 zcmV-*0*d{KP)^17fD1xRCt_)Q%!3VQ4~Gz%?mLz38^28 z(rR>}GJ>GEb0NAB|A1d$DW%Yr8xh)qV2f5=xpS|g7D`bNK^K;8`~^}dxD^GZX)-Nj zY@##odGC9ZIA~h$K$v+s=e~39hZ-0>dSYv#PQr&4LxRmJ4d zYZt?@k;}T%=}1cQKei|qi~8w{#qinu%LT>hX(QO`x=<5_%PKP)oKMna2Q;IRx2i{8m=DsECQOaR0C*Z?Eeax z(j-aIZnrI9;`%f`fB9;GhQ4hI`tdwx;r{FtTd?&|f8;rdN+~?JGlieO5>QL1>O>@4 zQn;(~7PuxVFRvSi4%T||1wE}ewhH+yZvkBkS%^1%1J~)RCt`7l}&3CQ51&XJ98%=&4*~) zP;KcCa3Nh(sz#B5;HoGT6%o2HSYuZ$Xo;a%l%PcycA-$kF2q6>rA5$%Kft1*3q{f2 zV5^HJo#u09Jm=P#B-N(c6DDM4?tRWV@44qhK72GQQWJM(Ow&vVA$07(90yh?)G|AD zE0vTC3$+A?M}~(GYi~oPS^S|6bz5RfEehs>$%$;q*BbZgS5Q&5lKh!Ij z!7Rz|$`$q!#PowFc)j!vVOnI_c2l0NX;>rYN8^1s(SJ-a*c4FHHIzyvWG2T|3Vd%{ z7HrC^S?0Fw!0-2|y}ZW*@+RKgxvvAPp-s_I)e!Le)uydX(*(@*g388qEbAnp=*p;2 z=z%~0^9wKW@$**%>9_6tnZ8DXl}crFcX#3P#S5z94M0^URa&9a`1Iu)p1*j7UC}5- zVAV*@hIfrMTw6z9Zx2Q;4dFMh2K2<%d7+7Gqe+a9T|uqfLPg<5;+jQT7g0+T(Us15i?j@TJGQF}r0mu1;>_WZb-&S2@yd)1#@y=JEC zy6XG*;e%MrK2{75Xcz{H#S+d94xs<|5gJKSY1GU(;tCZj*4C=_GD87*IDTJV(W#2g z*}(x3phLagps7JYXRyqT;1EMFOY)@U;mGe}?XA>$)&Co?hNJ=eQxJpue^yRq(#h1s mZSZj9d4?UB_ZN`4p8N%JSwyC;G2iR}0000^1=Sf6CRCt`NR!eIWQ4~IR=4O&f)0nhr zQWplbv@QxFQWY#xwNR`Z!LG!O?(3qiTnX-6rQlq>aAxY1!32YWk)0BmdkkcFx44x2`D-WU5wcuzN58*%wco5}PsYv6y=pV#J|_SdvvoZcCuF`0x}5hKDS45T}qO z2|7s_rP);PA}}n)1{6yrlM)rwGz}`{_PWZ33)Z_&81l4T_#DIx(s%pTBb*0F? z=oFNyvBL-9#P~5++uEtDZ$Vfn6h&$o^B}NKL7i2`8n~|wGZnp|p624W=!Pu`Y!U)< z_M>ver@+_mKj7YjG;rD7VdkJsLtiu^QnoEYlR#=^#RtpFE09Xv1xZmHg2q9U@fX}h zHk{V-x+X|r32QSlvLD{Oe&%Z5&4b382F(KCoZEBOOkn-r8wx>eG}0*4Fdj zeLXO7d;)Qo-eb@xSiyXL!{S}IG%E(JQ%~4DXs*kSzz9@TRX9Cy9G`WIp#AIAB#;C~ zqd?wpWwI!mP3q=#0O$mKgM{|v*4FJe>KMk!pvgnY=E#XEl`67#=gFjXAl46r^>%Sd zU~_VRGHCM9BWQCQrr*tSOkdb9-eGf`J}t=o$)Fd|L;u5P3nS$OPT2ndv8!tJnA)S& P00000NkvXXu0mjfA$o%V literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-256.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-256.png new file mode 100644 index 0000000000000000000000000000000000000000..3e30a758cc7ddabe4f1bac199e23359e8acf8db4 GIT binary patch literal 6905 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¥8W@O)rn*9*qRlyp6%{@H%o7!lF`0_y+rY!F>F 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 literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-30.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-30.png new file mode 100644 index 0000000000000000000000000000000000000000..317c3f5ce9f3dca65d6214e27f233924517631bc GIT binary patch literal 1010 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 AI{*Lx literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-44.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-44.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cd04d23fd0a12c58045ca0bcf9a36331840cb7 GIT binary patch literal 1373 zcmV-j1)}^3|4BqaRCt`tnM-UNRTPHLof&(^c8Kk$ zd6YK@n$jX9HXt<%DwYikkbn({MJs_2j|!wDNC;Je4IzS65OS&@7HwCs#U>V? zKgC}Ye2fVpG8Ca~+b;6g1wLk&Zvof9YP7+A!e0}brlBy^>kW!hhM{NJXh)=!N5ICM zQ(!e5*l7n=uCJGD!!Wc=re6pWd>QW}Lc(m;W%H-FvTE0Bb=lXK5)3`*c)}!H;xLz* zbYR8PhsU(nj=e-9!$TCMmX`A(H-Ab$yRc|8G&9QyX8jfxR&D^x0(Ne8THR3Htn$l- zW!YQAE_v6TBLtRL-<%Q*4NDWC0elEPYs3t;?8~bB%E}sih@w=vvPtRm9fa0C|Kmjs zjI1#O(EuGRo9-7Q!-KTRmIW+dSDnu(7@ANo4ltmV;hN}AYilLd5skK@ts7ifmPwk> zR3``pmOs*#%4iNu>$FS?0Vl=>7NJP47>=eM^1+oo}(Q z`zIdo)6c)sFPAP;GLcYk9;DEc8|5IJ>z~?z<7wR^N?As(cG73=vw|CipOF-8C2kY6*j;D zj>9iJ_l#TP?E(KE)DL*Jyz1BupRXH3==jg0v$dud6wgLyn++g(K2dThO zC6!Ei0>i=;ULrkk-#xw~XQ04pxaH;g@i&gqI~t6RvNcG6oL{`CWzrF+z1T(3>JBUx zdC1i*s7{Cc7em{~hap=7$45>fN||O{SeB`~mPKL_C#}>iF7WyHuryykgpL>`Fgh3? fiw^8LTm$RBJT_~|^%PR`00000NkvXXu0mjfsJx0A literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-48.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-48.png new file mode 100644 index 0000000000000000000000000000000000000000..fb51d6971ba61c7ca9e9fd19c37944400e634f49 GIT binary patch literal 1245 zcmV<31S0#1P)^3e@R3^RCt{2TF*-qQ5^ry?%N->TiVgE zC?iU!z@SSQWEuT9cnF1{Zh0tzE_#T-OGFf8P!ZXoTSDL;Afm2?9mS}d1YSLruDUzx z?EL8ac{`)4?ds01<4n*;9^=lunfZLb@B7~8&HFwCxAVmzE{&m3h!jO3%d#j4U@lSSa>6vte*W3RTyHVwNpLSF zpRz0K%gZZauB?Q@VLs!x5ek`xLF`m3nM~+xNF$$2G3SdgLfBz5WY^YJH7BlIzCa!A zZInzT3ay~{#NCn(rIk#E#wWijw zdN`rOIx+9ugd+^`%LK46OmmGBj^GHcwqv7Wy}Gp?^Y#t8u2VXzlAlQIsUsnTk9#J$J+4WF@12rvA?_NKp*3&0xDWBiK(Se{+up7cK zOj=x8qF6NQivg>eCOJsbWnN#}06c(X$EKW`lSf}#U{#avR<;<*OBxUg6|6sesEOXc zc}5Bkvwpy0^56h2;8Y5wTR?VTgBt4h(ePNR`h}uwJ(bzgfb9@wL4k+7vZGkY%Asll;F(M&OL-ojrAm@F zSQD}`Z>Y)u3~f9&r~bz;Xkv1T?1>faB+3feCRE=7{Fha;w3uF!O>B5zKuton{ToPn zNYCX+Wu-PugLV=%30Wl%&*fI-{QO4eH5sFp2fd(rA=?JdO!Z9bDT;u+S6^;b3t1)4 z<_Bi^;a-1s)+A)xKivHs$*uT#Dr9aUzwku3V&U^t$lRhZu4_E><|yPs_&gCZx4_4E zLw!Ac8kwLc&tJ(|F3xQQ&xOn_5XxF!lfnmbl^Ecykhz2;&BLLos-(tam9>CZLgp42 ztuj31ww*gmgYREbBvRQTfoDSI7Vsu!tp}S9(6OUOD%TD#h0HCSPKhaq8{w;2$aeax z%dPm;BxFHaS}cb$1_W?v(T$J=dTDVJ{x2M-UU;k~}yvCy<{9cVTawxJ8An21p|3N5?*kkn_Q1x8 zi+pkjErGSpfNk~w7lp$H^5kV!;ARCt{2TU%%xRT%zfc4o7i-E1zz zL_xepLuwiuks>8Uia~^s+Ip$9_>e+{KB=I6v`Brk7O4;7Lm-8Mk|0_OzDPlof>Nrf zjYOhRQHvs^xzFBb*Z(^+lWel-WH-Cco+7%jF==&=Z)X)&sbE~AmaW_=@ z8L~ug25hn~Jhzulyzx4P>VlL?XRHVM0t)r^JVbj3o}}Y%y+flPpQjj;W=X@D^}!iK z!bA8dY!+(#$d2uTEWWMTc$}~M#X(yz41J5z~Eu{Cr^LCwp}M(JZAf(WGY3+UO7rV+q)>vj(3$q zaTs;=N{*V(FD%m6UwuQN2)vzKgjJOZ8wq-8=#Z5lk$bk_O4w0zPFyI~6tmsCe1zk= zF6OvieK*3U5{AlTGFe)jougzjC7ttve@Sx)#T+r$iX@EuG?hwI$9?zE$+zDWUQb3F zMv{a%Vy>98+Z5eZT1YoTZEdae;=yNE$jXvYJG?MY!-$Ky3MsoV-ZYhRzQMV&orlzyF>CM_KDEF*&|XE`MGKHM#qgUG8Dm%v$7!Y$2B zG<#bsg+g^666VyBQ(j%yDo-uT#oYV?&COgVJskEV1qC^UC7dy;lv!b^R)F2*N(d`A0@T@amEI~q7N-TlpkC$~mhCUFk(W&JGS>7qwcH9o7D>Y&e_o@% zuKiv1t_t{>W{$c#JE*BCCP=%X=7f=;L?RJ7|M?g6?y2`F+R|Lss!Ktp#UbhJ@M+rf z_%2#Pr0^=W+$t=U)+rc`h%=#V8H5pzR7EX$l_mvYXJ-_wu2jO7XNJQHmzclToG?^zdD)=n_Ya6s2@;83pz*NaDbR^Q9vHVyk@N))5F} zX%Y~zj8`o%{`G2t2O%++8CWK+h2?C)sh~>F1Yz_Dw4;(7#nq@cMhPyCA5o}z;|IzM ztc~k}x~QFo2XAVO#glprsI8gGJV90l0{^9>++J@R-C6^a!AA{)dT4x;%c>H%%Uj-Q)qA zg&N1!l7)!Dk(@Rj^!407*qoM6N<$f)k}$%m4rY literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-64.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-64.png new file mode 100644 index 0000000000000000000000000000000000000000..50e063754385ddbd1f82f4a0f5045fd3f158952e GIT binary patch literal 1492 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 Ef)q`}TmS$7 literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-80.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-80.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6016adc60bb47dce40291d3f64ad589ac82425 GIT binary patch literal 1803 zcmV+m2lV)fP)^5tw}^dRCt{2UE6OIRT%%~vfWl`x9cUg zph(b^2Omg8(%=IoSpEQ$Hj0flX(C3A37ROj4>l%>iZ5znO=@VeHBB)zQAvHU;f+V4 z2@gC-lpqR}kg#nLdfSWN@60*NP@(Buot>FqI80}EW?+8%-OjgXel=+o^6lHq;^p5; z^5-XbvyVp?j}9I=9y-Mv6&`au&hj|HV}kiOgE#ElDBMOMA7J1B-frRDLp*v`ACmyU zK=M2~?dk*+6-Kdn-!YSn60y`Z=lV~*OGtIrf?rt)iPc_6PMPr?ag z7zQmbFVn)pB9$u@N&*aBr>3SxYG`Pna#h7PL(W@qPU z_D1Mr@6Ujf%uk=IkV5qKb1L zljY9BR6$;at!-sxgq$bXR1)_N4t_s(p1vL#qt@1( zii!A3aEHIT%ZN0Ycc1Q`5q*Ow)ubD?++JV23&f zr3$j`-e-4H8^=7jZPF~y4rNe?|2v=DPRDF=BviadnB4MPk z04`90SY@2xP7#;`f&ZD?3b$S3g0=!PR=8WJ!mD>F-*i{=T*LufG%hr%dyxsk5gZc; z>qB70HZG|Jwu96746&P}UNc9X5 zsP4xNoVl=OnR$^b^5V5wGBWY7z_Q(i9s2OP3A8#iRmwJI=?$JIFDxz!3ycHMd1`8G z6!(UEbdrf3Ss?zQ#w-)~YG3T;$FRQZ|J)Gw=mf6nK)7%m;bz|NE{UY`h(e9A#0)OMB|C=0~g87N1Lz);&+Zh;tx#)D`XMa+%=mv)vD;6H=}qFP2# z%f_L$vz$VZr&-@MFV7e08t+Fj28Pnkasyq{IsPrtuFj{3-hNXo8AH1$Y6z{J)LIQ5B$Yvz$VMA~MPVRsT2!uK1t>da1veAXVE(!^_6c)e* zGzG0pElf*QbaNmOYPAqstwQz^%WzNqdYUd@x$3woj~fuKpkfIXHwZG?mMAL%&w@Zm z{dQW%TPHxdu`qs&h6diM$=@Z7L~sGOec=B4=*!_z!HG@&PDQvAAaH`mL6Qjt2eh;_ z(`ex+J-&5IO@I+9W=R4J3FM7`_q|ZDgcPW)TZ1Hk;&B2Rs%P@;+m4YX#Hi#gDU-?2 z;LxY^$GJa+mS9`LBtQ|uz8F3t3<+GwSp*JI98H2dRmKdGCAuxtYM~X1B01ZTq2ZAN z{V?@2?cA|l$l@hJgqD*i@_-PbWp4!Jj0+VDID+*J-~}av42AA~-XD|KsYt<9;rCE( zJU%s@I2mMH%meH<-!D0<$sik27rBjA331~B=u|+tF+oDyBHP-?tA#ekyEZlRl5k#XogDJ%j7V4YanJRx4p9zJYXXc2b?5JTe_Q)`OTf(SU?<-?BJTe ti~x`%ikQf|`}pS%DgAXAYyLWne*qcG$~cE!OM(CZ002ovPDHLkV1g$zNgn_J literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.altform-unplated_targetsize-96.png b/public/windows11/Square44x44Logo.altform-unplated_targetsize-96.png new file mode 100644 index 0000000000000000000000000000000000000000..7709d52664fdbdcca2d28e0c2afea291a7c85f04 GIT binary patch literal 2198 zcmV;H2x<3;P)^7I7vi7RCt{2U0rMxRTMt6yWP@-v<0FT z6B7v7MFcUy7=lI`)B2aFsVFFf@?^j_pR}6R#9+X`2YtiD#8`sSh&Ci97z@clqTzui zKtL%-Y(gSY18r%`mbSa&`R?31ot>8GZLyqQyd^nUG@}toxWilDMbt_F1lN0=9WZ(gGvMN?Z3l>znTzLR4 z!6~>sR^QOLPMRYN5{i&xY7USir5w$Nw&UePLpLdrsG$ee-bc%q-$RL-1!ORVbb5^b z=)X!AFa1u#BcoJTyGSUhJ*BB|(qbeqr|_?B+#)fl{Y|n1g2*8sLuzd7Hofrt)6}-( zMM~bgl4_Xzh%rMs$THCo!llbs=*vTg>BtX1iO~R)?GXaF1;;y?^Us<4lgdW5%cFaz zA|DTb@ZQ_BZOgNCdwg7c$MDAm=~dL6Uk zx)rQ8$xc_TapOXExVzZq!|dRN2D1Y=19$M7KlY^jQIX=h2?9uZJMkcf5u%+&cDS(l zMgX%1I0JVGT2?o%qI2he6H%m`Cny0VA%LawLUh9UBF(T!B8vtf`99)c`b1~x(Iu`#M- z1pO#=dt4Ux5)D2f2Wn-MD!VoVaY5kuCk7y<})Myv!-*|uV2-9n!cD>lH3v$@pVWUl-O zbw;cd058KMBQy#-Jy9GV5Xy{Lset(WnI|5nHLDw`x;j4RCMdKSu~GnJApU>t)i(L( zkHwjag*GErD!>F4dpRPs8L?6z3|p<0wE)5ZBLK}X0?-U20L?H0&h2@qwoMDhmKmaJijVjQBZP;`CIbVPORcYId z015@TQ$;?(sjr+Nh`kO0pa!}t07Nq=LW!!NeV4D$+BHex?IWg^*sK5^5glImwNG#f zPCb#L5|)Q)i>ROL(~@bO;o`(hC?^%37=iOEZM^s zPmxmtT|`DOR~R-Z$%?VE)l<$E72-^RH$R+mwlF);{6kDWxC4j2X_Df&2i&VLbU!%) za6K*@2DBa0e4}F@{e0@QDDK&43OY{<744j7o8L8aL1#b_2hJ%bi_4$n<3YaONuHAC zN(iWj``wYFqADl~Q>r?X1_~C3?P(D?!r>xlsm(8G4k&KBnDZ0h9wQ(t-?5vm$|iE^ z%DZy|wd|^#2&#gjFr{rQP!3=a5Nbl}eYJxXz$wVT!i?^beOdSbTa1D~`_g=D=FVPj zOUN@40QExHI8Rkj0}r6AFxk_PueiLyt$Fa;rL?p>8Q}wP!W|GsKOZ-6*D-QN0^S5& zcb6mK=j?d^SZaI$R;#y?Pys^8k0Zd0v*0FH_ARAGW6<)KvT) zo07M+tOP;m#`rUEzR}#kv}nc2eBB5$EFr5YLA!xb;8u YFJ=vo1JpGM!vFvP07*qoM6N<$g2r9;mH+?% literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.scale-100.png b/public/windows11/Square44x44Logo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cd04d23fd0a12c58045ca0bcf9a36331840cb7 GIT binary patch literal 1373 zcmV-j1)}^3|4BqaRCt`tnM-UNRTPHLof&(^c8Kk$ zd6YK@n$jX9HXt<%DwYikkbn({MJs_2j|!wDNC;Je4IzS65OS&@7HwCs#U>V? zKgC}Ye2fVpG8Ca~+b;6g1wLk&Zvof9YP7+A!e0}brlBy^>kW!hhM{NJXh)=!N5ICM zQ(!e5*l7n=uCJGD!!Wc=re6pWd>QW}Lc(m;W%H-FvTE0Bb=lXK5)3`*c)}!H;xLz* zbYR8PhsU(nj=e-9!$TCMmX`A(H-Ab$yRc|8G&9QyX8jfxR&D^x0(Ne8THR3Htn$l- zW!YQAE_v6TBLtRL-<%Q*4NDWC0elEPYs3t;?8~bB%E}sih@w=vvPtRm9fa0C|Kmjs zjI1#O(EuGRo9-7Q!-KTRmIW+dSDnu(7@ANo4ltmV;hN}AYilLd5skK@ts7ifmPwk> zR3``pmOs*#%4iNu>$FS?0Vl=>7NJP47>=eM^1+oo}(Q z`zIdo)6c)sFPAP;GLcYk9;DEc8|5IJ>z~?z<7wR^N?As(cG73=vw|CipOF-8C2kY6*j;D zj>9iJ_l#TP?E(KE)DL*Jyz1BupRXH3==jg0v$dud6wgLyn++g(K2dThO zC6!Ei0>i=;ULrkk-#xw~XQ04pxaH;g@i&gqI~t6RvNcG6oL{`CWzrF+z1T(3>JBUx zdC1i*s7{Cc7em{~hap=7$45>fN||O{SeB`~mPKL_C#}>iF7WyHuryykgpL>`Fgh3? fiw^8LTm$RBJT_~|^%PR`00000NkvXXu0mjfsJx0A literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.scale-125.png b/public/windows11/Square44x44Logo.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..ed29e050f683dd7c6aa57786732bc44c03097393 GIT binary patch literal 1693 zcmV;O24eY%P)^5KS@MERCt`#T1#&mRTMt+@Ys&+B#w({ zDpV^9Q5qg%QK3RnE3!fDp9m5Xg{le?MZ8prx{Hz))GiXT2@5C)SRf=;q_CiY2vVRD z2mwiyMp0PM4UwVsEB4sK`R>d##!c+0o$*YLbUkBx9_PE~anHT?Q;8+sJ1F6pzOiWV z`Tcx4%Izq(BsY!xD@AUr+%9vQVEvckdl-vhVo?DMC%BT&U*|)LEI_g>lg~w~R4M~} zM0<|)Kb`(-@f`jDF4ew@zg*(O2+kE**2|TOlFQ{KzL`iO|A}FCekc?)Sl=@13xkX? zjv+SI(@pCs3{7Dzbr|8P; zoD_>j0>aZcv>4Z?&>YD_gDav3h7UbXQIN3T6bkD!{nZTR3k3}B{l2Jre@Qh ze@LCNsC(exA{FjRyeu3~P(0pM_hqdLYRj@!p~wzO!PeZ8P`yZ$&lf14UK2@0cNN@5 zZHad^itm=dp^(PZdAkF=-m zl*GhSWJ_VaX3H;U?~6Rd!t8DRR;9%tQH7RD5&vy{d+tChb)=R<>=sn{e)d5!=9)) z6}}$ps5;L;T&+-=6)1&89>iQT;$%zP(}V(mZm!RGUZJ=tj=)ta@M%A+S=xft?`=M&&c56pWD`Bz^vR{k+qIn6JFB)gb#=yses+bjnO+;rQfmn44gIU~LJ{CrLF)ti4J5JUl~o!V9QYrD z$j@6?upp=;^NZI(auX~*#sh^{q5U+s0nqxu{kkwdMek0&C2nZ%_==$Q&CJe8KV17+aH)0x-_o|2&9?;I>oh3AYJ9h#0fS+>kAED&IAYQI6p+Mr z0#mli6#?u6#&gc30b7cLI?F%I^XVCjuP8S6{4PiyRj!zVq3r)`8nDey2jb7jB$yrn nt&esNJAGV)7<(cN23-FE$nXS8CZphV00000NkvXXu0mjf|3flA literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.scale-150.png b/public/windows11/Square44x44Logo.scale-150.png new file mode 100644 index 0000000000000000000000000000000000000000..2a255d962d2b8984c159d7b31c0ff8097087adca GIT binary patch literal 1984 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 XQk#?@k6Lp(00000NkvXXu0mjfWh{ZC literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.scale-400.png b/public/windows11/Square44x44Logo.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..6db3b1d484833c31cc6c1c058027c8dc1d43ffd6 GIT binary patch literal 4406 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 P00000NkvXXu0mjfA$o%V literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.targetsize-256.png b/public/windows11/Square44x44Logo.targetsize-256.png new file mode 100644 index 0000000000000000000000000000000000000000..3e30a758cc7ddabe4f1bac199e23359e8acf8db4 GIT binary patch literal 6905 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¥8W@O)rn*9*qRlyp6%{@H%o7!lF`0_y+rY!F>F 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 literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.targetsize-30.png b/public/windows11/Square44x44Logo.targetsize-30.png new file mode 100644 index 0000000000000000000000000000000000000000..317c3f5ce9f3dca65d6214e27f233924517631bc GIT binary patch literal 1010 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 AI{*Lx literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.targetsize-44.png b/public/windows11/Square44x44Logo.targetsize-44.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cd04d23fd0a12c58045ca0bcf9a36331840cb7 GIT binary patch literal 1373 zcmV-j1)}^3|4BqaRCt`tnM-UNRTPHLof&(^c8Kk$ zd6YK@n$jX9HXt<%DwYikkbn({MJs_2j|!wDNC;Je4IzS65OS&@7HwCs#U>V? zKgC}Ye2fVpG8Ca~+b;6g1wLk&Zvof9YP7+A!e0}brlBy^>kW!hhM{NJXh)=!N5ICM zQ(!e5*l7n=uCJGD!!Wc=re6pWd>QW}Lc(m;W%H-FvTE0Bb=lXK5)3`*c)}!H;xLz* zbYR8PhsU(nj=e-9!$TCMmX`A(H-Ab$yRc|8G&9QyX8jfxR&D^x0(Ne8THR3Htn$l- zW!YQAE_v6TBLtRL-<%Q*4NDWC0elEPYs3t;?8~bB%E}sih@w=vvPtRm9fa0C|Kmjs zjI1#O(EuGRo9-7Q!-KTRmIW+dSDnu(7@ANo4ltmV;hN}AYilLd5skK@ts7ifmPwk> zR3``pmOs*#%4iNu>$FS?0Vl=>7NJP47>=eM^1+oo}(Q z`zIdo)6c)sFPAP;GLcYk9;DEc8|5IJ>z~?z<7wR^N?As(cG73=vw|CipOF-8C2kY6*j;D zj>9iJ_l#TP?E(KE)DL*Jyz1BupRXH3==jg0v$dud6wgLyn++g(K2dThO zC6!Ei0>i=;ULrkk-#xw~XQ04pxaH;g@i&gqI~t6RvNcG6oL{`CWzrF+z1T(3>JBUx zdC1i*s7{Cc7em{~hap=7$45>fN||O{SeB`~mPKL_C#}>iF7WyHuryykgpL>`Fgh3? fiw^8LTm$RBJT_~|^%PR`00000NkvXXu0mjfsJx0A literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.targetsize-48.png b/public/windows11/Square44x44Logo.targetsize-48.png new file mode 100644 index 0000000000000000000000000000000000000000..fb51d6971ba61c7ca9e9fd19c37944400e634f49 GIT binary patch literal 1245 zcmV<31S0#1P)^3e@R3^RCt{2TF*-qQ5^ry?%N->TiVgE zC?iU!z@SSQWEuT9cnF1{Zh0tzE_#T-OGFf8P!ZXoTSDL;Afm2?9mS}d1YSLruDUzx z?EL8ac{`)4?ds01<4n*;9^=lunfZLb@B7~8&HFwCxAVmzE{&m3h!jO3%d#j4U@lSSa>6vte*W3RTyHVwNpLSF zpRz0K%gZZauB?Q@VLs!x5ek`xLF`m3nM~+xNF$$2G3SdgLfBz5WY^YJH7BlIzCa!A zZInzT3ay~{#NCn(rIk#E#wWijw zdN`rOIx+9ugd+^`%LK46OmmGBj^GHcwqv7Wy}Gp?^Y#t8u2VXzlAlQIsUsnTk9#J$J+4WF@12rvA?_NKp*3&0xDWBiK(Se{+up7cK zOj=x8qF6NQivg>eCOJsbWnN#}06c(X$EKW`lSf}#U{#avR<;<*OBxUg6|6sesEOXc zc}5Bkvwpy0^56h2;8Y5wTR?VTgBt4h(ePNR`h}uwJ(bzgfb9@wL4k+7vZGkY%Asll;F(M&OL-ojrAm@F zSQD}`Z>Y)u3~f9&r~bz;Xkv1T?1>faB+3feCRE=7{Fha;w3uF!O>B5zKuton{ToPn zNYCX+Wu-PugLV=%30Wl%&*fI-{QO4eH5sFp2fd(rA=?JdO!Z9bDT;u+S6^;b3t1)4 z<_Bi^;a-1s)+A)xKivHs$*uT#Dr9aUzwku3V&U^t$lRhZu4_E><|yPs_&gCZx4_4E zLw!Ac8kwLc&tJ(|F3xQQ&xOn_5XxF!lfnmbl^Ecykhz2;&BLLos-(tam9>CZLgp42 ztuj31ww*gmgYREbBvRQTfoDSI7Vsu!tp}S9(6OUOD%TD#h0HCSPKhaq8{w;2$aeax z%dPm;BxFHaS}cb$1_W?v(T$J=dTDVJ{x2M-UU;k~}yvCy<{9cVTawxJ8An21p|3N5?*kkn_Q1x8 zi+pkjErGSpfNk~w7lp$H^5kV!;ARCt{2TU%%xRT%zfc4o7i-E1zz zL_xepLuwiuks>8Uia~^s+Ip$9_>e+{KB=I6v`Brk7O4;7Lm-8Mk|0_OzDPlof>Nrf zjYOhRQHvs^xzFBb*Z(^+lWel-WH-Cco+7%jF==&=Z)X)&sbE~AmaW_=@ z8L~ug25hn~Jhzulyzx4P>VlL?XRHVM0t)r^JVbj3o}}Y%y+flPpQjj;W=X@D^}!iK z!bA8dY!+(#$d2uTEWWMTc$}~M#X(yz41J5z~Eu{Cr^LCwp}M(JZAf(WGY3+UO7rV+q)>vj(3$q zaTs;=N{*V(FD%m6UwuQN2)vzKgjJOZ8wq-8=#Z5lk$bk_O4w0zPFyI~6tmsCe1zk= zF6OvieK*3U5{AlTGFe)jougzjC7ttve@Sx)#T+r$iX@EuG?hwI$9?zE$+zDWUQb3F zMv{a%Vy>98+Z5eZT1YoTZEdae;=yNE$jXvYJG?MY!-$Ky3MsoV-ZYhRzQMV&orlzyF>CM_KDEF*&|XE`MGKHM#qgUG8Dm%v$7!Y$2B zG<#bsg+g^666VyBQ(j%yDo-uT#oYV?&COgVJskEV1qC^UC7dy;lv!b^R)F2*N(d`A0@T@amEI~q7N-TlpkC$~mhCUFk(W&JGS>7qwcH9o7D>Y&e_o@% zuKiv1t_t{>W{$c#JE*BCCP=%X=7f=;L?RJ7|M?g6?y2`F+R|Lss!Ktp#UbhJ@M+rf z_%2#Pr0^=W+$t=U)+rc`h%=#V8H5pzR7EX$l_mvYXJ-_wu2jO7XNJQHmzclToG?^zdD)=n_Ya6s2@;83pz*NaDbR^Q9vHVyk@N))5F} zX%Y~zj8`o%{`G2t2O%++8CWK+h2?C)sh~>F1Yz_Dw4;(7#nq@cMhPyCA5o}z;|IzM ztc~k}x~QFo2XAVO#glprsI8gGJV90l0{^9>++J@R-C6^a!AA{)dT4x;%c>H%%Uj-Q)qA zg&N1!l7)!Dk(@Rj^!407*qoM6N<$f)k}$%m4rY literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.targetsize-64.png b/public/windows11/Square44x44Logo.targetsize-64.png new file mode 100644 index 0000000000000000000000000000000000000000..50e063754385ddbd1f82f4a0f5045fd3f158952e GIT binary patch literal 1492 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 Ef)q`}TmS$7 literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.targetsize-80.png b/public/windows11/Square44x44Logo.targetsize-80.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6016adc60bb47dce40291d3f64ad589ac82425 GIT binary patch literal 1803 zcmV+m2lV)fP)^5tw}^dRCt{2UE6OIRT%%~vfWl`x9cUg zph(b^2Omg8(%=IoSpEQ$Hj0flX(C3A37ROj4>l%>iZ5znO=@VeHBB)zQAvHU;f+V4 z2@gC-lpqR}kg#nLdfSWN@60*NP@(Buot>FqI80}EW?+8%-OjgXel=+o^6lHq;^p5; z^5-XbvyVp?j}9I=9y-Mv6&`au&hj|HV}kiOgE#ElDBMOMA7J1B-frRDLp*v`ACmyU zK=M2~?dk*+6-Kdn-!YSn60y`Z=lV~*OGtIrf?rt)iPc_6PMPr?ag z7zQmbFVn)pB9$u@N&*aBr>3SxYG`Pna#h7PL(W@qPU z_D1Mr@6Ujf%uk=IkV5qKb1L zljY9BR6$;at!-sxgq$bXR1)_N4t_s(p1vL#qt@1( zii!A3aEHIT%ZN0Ycc1Q`5q*Ow)ubD?++JV23&f zr3$j`-e-4H8^=7jZPF~y4rNe?|2v=DPRDF=BviadnB4MPk z04`90SY@2xP7#;`f&ZD?3b$S3g0=!PR=8WJ!mD>F-*i{=T*LufG%hr%dyxsk5gZc; z>qB70HZG|Jwu96746&P}UNc9X5 zsP4xNoVl=OnR$^b^5V5wGBWY7z_Q(i9s2OP3A8#iRmwJI=?$JIFDxz!3ycHMd1`8G z6!(UEbdrf3Ss?zQ#w-)~YG3T;$FRQZ|J)Gw=mf6nK)7%m;bz|NE{UY`h(e9A#0)OMB|C=0~g87N1Lz);&+Zh;tx#)D`XMa+%=mv)vD;6H=}qFP2# z%f_L$vz$VZr&-@MFV7e08t+Fj28Pnkasyq{IsPrtuFj{3-hNXo8AH1$Y6z{J)LIQ5B$Yvz$VMA~MPVRsT2!uK1t>da1veAXVE(!^_6c)e* zGzG0pElf*QbaNmOYPAqstwQz^%WzNqdYUd@x$3woj~fuKpkfIXHwZG?mMAL%&w@Zm z{dQW%TPHxdu`qs&h6diM$=@Z7L~sGOec=B4=*!_z!HG@&PDQvAAaH`mL6Qjt2eh;_ z(`ex+J-&5IO@I+9W=R4J3FM7`_q|ZDgcPW)TZ1Hk;&B2Rs%P@;+m4YX#Hi#gDU-?2 z;LxY^$GJa+mS9`LBtQ|uz8F3t3<+GwSp*JI98H2dRmKdGCAuxtYM~X1B01ZTq2ZAN z{V?@2?cA|l$l@hJgqD*i@_-PbWp4!Jj0+VDID+*J-~}av42AA~-XD|KsYt<9;rCE( zJU%s@I2mMH%meH<-!D0<$sik27rBjA331~B=u|+tF+oDyBHP-?tA#ekyEZlRl5k#XogDJ%j7V4YanJRx4p9zJYXXc2b?5JTe_Q)`OTf(SU?<-?BJTe ti~x`%ikQf|`}pS%DgAXAYyLWne*qcG$~cE!OM(CZ002ovPDHLkV1g$zNgn_J literal 0 HcmV?d00001 diff --git a/public/windows11/Square44x44Logo.targetsize-96.png b/public/windows11/Square44x44Logo.targetsize-96.png new file mode 100644 index 0000000000000000000000000000000000000000..7709d52664fdbdcca2d28e0c2afea291a7c85f04 GIT binary patch literal 2198 zcmV;H2x<3;P)^7I7vi7RCt{2U0rMxRTMt6yWP@-v<0FT z6B7v7MFcUy7=lI`)B2aFsVFFf@?^j_pR}6R#9+X`2YtiD#8`sSh&Ci97z@clqTzui zKtL%-Y(gSY18r%`mbSa&`R?31ot>8GZLyqQyd^nUG@}toxWilDMbt_F1lN0=9WZ(gGvMN?Z3l>znTzLR4 z!6~>sR^QOLPMRYN5{i&xY7USir5w$Nw&UePLpLdrsG$ee-bc%q-$RL-1!ORVbb5^b z=)X!AFa1u#BcoJTyGSUhJ*BB|(qbeqr|_?B+#)fl{Y|n1g2*8sLuzd7Hofrt)6}-( zMM~bgl4_Xzh%rMs$THCo!llbs=*vTg>BtX1iO~R)?GXaF1;;y?^Us<4lgdW5%cFaz zA|DTb@ZQ_BZOgNCdwg7c$MDAm=~dL6Uk zx)rQ8$xc_TapOXExVzZq!|dRN2D1Y=19$M7KlY^jQIX=h2?9uZJMkcf5u%+&cDS(l zMgX%1I0JVGT2?o%qI2he6H%m`Cny0VA%LawLUh9UBF(T!B8vtf`99)c`b1~x(Iu`#M- z1pO#=dt4Ux5)D2f2Wn-MD!VoVaY5kuCk7y<})Myv!-*|uV2-9n!cD>lH3v$@pVWUl-O zbw;cd058KMBQy#-Jy9GV5Xy{Lset(WnI|5nHLDw`x;j4RCMdKSu~GnJApU>t)i(L( zkHwjag*GErD!>F4dpRPs8L?6z3|p<0wE)5ZBLK}X0?-U20L?H0&h2@qwoMDhmKmaJijVjQBZP;`CIbVPORcYId z015@TQ$;?(sjr+Nh`kO0pa!}t07Nq=LW!!NeV4D$+BHex?IWg^*sK5^5glImwNG#f zPCb#L5|)Q)i>ROL(~@bO;o`(hC?^%37=iOEZM^s zPmxmtT|`DOR~R-Z$%?VE)l<$E72-^RH$R+mwlF);{6kDWxC4j2X_Df&2i&VLbU!%) za6K*@2DBa0e4}F@{e0@QDDK&43OY{<744j7o8L8aL1#b_2hJ%bi_4$n<3YaONuHAC zN(iWj``wYFqADl~Q>r?X1_~C3?P(D?!r>xlsm(8G4k&KBnDZ0h9wQ(t-?5vm$|iE^ z%DZy|wd|^#2&#gjFr{rQP!3=a5Nbl}eYJxXz$wVT!i?^beOdSbTa1D~`_g=D=FVPj zOUN@40QExHI8Rkj0}r6AFxk_PueiLyt$Fa;rL?p>8Q}wP!W|GsKOZ-6*D-QN0^S5& zcb6mK=j?d^SZaI$R;#y?Pys^8k0Zd0v*0FH_ARAGW6<)KvT) zo07M+tOP;m#`rUEzR}#kv}nc2eBB5$EFr5YLA!xb;8u YFJ=vo1JpGM!vFvP07*qoM6N<$g2r9;mH+?% literal 0 HcmV?d00001 diff --git a/public/windows11/StoreLogo.scale-100.png b/public/windows11/StoreLogo.scale-100.png new file mode 100644 index 0000000000000000000000000000000000000000..80c7dc6fb3f538a4a6f8937f307b8b4e8a6ccba9 GIT binary patch literal 1351 zcmV-N1-SZ&P)^3=}AOERCt{2T1$)5Y8ZZ#w6*ti9M3`! zbSEf-*B{_7a3dTz3qeraxfpTbW#a{JC{$5gsDmCnoO4iA=*k};f-;J(R9q@5Zk%51 zw9_W>eZC|eC%q({Heajwl#-^T`Q9h*^?Tn&=oi6nBIAZ7L?%|RSHFIGYdW8I@?lz0 zl)96sKENhmJd6uo1b+y``SPMKd=(q0wlF zBjkBlc%(I(O~|v|d!1J!X%K-=z?`57kbsIuLB=#qu`c9*JQF#cK7IZ|v6$KxMceZT z`vLr+<=hTxwK|)vCC%3re#K(Z#qV61x(LucAv%OO^wHd0iS{2jOyzQgG)<#cSP2D+ z&;Wen`jvB(%Vk+J{(+`55oPI#!76_L;UmozOB7{dR){>yHo zQTgtxCMPHsjgrPh!e(MHk!&_C)(wiDMBwDEn*Y9Wi7eBSmJk(H5$n1E#}B?5fuDfT z__alKUyrC2(oTEoubE2p3#Xjc}gae z;=4i73NU={%NI{l&MjDduxui@H=;?UQl&Sq-%*MqjAHlM ze>6fFu1KLBk%0#UToKVK%MT_LXZJ#5ZB(oCv~BYg74F?~V*PLurK@e2*U<7v?*%PN zB;vGg?HU?3Kn5lJ(DO()z`^VF;2W=?)eWplifJufw4dM`PMs#TuLZ(U4i0`=aqC?~ zub_}Z1m>4YCF$AhOFDbus_-kb3mcGtgCh!_KXsI=;0y)Pq7)*KSyMGC@y6`=i&vCP zrMf21RvzIERg($fJV;oVV_L{L{6ff%Clg!+Bz%b^;&J)T?gtQlFN)$`!_+D`_hcz<*J*g?^N z7&wpERj5J@4u?;kJ{Nthi0EsDNJNBRyRU_H2g@U#-@#hZzQj8ciG<$QQq`tdtIbP# zEZbcp*5bAk@%&o;bSu+_4Y6VK<`JJ~*G|MC;0kQ_e! z!OTvKyGmu@XzqLhd-KJ9Nw`gHcOCdAh{R$sArIt&k3yWDL@+(Y;1M%BjJupkkx;K_ z!jAwTf!WB}i&w=gQP(q?VVJYt>%1DtV|ofrU}neXV=+Sn3CLsjf`zH&y_b8((*=xx zF>u7-5i>iCyD%vllc_H3V#YfN1=^e)qhE}GK?Z|Il++k^jd0FRjyd6*nNFi=pyNLu z95Mw=PceAxG_#Y4isKXg|MS85j32eBa2ycmpASDPeiIotdn9u5Ei002ov JPDHLkV1jtwcTWHS literal 0 HcmV?d00001 diff --git a/public/windows11/StoreLogo.scale-125.png b/public/windows11/StoreLogo.scale-125.png new file mode 100644 index 0000000000000000000000000000000000000000..be0220f22225b53b5768cf02abe9fa8e7e6e34b9 GIT binary patch literal 1672 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 literal 0 HcmV?d00001 diff --git a/public/windows11/Wide310x150Logo.scale-200.png b/public/windows11/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd538c4e0d09c75d081ae71ded608f3b7a3d944 GIT binary patch literal 8148 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 R6F?e*^t22$tJNKz{1=Ya{g(g$ literal 0 HcmV?d00001 diff --git a/public/windows11/Wide310x150Logo.scale-400.png b/public/windows11/Wide310x150Logo.scale-400.png new file mode 100644 index 0000000000000000000000000000000000000000..04eef39809d7c402a0699501d2870ea05bf716c3 GIT binary patch literal 17364 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 literal 0 HcmV?d00001 diff --git a/src/app/(main)/analytics/page.tsx b/src/app/(main)/analytics/page.tsx new file mode 100644 index 0000000..9ca9a24 --- /dev/null +++ b/src/app/(main)/analytics/page.tsx @@ -0,0 +1,11 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Analytics", +}; + +const Analytics: React.FC = async () => { + return "Analytics"; +}; + +export default Analytics; diff --git a/src/app/(main)/dashboard/CompanyTeamCashFlow/page.tsx b/src/app/(main)/dashboard/CompanyTeamCashFlow/page.tsx new file mode 100644 index 0000000..3a6079d --- /dev/null +++ b/src/app/(main)/dashboard/CompanyTeamCashFlow/page.tsx @@ -0,0 +1,26 @@ +import { Metadata } from "next"; +import { I18nProvider } from "@/i18n"; +import DashboardPage from "@/components/DashboardPage/DashboardPage"; +import DashboardPageButton from "@/components/DashboardPage/DashboardTabButton"; +import ProgressCashFlowSearch from "@/components/ProgressCashFlowSearch"; +import { Suspense } from "react"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; +import Typography from "@mui/material/Typography"; +import CompanyTeamCashFlowComponent from "@/components/CompanyTeamCashFlow"; + +export const metadata: Metadata = { + title: "Project Status by Client", +}; + +const CompanyTeamCashFlow: React.FC = () => { + return ( + + + Company / Team Cash Flow + + + + ); +}; +export default CompanyTeamCashFlow; diff --git a/src/app/(main)/dashboard/ProjectCashFlow/page.tsx b/src/app/(main)/dashboard/ProjectCashFlow/page.tsx new file mode 100644 index 0000000..2e87f44 --- /dev/null +++ b/src/app/(main)/dashboard/ProjectCashFlow/page.tsx @@ -0,0 +1,29 @@ +import { Metadata } from "next"; +import { I18nProvider } from "@/i18n"; +import DashboardPage from "@/components/DashboardPage/DashboardPage"; +import DashboardPageButton from "@/components/DashboardPage/DashboardTabButton"; +import ProgressCashFlowSearch from "@/components/ProgressCashFlowSearch"; +import { Suspense } from "react"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; +import Typography from "@mui/material/Typography"; +import ProjectCashFlowComponent from "@/components/ProjectCashFlow"; + +export const metadata: Metadata = { + title: "Project Status by Client", +}; + +const ProjectCashFlow: React.FC = () => { + return ( + + + Project Cash Flow + + {/* }> + + */} + + + ); +}; +export default ProjectCashFlow; diff --git a/src/app/(main)/dashboard/ProjectFinancialSummary/page.tsx b/src/app/(main)/dashboard/ProjectFinancialSummary/page.tsx new file mode 100644 index 0000000..3549f77 --- /dev/null +++ b/src/app/(main)/dashboard/ProjectFinancialSummary/page.tsx @@ -0,0 +1,26 @@ +import { Metadata } from "next"; +import { I18nProvider } from "@/i18n"; +import DashboardPage from "@/components/DashboardPage/DashboardPage"; +import DashboardPageButton from "@/components/DashboardPage/DashboardTabButton"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; +import Typography from "@mui/material/Typography"; +import ProjectFinancialSummaryComponents from "@/components/ProjectFinancialSummary"; + +export const metadata: Metadata = { + title: "Project Status by Client", +}; + +const ProjectFinancialSummary: React.FC = () => { + return ( + + + Project Financial Summary + + + + ); +}; +export default ProjectFinancialSummary; diff --git a/src/app/(main)/dashboard/ProjectStatusByClient/page.tsx b/src/app/(main)/dashboard/ProjectStatusByClient/page.tsx new file mode 100644 index 0000000..4ca47da --- /dev/null +++ b/src/app/(main)/dashboard/ProjectStatusByClient/page.tsx @@ -0,0 +1,29 @@ +import { Metadata } from "next"; +import { I18nProvider } from "@/i18n"; +import DashboardPage from "@/components/DashboardPage/DashboardPage"; +import DashboardPageButton from "@/components/DashboardPage/DashboardTabButton"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; +import Typography from "@mui/material/Typography"; +import ProgressByClient from "@/components/ProgressByClient"; + +export const metadata: Metadata = { + title: "Project Status by Client", +}; + +const ProjectStatusByClient: React.FC = () => { + return ( + + + Project Status by Client + + }> + + + + + ); +}; +export default ProjectStatusByClient; diff --git a/src/app/(main)/dashboard/StaffUtilization/page.tsx b/src/app/(main)/dashboard/StaffUtilization/page.tsx new file mode 100644 index 0000000..2ddea02 --- /dev/null +++ b/src/app/(main)/dashboard/StaffUtilization/page.tsx @@ -0,0 +1,26 @@ +import { Metadata } from "next"; +import { I18nProvider } from "@/i18n"; +import DashboardPage from "@/components/DashboardPage/DashboardPage"; +import DashboardPageButton from "@/components/DashboardPage/DashboardTabButton"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; +import Typography from "@mui/material/Typography"; +import StaffUtilizationComponent from "@/components/StaffUtilization"; + +export const metadata: Metadata = { + title: "Project Status by Client", +}; + +const StaffUtilization: React.FC = () => { + return ( + + + Staff Utilization + + + + ); +}; +export default StaffUtilization; diff --git a/src/app/(main)/dashboard/page.tsx b/src/app/(main)/dashboard/page.tsx new file mode 100644 index 0000000..5f3d40b --- /dev/null +++ b/src/app/(main)/dashboard/page.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { I18nProvider } from "@/i18n"; +import DashboardPage from "@/components/DashboardPage/DashboardPage"; +import DashboardPageButton from "@/components/DashboardPage/DashboardTabButton"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; + +export const metadata: Metadata = { + title: "Dashboard", +}; + +const Dashboard: React.FC = () => { + return

test
; +}; + +export default Dashboard; diff --git a/src/app/(main)/home/page.tsx b/src/app/(main)/home/page.tsx new file mode 100644 index 0000000..a710195 --- /dev/null +++ b/src/app/(main)/home/page.tsx @@ -0,0 +1,17 @@ +import { Metadata } from "next"; +import { I18nProvider } from "@/i18n"; +import UserWorkspacePage from "@/components/UserWorkspacePage/UserWorkspacePage"; + +export const metadata: Metadata = { + title: "User Workspace", +}; + +const Home: React.FC = async () => { + return ( + + + + ); +}; + +export default Home; diff --git a/src/app/(main)/invoice/page.tsx b/src/app/(main)/invoice/page.tsx new file mode 100644 index 0000000..ae9fc37 --- /dev/null +++ b/src/app/(main)/invoice/page.tsx @@ -0,0 +1,11 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Invoice", +}; + +const Invoice: React.FC = async () => { + return "Invoice"; +}; + +export default Invoice; diff --git a/src/app/(main)/layout.tsx b/src/app/(main)/layout.tsx new file mode 100644 index 0000000..b93ed10 --- /dev/null +++ b/src/app/(main)/layout.tsx @@ -0,0 +1,41 @@ +import AppBar from "@/components/AppBar"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/config/authConfig"; +import { redirect } from "next/navigation"; +import Box from "@mui/material/Box"; +import { NAVIGATION_CONTENT_WIDTH } from "@/config/uiConfig"; +import Stack from "@mui/material/Stack"; +import Breadcrumb from "@/components/Breadcrumb"; + +export default async function MainLayout({ + children, +}: { + children: React.ReactNode; +}) { + const session = await getServerSession(authOptions); + + if (!session?.user) { + redirect("/login"); + } + + return ( + <> + + + + + {children} + + + + ); +} diff --git a/src/app/(main)/projects/create/page.tsx b/src/app/(main)/projects/create/page.tsx new file mode 100644 index 0000000..60ab586 --- /dev/null +++ b/src/app/(main)/projects/create/page.tsx @@ -0,0 +1,23 @@ +import CreateProject from "@/components/CreateProject"; +import { I18nProvider, getServerI18n } from "@/i18n"; +import Typography from "@mui/material/Typography"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Create Project", +}; + +const Projects: React.FC = async () => { + const { t } = await getServerI18n("projects"); + + return ( + <> + {t("Create Project")} + + + + + ); +}; + +export default Projects; diff --git a/src/app/(main)/projects/page.tsx b/src/app/(main)/projects/page.tsx new file mode 100644 index 0000000..1fe1800 --- /dev/null +++ b/src/app/(main)/projects/page.tsx @@ -0,0 +1,47 @@ +import { preloadProjects } from "@/app/api/projects"; +import ProjectSearch from "@/components/ProjectSearch"; +import { getServerI18n } from "@/i18n"; +import Add from "@mui/icons-material/Add"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Metadata } from "next"; +import Link from "next/link"; +import { Suspense } from "react"; + +export const metadata: Metadata = { + title: "Projects", +}; + +const Projects: React.FC = async () => { + const { t } = await getServerI18n("projects"); + preloadProjects(); + + return ( + <> + + + {t("Projects")} + + + + }> + + + + ); +}; + +export default Projects; diff --git a/src/app/(main)/settings/page.tsx b/src/app/(main)/settings/page.tsx new file mode 100644 index 0000000..c3b9620 --- /dev/null +++ b/src/app/(main)/settings/page.tsx @@ -0,0 +1,11 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Settings", +}; + +const Settings: React.FC = async () => { + return "Settings"; +}; + +export default Settings; diff --git a/src/app/(main)/staffReimbursement/ClaimApproval/page.tsx b/src/app/(main)/staffReimbursement/ClaimApproval/page.tsx new file mode 100644 index 0000000..9388d1a --- /dev/null +++ b/src/app/(main)/staffReimbursement/ClaimApproval/page.tsx @@ -0,0 +1,11 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Claim", +}; + +const Claim: React.FC = async () => { + return "Claim"; +}; + +export default Claim; diff --git a/src/app/(main)/staffReimbursement/ClaimSummary/page.tsx b/src/app/(main)/staffReimbursement/ClaimSummary/page.tsx new file mode 100644 index 0000000..9388d1a --- /dev/null +++ b/src/app/(main)/staffReimbursement/ClaimSummary/page.tsx @@ -0,0 +1,11 @@ +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Claim", +}; + +const Claim: React.FC = async () => { + return "Claim"; +}; + +export default Claim; diff --git a/src/app/(main)/staffReimbursement/create/page.tsx b/src/app/(main)/staffReimbursement/create/page.tsx new file mode 100644 index 0000000..eafce4f --- /dev/null +++ b/src/app/(main)/staffReimbursement/create/page.tsx @@ -0,0 +1,21 @@ +import CreateClaim from "@/components/CreateClaim"; +import { getServerI18n } from "@/i18n"; +import Typography from "@mui/material/Typography"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Create Claim", +}; + +const CreateClaims: React.FC = async () => { + const { t } = await getServerI18n("claims"); + + return ( + <> + {t("Create Claim")} + + + ); +}; + +export default CreateClaims; diff --git a/src/app/(main)/staffReimbursement/page.tsx b/src/app/(main)/staffReimbursement/page.tsx new file mode 100644 index 0000000..1a1afcf --- /dev/null +++ b/src/app/(main)/staffReimbursement/page.tsx @@ -0,0 +1,47 @@ +import { preloadClaims } from "@/app/api/claims"; +import ClaimSearch from "@/components/ClaimSearch"; +import { getServerI18n } from "@/i18n"; +import Add from "@mui/icons-material/Add"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Metadata } from "next"; +import Link from "next/link"; +import { Suspense } from "react"; + +export const metadata: Metadata = { + title: "Claims", +}; + +const StaffReimbursement: React.FC = async () => { + const { t } = await getServerI18n("claims"); + preloadClaims(); + + return ( + <> + + + {t("Staff Reimbursement")} + + + + }> + + + + ); +}; + +export default StaffReimbursement; diff --git a/src/app/(main)/tasks/create/page.tsx b/src/app/(main)/tasks/create/page.tsx new file mode 100644 index 0000000..656139f --- /dev/null +++ b/src/app/(main)/tasks/create/page.tsx @@ -0,0 +1,23 @@ +import { preloadAllTasks } from "@/app/api/tasks"; +import CreateTaskTemplate from "@/components/CreateTaskTemplate"; +import { getServerI18n } from "@/i18n"; +import Typography from "@mui/material/Typography"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Create Task Template", +}; + +const Projects: React.FC = async () => { + const { t } = await getServerI18n("tasks"); + preloadAllTasks(); + + return ( + <> + {t("Create Task Template")} + + + ); +}; + +export default Projects; diff --git a/src/app/(main)/tasks/page.tsx b/src/app/(main)/tasks/page.tsx new file mode 100644 index 0000000..b9e9bf8 --- /dev/null +++ b/src/app/(main)/tasks/page.tsx @@ -0,0 +1,47 @@ +import { preloadTaskTemplates } from "@/app/api/tasks"; +import TaskTemplateSearch from "@/components/TaskTemplateSearch"; +import { getServerI18n } from "@/i18n"; +import Add from "@mui/icons-material/Add"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Typography from "@mui/material/Typography"; +import { Metadata } from "next"; +import Link from "next/link"; +import { Suspense } from "react"; + +export const metadata: Metadata = { + title: "Tasks", +}; + +const TaskTemplates: React.FC = async () => { + const { t } = await getServerI18n("projects"); + preloadTaskTemplates(); + + return ( + <> + + + {t("Task Template")} + + + + }> + + + + ); +}; + +export default TaskTemplates; diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 0000000..2fa7df5 --- /dev/null +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,6 @@ +import { authOptions } from "@/config/authConfig"; +import NextAuth from "next-auth"; + +const handler = NextAuth(authOptions); + +export { handler as GET, handler as POST }; diff --git a/src/app/api/cashflow/index.ts b/src/app/api/cashflow/index.ts new file mode 100644 index 0000000..978a61e --- /dev/null +++ b/src/app/api/cashflow/index.ts @@ -0,0 +1,39 @@ +import { cache } from "react"; + +export interface CashFlow { + id: number; + projectCode: string; + projectName: string; + team: string; + teamLeader: string; + startDate: string; + startDateFrom: string; + startDateTo: string; + targetEndDate: string; + client: string; + subsidiary: string; +} + +export const preloadProjects = () => { + fetchProjectsCashFlow(); +}; + +export const fetchProjectsCashFlow = cache(async () => { + return mockProjects; +}); + +const mockProjects: CashFlow[] = [ + { + id: 1, + projectCode: "CUST-001", + projectName: "Client A", + team: "N/A", + teamLeader: "N/A", + startDate: "5", + startDateFrom: "5", + startDateTo: "5", + targetEndDate: "s", + client: "ss", + subsidiary: "ss", + }, +]; diff --git a/src/app/api/claims/index.ts b/src/app/api/claims/index.ts new file mode 100644 index 0000000..f012bcc --- /dev/null +++ b/src/app/api/claims/index.ts @@ -0,0 +1,50 @@ +import { cache } from "react"; +import "server-only"; + +export interface ClaimResult { + id: number; + created: string; + name: string; + cost: number; + type: "Expense" | "Petty Cash"; + status: "Not Submitted" | "Waiting for Approval" | "Approved" | "Rejected"; + remarks: string; +} + +export const preloadClaims = () => { + fetchClaims(); +}; + +export const fetchClaims = cache(async () => { + return mockClaims; +}); + +const mockClaims: ClaimResult[] = [ + { + id: 1, + created: "2023-11-22", + name: "Consultancy Project A", + cost: 121.0, + type: "Expense", + status: "Not Submitted", + remarks: "", + }, + { + id: 2, + created: "2023-11-30", + name: "Consultancy Project A", + cost: 4300.0, + type: "Expense", + status: "Waiting for Approval", + remarks: "", + }, + { + id: 3, + created: "2023-12-12", + name: "Construction Project C", + cost: 3675.0, + type: "Petty Cash", + status: "Rejected", + remarks: "Duplicate Claim Form", + }, +]; diff --git a/src/app/api/clientprojects/index.ts b/src/app/api/clientprojects/index.ts new file mode 100644 index 0000000..5c65810 --- /dev/null +++ b/src/app/api/clientprojects/index.ts @@ -0,0 +1,53 @@ +import { cache } from "react"; + +export interface ClientProjectResult { + id: number; + clientCode: string; + clientName: string; + SubsidiaryClientCode: string; + SubsidiaryClientName: string; + NoOfProjects: number; +} + +export const preloadProjects = () => { + fetchClientProjects(); +}; + +export const fetchClientProjects = cache(async () => { + return mockProjects; +}); + +const mockProjects: ClientProjectResult[] = [ + { + id: 1, + clientCode: "CUST-001", + clientName: "Client A", + SubsidiaryClientCode: "N/A", + SubsidiaryClientName: "N/A", + NoOfProjects: 5, + }, + { + id: 1, + clientCode: "CUST-001", + clientName: "Client A", + SubsidiaryClientCode: "SUBS-001", + SubsidiaryClientName: "Subsidiary A", + NoOfProjects: 5, + }, + { + id: 1, + clientCode: "CUST-001", + clientName: "Client A", + SubsidiaryClientCode: "SUBS-002", + SubsidiaryClientName: "Subsidiary B", + NoOfProjects: 3, + }, + { + id: 1, + clientCode: "CUST-001", + clientName: "Client A", + SubsidiaryClientCode: "SUBS-003", + SubsidiaryClientName: "Subsidiary C", + NoOfProjects: 1, + }, +]; diff --git a/src/app/api/projects/actions.ts b/src/app/api/projects/actions.ts new file mode 100644 index 0000000..ef39406 --- /dev/null +++ b/src/app/api/projects/actions.ts @@ -0,0 +1,59 @@ +"use server"; + +import { serverFetchJson } from "@/app/utils/fetchUtil"; +import { BASE_API_URL } from "@/config/api"; +import { Task, TaskGroup } from "../tasks"; + +export interface CreateProjectInputs { + // Project details + projectCode: string; + projectName: string; + projectCategory: string; + projectDescription: string; + + // Client details + clientCode: string; + clientName: string; + clientContactName: string; + clientPhone: string; + clientEmail: string; + clientSubsidiary: string; + + // Tasks + tasks: { + [taskId: Task["id"]]: { + manhourAllocation: ManhourAllocation; + }; + }; + + // Staff + allocatedStaffIds: number[]; + + // Milestones + milestones: { + [taskGroupId: TaskGroup["id"]]: { + startDate: string; + endDate: string; + payments: PaymentInputs[]; + }; + }; +} + +export interface ManhourAllocation { + [gradeId: number]: number; +} + +export interface PaymentInputs { + id: number; + description: string; + date: string; + amount: number; +} + +export const saveProject = async (data: CreateProjectInputs) => { + return serverFetchJson(`${BASE_API_URL}/projects/new`, { + method: "POST", + body: JSON.stringify(data), + headers: { "Content-Type": "application/json" }, + }); +}; diff --git a/src/app/api/projects/index.ts b/src/app/api/projects/index.ts new file mode 100644 index 0000000..a29be24 --- /dev/null +++ b/src/app/api/projects/index.ts @@ -0,0 +1,46 @@ +import { cache } from "react"; +import "server-only"; + +export interface ProjectResult { + id: number; + code: string; + name: string; + category: "Confirmed Project" | "Project to be bidded"; + team: string; + client: string; +} + +export const preloadProjects = () => { + fetchProjects(); +}; + +export const fetchProjects = cache(async () => { + return mockProjects; +}); + +const mockProjects: ProjectResult[] = [ + { + id: 1, + code: "M1001", + name: "Consultancy Project A", + category: "Confirmed Project", + team: "TW", + client: "Client A", + }, + { + id: 2, + code: "M1002", + name: "Consultancy Project B", + category: "Project to be bidded", + team: "WY", + client: "Client B", + }, + { + id: 3, + code: "S1001", + name: "Consultancy Project C", + category: "Confirmed Project", + team: "WY", + client: "Client C", + }, +]; diff --git a/src/app/api/tasks/actions.ts b/src/app/api/tasks/actions.ts new file mode 100644 index 0000000..862cc62 --- /dev/null +++ b/src/app/api/tasks/actions.ts @@ -0,0 +1,27 @@ +"use server"; + +import { serverFetchJson } from "@/app/utils/fetchUtil"; +import { BASE_API_URL } from "@/config/api"; +import { TaskTemplate } from "."; +import { revalidateTag } from "next/cache"; + +export interface NewTaskTemplateFormInputs { + code: string; + name: string; + taskIds: number[]; +} + +export const saveTaskTemplate = async (data: NewTaskTemplateFormInputs) => { + const newTaskTemplate = await serverFetchJson( + `${BASE_API_URL}/tasks/templates/new`, + { + method: "POST", + body: JSON.stringify(data), + headers: { "Content-Type": "application/json" }, + }, + ); + + revalidateTag("taskTemplates"); + + return newTaskTemplate; +}; diff --git a/src/app/api/tasks/index.ts b/src/app/api/tasks/index.ts new file mode 100644 index 0000000..f5889d7 --- /dev/null +++ b/src/app/api/tasks/index.ts @@ -0,0 +1,40 @@ +import { serverFetchJson } from "@/app/utils/fetchUtil"; +import { BASE_API_URL } from "@/config/api"; +import { cache } from "react"; +import "server-only"; + +export interface TaskGroup { + id: number; + name: string; +} + +export interface Task { + id: number; + name: string; + description: string | null; + taskGroup: TaskGroup; +} + +export interface TaskTemplate { + id: number; + code: string; + name: string; +} + +export const preloadTaskTemplates = () => { + fetchTaskTemplates(); +}; + +export const fetchTaskTemplates = cache(async () => { + return serverFetchJson(`${BASE_API_URL}/tasks/templates`, { + next: { tags: ["taskTemplates"] }, + }); +}); + +export const preloadAllTasks = () => { + fetchAllTasks(); +}; + +export const fetchAllTasks = cache(async () => { + return serverFetchJson(`${BASE_API_URL}/tasks`); +}); diff --git a/src/app/favicon.ico b/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..52d8c5f8805c460f977940b9a37b0d63210eecc8 GIT binary patch literal 14468 zcmeIZXHZk^+b_CkA|Qg|11Jdi(4<#EYCw8NKv7yiKoE#1y$6&c(v;podJ&K=EkOk7 zz1JW}Cv-wdJInXXDIfNpd1ud_IsXsmLso8PR@S=jtN*U+N2H;?1}*g+Y5)LewKP?Y z0Du%+k^)z+fL|v*6PMr@xr4HvG5}P^(co+-z`v>9Xg+rb070FbV6DquFjeoGe<58UfriWim0*nR0Lv4KP8NVv!A zU8V1FS>FwU8l+~W)g}z?4*UsNLiJx{Cl1(dt<$P^9>?taUxZ|rrlHJzj53hzGe{7mJUkA*Y^6as#>bvIAlbDIsi|AosqM1Uy(xqe zV72?{4!T*cM{619jViMaIjoc%>Ox*FH!m zGYK%DWj6hEb8mrwENkt>DSNE>QnK55AFHhRw|TzsdTBPdUz^czrEsjFx9w-(#g7U~ zGG(6mY--r8Z}!}R*D&GYaRV2?Co3EC3xsQ{iDl}1lgt1eY*PBZU&0;Jua>V9+I@fd zhF0*uXi4SEOJl$e^IQ=&pW z+~=LdmUdiVkm;p*3h2{0oxqbpw;$7ctayn#6nblOOh9{pd!4$a?vA?Xs;s?pr=NdC z3e#-3?dZhh{*awq!;I*g3_VK79f%=PsPXv6`ghd&oo?l6$03!C8TM zT3#WtF*{!v9$uOwmNQa87zE2X#zm@htDc)9oyDA$eKZsGeQ52 zIZ9fG8Z_#bEkf?#K%sGdUoBx^eAWvoI$;_w^Y3Ap*y7l0moF*ZUS1JlzbllTd?Fkg z@nJXIOYxXA4Bn|k-UNE`Jxs)HQ;!^2-ug)PL-(zSa;*@-bY@3DT<9)}`sYEnGKcj1 zO3pZCR$WbhqBeK+8N(vyry0Q794niE8s6XL^FDTHN!EIXlUVh2t?|y0Sp6b{i1U2*G-L|Z24!EE7~7)^p`!lT%X&xC4)`YW zqK}6+@NE>vD__qnVqr^u-rMykz21pJ#V?Eh_uF-JieVD7WgH{b8Lk>KV6y(Vt7Uo;LwWA6vI7c_D@3%vvZC0MH<&8B!L2RIis+Ur6Vq6@^#DBjeYLK$t2fq20;Kwb*^i?T((oT z9gy2S^=&vnq8JIT&W8rl^LHLDm?z#TeI7FSRc3N{f5t*ry0J<$`yzGG!*}h2&aZP4 z;8@wBf8_y1bM)cs{yL8Uo@?*p{t5Tk zIG1vwS<8i_jLG@!RZ3uh_mDNjCvRB}M*k4fmbVIPI7b!Iji{h#ewrI>wgxlY0bI5Z z-QTYr2Ki&(W46hRtddjqfid+aZiN4MG{7dPoSg z7+nzdUc6K@uRUM#^cv?*a!m?dp#$Ei$P4Dy8}POeEsF~A(HvK+>bl?$E0cIvA~QdA z%-5Cm52I_kAoFk2@smWgJnjHGuM3Hv?7(um4<7IrWAe{_p48ibH!#PsyO>SBa(+4d z^^APL3D9ixx-BB;*KnTVa)|6q#_pik6ACi}?&AO;rOTbHjwhS%7dEmY$#iCgxUW|M z3o<-<>3RG2a~fdFC1QhOoJYE@BJtIhPsO4~LSi?Bd7lzkrialx!{ldwg}`ec9FHw1 z?N8V9a%91#)!vh)QPdiJV5vo0*_258b)+R_xh8SoT-MB^&&YrSpTkywmQ4C(4LYXD zQUN;RDk;_I%lXs1oQ<^1D!TqWPW4rnMA{U_Tbntk>_`axD|en92+oh%peX1}9d^Fj zLw6de8%1;p4KBL^pfQk{BiC2h0wDsN@884oup0nyU|07ve6(I{8uSvg;}#8qb`)H8 z+p=oujnX8kQgdPdW-4-NsLlh?tq2z)%w_#pQ3L?i7N1cLT2gr0bA*R~kmKgKRhHP+ zx|cC?n$Uw z%G^F!KOt3GdkD`$6N_(#Pd|}zCeQtQ|A5KU>vgbKwu;WqE{f74{yOzjR1f!n+;YYz zj2ELx_}7Xjp|_7g;Xb^Z&cNZ8P*FeLtgrOo={5OEfWE?f0sbZoV);iS3K9is&QRg- zg)(AlPPd`L!1UTcT^;t~2f|^2;UJn!$>S;V$CA-YH4S%rU#R8pIJF=EC_&tgqVOe- z%`60g=KizWo$-f*#aH)3=w_7gQNA;_wucS?YI&^$H+6>@vRu!$S7pKuB=~329%SHf zu|kD?e1Rg#N4jdwcoHDh(##n)_#nlRcFLH_;pu#Ot9$=A8@10I3CH4Cc1;&D_4U@n z>7}-^nlvgn0Aw=19mFg7sdW#-4vDX1=d<~*ohnplg%}6`1+{mBY`!(74tZ6G-*h~C zpWUCT_4gMK4-4A;R{QI>)>wvXyWowqB#1V}_3U8V>p;VKMu(y6$@>_pCEKcIyKMbS ziC?Tif#*zs(u=S|;+nsW&&;X(O#^EA!2(>|?9R0FVb#R8?WKKOlh1q}``su<__+Z3 zblyQeL`F#X=<@dm5oLPKUaNOTh6w1au%8eR%*Ee0u3HD4wrttIcp=Z3eb{-{*5~Cu z69kVPzfKZfDru0<&u$Dj4m4!otf8NVyrftd2=7_V^4{oIo)o(xHhdp{ z$w^O-j~6=e^yJejG{Q9N>px%Qcb@thUym7^NK9ViebBqo6=lB_-!&Q$c?&EJ^IO(A z67l)A;<7JA^7D^+FqYyEB?VP}`v3Wjma_{8=-AuW5m&H`CRGj$Y@?;Jnpn>GX_Fi8 z-+?s9soQJ0AS`uM6MooI1KDCpmEp_$*lEXUVx}M=ySR6_Rt;{(!}H7T$2-60)i0Wa z&IQ&6HWbW<9^y@2&3_wW#Hu}3ItYX`3lp1EN^bz4bS3=V>t|B<6`JyGDeZO|BGw3$ zQvGen3z6CCS|~;_IpOo?z)?l$PKXrsd+Q;JkiN+G15U=!v&a5eq1#zsA?Fheq&ebX zgqPhudfzsVp+s~NC`^aWX*O;NturJfh|7raRR|3pWl9VskL#loA@W$=t!ha?$L7lw+B|+QXz`6>?rc~r2{qTMI6mg<9`tQv&!d6!3G;T~82v#3NjoFl z_*)mM&dcX!U(4D^!Fw68Ly_0jI~h%`#1aorm&BAzxW37W^lTo=5kj9%U0;4b2=}=H zmv*)V0KrY%dvhYQJ9!lp2?=Z1o$1QY<5HeIIrzA@7mLYO7n5)T8R^-{kqdT`o#j7~ z!$DI#P0MQ=y_Vj@N3XwcJ>6nwj&)LzmlUOZ7d+)oOR_Oh*b1qhhKiN?oD(96?T-s< z(LB<*5x43b(2H~?QoMv)$jk68mU>qdp`@JHVVWu8+KQ_moB1v|XT?U$`MBhfbwUZe zi7Te|Yy$1SYlOxQUjpu|sr!ewn{cu*9p>xNNOB5>l^(ghs{L zz@3|$&~mc(M6+NLVPEn^m~f&07|${ z>9m|VmRw2vg<{|Z5PURJId#2|R<+))_onYLi%3*>6!Ahwy8kT5$JFFGlduK79>1=r z&;mEsJj*`kfcUKu!bE(naU4p4uO{q?W}z*dbk7OJel8VVma?+hsIk^Zgd>=1JPiyO zLC-Pd+JxW60l~Zs(^RmneH4Tr4P*I}Zwlq!$aZfCSQ&?YB81#~-db{Ro7&*ulak3H zdjBZIqhW`~y#GvLlq}9{f=-B+xpk6|`c&)Nxla&m4SC+m)Hh${^WJ6KF)Eg9auyfi zCk{eBDKok2(Qz6=#3;gf;pn{;q6a?ZPb~YQ5G@UpdfOE$1v}B#=mu@D`t%R9Y;GD9 zxaJyYG2OLF8XSvvK7=;pwe|9RXnZQgd-NU5WwJk^Eihr^$qV0&B-eOu9makH9xKp& z$h*f!2CQF2iWh%1WR4_lN5MA(N99Az5r|44yIkW_v=TFb2OWX|<3HeEK*bEFm&(uS{I)mdcX||?fWqbQi z1}N_`g78Pb)^W76u9DLczQqLQ%Xm!_wMl7JbAlO;h#}igHnluAnr(EIOdt4hFAxZJ zii#5*Z+e+xapHDpjKB>}=0xAgqq_F@4SbyIV}&|%2s7r*y9QN`(qW4cQxp#c0cM6v zGCEh0mu9k7Hv3jwRPwt9EfyYKi0|h+HbKpaoE2c*<}%Ll&DCRIDw|2;Y?VIu0iR6- zRdQ6Gn8T&c;B#?)??~_SW`L3`m`xy+{i`4gb2yVpa@#o8GoJp?Co22fhKecvi3zUT z<<7DEM+jKakJQpQp=EB7D&9ENc2<#8zNZxR-RnX+)zHemYJaRS1gz6*0xaOGL#!S`VO(C97 znbq*XU$RuI!y^9m7C3F}yZM!Ui6uIqB*cg0UKSiPH{B{OyLe#giqK;ea{5FbnS9)6 z;1zQypEd3MexsNTLb+TWQeh)o`y*8pcie~j(P?5D`1!%Bwm+@zf9|>l=F^fU=wir# ziOee`3Z!UDQ-oHy_kI#P;oM=gH}q!R3u_ZWmDRQ-tHn?A^=k(}ZY_~UMd6EJ$^3nu z0Gl=c$jxWdk03TQgubb-t*alUXPCU+PB18eJ(CHu0F(4e<$Rh^h4U7+*;;Au1FlC@ z*8EU{XyDPW$*{J0ua{5j(r|kfHcgc6CcnsaeX_Yq=aJ&ytKP0H?)%kdHkWdmeG0iv z1cD1ju55*nt&Z~7HQ&NNfuB`7vMF_}lNE5SA&0DpDvqrs>l!5OifSM__v-ITqU3q8 z1_^wufkCH43HwyHp5P!Kub<_w(E*xwD)gGk@nKA@s)W@PWU?##ETYC`cC5skgQQP@ zEd9X3A5T}LNDahmH`e)s1=QN7nksv0X1w0M@49zH7*T4)Y6soluM) zCQP?sZi0z3>UwSN4m+*IjBiU?eY8la+|K1upT<55C%ZrH{0WjyU; zAdi;$DOG)%#oY5ilU6Z{y_?(7aww>{c-?M1 z3rkAx4vZEHF@+n6H^g$=2?x*B`8;>G49a!j-_CfpJXt?q?wRB|C0VxVhGb}1cHMSK za37X2?-0Ea@fZN!40teO7nleL56=LNhW#0Cn(ZB@z-{ZQqfV(JMqyY=;LnVFz}k6F zeSQxrvX=Jl0nEwSwD&yZ?Zs+J7O#MLjhl6VMd}3|kSb8u?dRlVRx`VH6n{MY*|`d9 z`uw|fNTSA!^I4s$bE{af4+8blHH9o#j~tfN%pP-NVt4k*OG1@`eSPMsKT+?*uuJr@ z!!xj@P^!jTsWaKjo*h`U;5Uzs7uiiPDJv?bjWxJ#Qq=}D->c_pK@7cy>#vc3``MWz zaN1J-$%H)A$*wQWcPoOJftJ{$7E#*`X7bppK0~*Mkk%==hb$q@BMw@%ZB9VEX);SOVWGt7?lO#hnW&nV6`J@kSgcuZ_b1` zGA|cZ!F9a$mpD&PPwQE)eE3*a(TI*eN-pe_*1H+{T&w+%*!*!UeNv#XHt>CPZ0sl= z6lZO#_Rog$T1)-vdf1yc-=_?;{DHbD2R&w~tvg`?+$54Wwmxb(DDKZvnMvIMf>-k+ zYMo(NbRZp9F(T}xeV=05>H6|4sq?wTZd4u(koESm)JQP-**PU3x{UX8rGSxnL|)+JTl?(FVF)`H0)k zi&cRB!e0hFicw?X_0D#^D{41GuaN-2I;ACpb#(=-+_X{KV85ZHvE|ne$+O>Oi8pG0 zAH>w(2n~^x7GW|Y0KpgPy!AOXFOyvM_7Y@E70jJdwjN`moQSH?p;Gti?K1Mm`J7zA z_a7_Ecf%@Z0p(J8%G{|05*0B$KF|^$H$hj`g0*X2qsuncUfkpWtPvwGsuTb{y;oZ8 zkAcIlL`F18$?P0aEKuq)UGRBLXa^`#Z;w~Y2?kCd*S~WY^i943dL}NPZ4bp(L| zIRLb`=GW^vTTGCBiWZ+PAmJb>M{7_iB?~{dxXp6o9wm6Z_ilO;qfM{-ioffrhUg5H zdgY~b>U2ht0!ouxqDq4fz`&pukWvd*M}eew=JLi z@y!N+mj?9Y@3uJrlhHpDiJ{8(UyuWadd<$K(G!LD%_lnqo>LSWX^m~E`wrT>ex{T< z>se8wUE=^Z^4jdY`+9W$RWpo`q%u%)6R)&QDRHg-{P;I{@HTZmUa$-4 zcNKWj8NmR&q`^)(af0$&=J-4Bxc=||zx;2=;pWd{c@hv=kcZ^TUIjFxdrSGK-Wzsa z1z7dHX|q2!-?A?^^WlE%{y%mHBVn8^<*&69W4SdJ=|C&$up5Vg&^H0#gUDeg&UEda zodpHE5SQi)pwq+0@Qk)OF8BR6P+^+a@EUvbH16P(q!VG|MGt&Z@*t9>Mh14caQw%s z?dH8YCe(4~8M^DZE7cHC^8ICkq0Rp0P{KwE-25>EU&dnM`kn=;78OO^Bo6_>q08?a zw!2Z78_iWpp7emBdp7JaZWg}qfB6F5mUo@(Vb4?m?3SdU1v6T}BPV2415g@#l`Hc9 z@`YedW^7J40OJ~=F}zC-aJ?hEpMuZWlyv357l7DX>R76e@KaEd%(&Gn2c0w0CM^HK z5d~E8e_*WRiWTE&1~jPODgBi&5SizRd?u(}dP}uYg@o&pgLzof@?*^tq1JfdrmbJ| z{n=eN-~A`-pIKZliZTO?)U~_f+hPB+`~Yx$1Vb5pYI^FY-rmv@Y2fv-ya5jnkG-3d zHZyY>Xgk53hb~dWGg%1Jrgqrn?Sl(Jle^%!;@>a{M2Ba<^_OJ-`TFG2y`O!^wT4}p z*I}k+-MDQFp~*ha<_%yiivR!)*a0;PUZ501W7???CCl3MLI@#9alp zxM7w0|IBpzpXnTb>yq4$^1}>3`!3agc}OsSdS-gO=vB3704US)uK2&xMR~3Xzn1Lc z{i>#2p`-S7Hn27Ig%wm-w;l~~CgiOQenS7^mtIcFBOBEK6cZ~usZx?-KGYuo-GSR4 zlImehqU5=GP_}38$*x1`3)u8%{w;e*ha1kjcO#CCrvo&9@$%%+35fjzly!m`!{ou=jN$B=69s0B5>ncN zE+efu>B_i|aLrT7;4*OxgqCEkCy(iGa(|M?u8Fq}|H24Y%mfTAZR&Cg&rQMl?c@0y z(smacloILybB6p957sUIv(lNhOd$SCtcLlNnS`f;q!)nO<;HBrrH=& z6u9H|0K@A*$hB*tZXE9fJX8fP>8;lG`kD99t*i8Ob+4e*)2iuxvLhrvgUjin3w(ZuQ6y z7_ediIyBctB33(vfiMi@HD(<#M~r)FlxQ%axp^dRt~&$KQU zfD`a3>(?uevmO4lpMS@#H`4XYY^F-uj~NLjIbGJBMBS*ZefE`IPj7F*%4}k8)RGUc zER>U0N%HN@??+Ah1XOQwwxaLe?P3ib-b+Oi&``Y{70hewJ}(g48O?_q`oKY0!L5n9 zPIUu;OQ%1G(MM+<3rIwTTg91kGn-OiVAi#3*EN0u#gK9VZ9~w;xJT28%J-4DVN@SR z!&}?fSXQ>RExfLw`vJVX(|gx_VLMXZ$u;}mwNS&_GM4ZV!Dru<_P!s#Zu--aq9fH} zQB+iP8{|t2P|c-Ue#^DGq>T8}fg^8yZTekgzV?qu;A2Uz_}~+Apxt%3fQ>CAbl=ne8lI7tZ?P}gK<#iNkT55N>i zeB;tH$tVaoM?v6QJhPLK`!W5=+=W<3L*X}voyxxqCCH4qAp6bb>8@h3=KdfBsMABL zH$_Kp6QkC!-UJiEGR1I;j<8?T?mVOqGysmrbykJrF-H|dEZM~p-G02iP72qnJ+s0h z%El*^`Miu2!6OonfvbT;bz^>f7OU*jZ$)|I_x-FUd=E=^5ce%D(IED<^w92dlmmbV zMPWgYRo=TSjS1wOpD^*SZt%!{RZ!Np*~DwQ&g_6K;V{Gq>h2=n?p%$;_}HPl|FMNu zk9_dacJQhA!&Y-ecYMm)KI8=9XcYF^;Xc@UaGn!Tkd@;3JJl(GTi@Sq(l?xjoAjeo za`Y}sH_wS3hWlTDTzw~)L>#TlZ<5?w>T8m> zP`H_;SsT}?&v!(qJqp6Z!$1|H5W z6ob8p@CBZVLY=<!GB8IFbfNN1aVDi#rcsEVt{0C9>)QsZ z^OEGzbM(s@s()?)?ea`HTl;d2#F42y1N8@dNk<7!aSqwIjh0J$^_VzTsdmHM;vYjI=SAE2aotuyn}pWdg;k^q?zdxVc&OqED}}uNx8==-~%lOb$*W#F{7`=cwus z2+yjzyWKrO5}mOG`^op@wo>zF7E^T{6KO>v`dWL`Slet)DjLw$-=N(_-w}V%!7Un2 zT#~$7PibrH4qwQKDh9owQU@7yd=(Ey-x8wk*m;};2jGmSH4;WW70vjQ;zP4bgs%hh z=(U%N);qsXKGXSG06pjc(E&TT*54t}qHKfBK~ZIn4x? z@0zwg)?b`pyL*q`(SW243<(ZObjs6r^2;w_TZ@bpYWWfQJ2zg<^<0bhPoDdJN}OF# zf`Uw##bMeL#l4x%{8;oxgkL_YFLb>e(+{1`sEBX30-jtavGUkmql2GF%(fO9Ea58~ zdvu10`Ht8SGRkMN%)miir^D&^QlP?sfocAvdeLiRec?&1!YG7Z^XzVuX^D$mox-;4f#6ih9Jych8_7g5p{JeFB3_Icvc zN@5_h>|wf(Ae1F0ib>>ScrpK@xe5L^}%ij)F!tr;aV-A_L3z>F*$>>AWLFo%hwq zsuYNa@>Gi#WkX4TH|D<4NcqgKtCwa>9#=1N6weAbMIj2D6;i^USl0W5OY-_kR|%fh zC(`ExhAQpzP!bMs`UMhKPf~w8Dylzr$2=JWK7B8Z)%ZAkBe&RQp+#CGrxinUbZU;| ztU~Tiy6wq0^!FuyWyY%SkUknckKK>dpa+2BP1fpMlk6_!1mpSEO5HVD^yii!49(xH zlRtiO8Kj*oWPWEdNoHgX;+{(2YzjeqIhui^7Y@ulGAW)lzd2nxdRWX>l&sjIld{-K20p#7$!uX^aw3yNQ0<95R2qUS2@ z^%H8K9cQ8#i(H7UsH#fg-cr9k+XxNvC%!*A_TNjA+ryQ5oV|`}z659Y%nHIbJC~3& zpTTUo@sI%SD)UFj1*L0RG`_D(4C1b8qS>~yG#fn#F`o~vw=^wuXSY*@XnaIDW?f6I zc0J*Y+e?fKI;yR~Bu>_p*6L-SEjaYgIw%;(&P%JtP1?#nxN#*3B7OYR2q6LllV{9^ zXUvw23kNB9N3$uuj^7ft(}?UEmB|t4r$@l2|sI`r-E!(YaFv@Se*`sZ%x`M?214Z zyt}o^WsTy{en%@+v84hK=@F)iyR1`_$YEWBwgJMEa{KGy!AF#Nw}h5P618-CgYJ9y zC?%j=_x(BeF@6CXm-WS(4ZclvcBVbe_2v0g9L?>YVi~q@Bx%M!=mFN;mX|GYD2OcM z;NjfyGkv$FRu@#Yj@RyHBLxy#R9u|@k6m$b)MGM(2ojGKAJ$vzCFft;7Hu3)N)-6? z!n#lTS&yFu8S51HDqLFMTO2!_#&{CS27UnaQO#HZ*M=Zq1?D$O7t5onFqj{ds;yk= zwq6WYO6(mjxIb%M$)P3rfjxe29s#SsxV=~C zmb5)gB~!Avq<-Hf4G#T>8l^>2WJK>Bln$_NM7CV4hP_`AhP(eiq%nzgkKP;e>mfcX zCz9s^x+kQtVjX7hNQ5|mH$w}0!%rVOcmLTDB3fi5eW3>=}n>+C|x zU40j~6|Sq3k;A?#w=Nu0Jn1*Rf~u?GOxoFBT&ycw&9c!tDFM(bIki8*@@zoN%)S1% zg1u`i%+BX;C`SZ#fHNOINaavm5@H!<-5W-C7_29hZASlyM{Jw5w$-LVp zP`hpdLE0XV^Aomj$DlUC**`WjyUd+`qa|^e$zbZ2X9fQify0KsUaD0HGIM6LXdOkA zNbfz5<~?{&u`S+Yx%ee?Dd`2Ng5bf0I2{iKDe%egZ4BO%zAvfyUKUz3?8}maqz(Eu zld}*ZZR$D%GNO?AeD;Eesv~D+ke5aQ+`fsq{FZAKv+sD1HR?@K*VOWlC5Hgk)wlIi z$7F4Vy6)!uDAciaQQ~*xR6>SFo3-F@Vy~<%a zS0O2T>C2`c+3?0!f5cn1oQ;GDq2Q5Y4J>r(XOO~>3GBXJc?)h~Xm6FDP{zM{+Vllh zc=U?WA9Ok{PMh=DKK^TmH^abL#FmVSN{p|0Q0~T#o)F9oS6&lfGs&|{u|oOSKnXs) zAzqPnDpePt-Di*uhQ{{s{QBC3M5*<*hI6>GvkOP5t=an7GZP`;)|KX;9t{$HH5VZR z^=Ziqvi`@GNv;wgI&QCybS`p02FVi3XxUSC{J0K`ZN4B|oOC9ho_=cUFfF!m#jxHmp#qY}IzxCV{xdI#n=3k#O|5$MY(qL7{t3%*?^EbRGx!oRi8K6pL^ zIhywAPaCjJgrzD6Gg-6<8^#v_KI?T=Sa}IQe8s6Mvu=bEx#=3oGr>|++TFLO{O;@|i zGM;r(jNYPq1Ok!5zVQSSfrIrmc01!?C5 ze75G`_3nOJh=r5c?B~8y@BJEYR8p@Ot`i|hk0Oe>MG}!OUq$2NMUdD z)^zU9N;4ErIr>b>@=`ui25gXX$+$(M8liCe#(>JoN&?Dj-{(zUX+38W$ntp9w8Z`B zUs9#7qPO(k-Jc6JF=gJ&8j1>#86P8%Vf_$uui?nHI_(RJSVrb}6%i=_;5D;|>a)e! zlVPSNrN{z=Am0lY7ExobqTmL4E!a4o$0Qst8OA&&^jVIuEv;2rTDX|#QXz89YrpZV>Q!F@F)HwjNWJp18it@|6hwAQ0X*rfquZ`kJ~63u10~hFi7$YK;KWxCMz`-PJ&t*p3TS^)hQ}m{ReYN z>hGJ>Cdq!Nv0BS31_cS|9$l-K{E9a#F zp%;h0ncvcpgn%|`Y;myqYxT2A|6DrJm${F&p#b+?^kk&+oF(mvrRPfxL~1`oUZ5DA zCFITz3L>uEBo!^0mKEmhxd?TP%uhr}@$8vzR>kQ~VE}1f z+RCb!!xa+uL>S10;gs(~pU?MHQIP&-8q(wRGr=C&h;+DOq%2 zhVF+pHlohEJ^bC9ra}7V^N|<+&xP06$gs>d4;}%UQm~|rLivgE?mrtaG+Q;+2S%^> z!nmE&iybA>AV{wK%I<~DYR?}G(R-#WAZ=>sQnU_@8xdIZb}7C17+AYTq + + {children} + + + ); +} diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx new file mode 100644 index 0000000..7f9d7d7 --- /dev/null +++ b/src/app/login/page.tsx @@ -0,0 +1,20 @@ +import { getServerSession } from "next-auth"; +import { redirect } from "next/navigation"; +import { authOptions } from "@/config/authConfig"; +import { I18nProvider } from "@/i18n"; +import LoginPage from "@/components/LoginPage/LoginPage"; + +const Login: React.FC = async () => { + const session = await getServerSession(authOptions); + if (session?.user) { + redirect("/"); + } + + return ( + + + + ); +}; + +export default Login; diff --git a/src/app/logout/page.tsx b/src/app/logout/page.tsx new file mode 100644 index 0000000..cbaeefd --- /dev/null +++ b/src/app/logout/page.tsx @@ -0,0 +1,7 @@ +import LogoutPage from "@/components/LogoutPage"; + +const Logout: React.FC = async () => { + return ; +}; + +export default Logout; diff --git a/src/app/manifest.ts b/src/app/manifest.ts new file mode 100644 index 0000000..a0f6048 --- /dev/null +++ b/src/app/manifest.ts @@ -0,0 +1,464 @@ +import { MetadataRoute } from "next"; + +export default function manifest(): MetadataRoute.Manifest { + return { + name: "TSMS", + short_name: "TSMS", + description: "Timesheet Management System", + start_url: "/", + scope: "/", + display: "standalone", + background_color: "#fff", + theme_color: "#111927", + icons: [ + { + src: "windows11/SmallTile.scale-100.png", + sizes: "71x71", + }, + { + src: "windows11/SmallTile.scale-125.png", + sizes: "89x89", + }, + { + src: "windows11/SmallTile.scale-150.png", + sizes: "107x107", + }, + { + src: "windows11/SmallTile.scale-200.png", + sizes: "142x142", + }, + { + src: "windows11/SmallTile.scale-400.png", + sizes: "284x284", + }, + { + src: "windows11/Square150x150Logo.scale-100.png", + sizes: "150x150", + }, + { + src: "windows11/Square150x150Logo.scale-125.png", + sizes: "188x188", + }, + { + src: "windows11/Square150x150Logo.scale-150.png", + sizes: "225x225", + }, + { + src: "windows11/Square150x150Logo.scale-200.png", + sizes: "300x300", + }, + { + src: "windows11/Square150x150Logo.scale-400.png", + sizes: "600x600", + }, + { + src: "windows11/Wide310x150Logo.scale-100.png", + sizes: "310x150", + }, + { + src: "windows11/Wide310x150Logo.scale-125.png", + sizes: "388x188", + }, + { + src: "windows11/Wide310x150Logo.scale-150.png", + sizes: "465x225", + }, + { + src: "windows11/Wide310x150Logo.scale-200.png", + sizes: "620x300", + }, + { + src: "windows11/Wide310x150Logo.scale-400.png", + sizes: "1240x600", + }, + { + src: "windows11/LargeTile.scale-100.png", + sizes: "310x310", + }, + { + src: "windows11/LargeTile.scale-125.png", + sizes: "388x388", + }, + { + src: "windows11/LargeTile.scale-150.png", + sizes: "465x465", + }, + { + src: "windows11/LargeTile.scale-200.png", + sizes: "620x620", + }, + { + src: "windows11/LargeTile.scale-400.png", + sizes: "1240x1240", + }, + { + src: "windows11/Square44x44Logo.scale-100.png", + sizes: "44x44", + }, + { + src: "windows11/Square44x44Logo.scale-125.png", + sizes: "55x55", + }, + { + src: "windows11/Square44x44Logo.scale-150.png", + sizes: "66x66", + }, + { + src: "windows11/Square44x44Logo.scale-200.png", + sizes: "88x88", + }, + { + src: "windows11/Square44x44Logo.scale-400.png", + sizes: "176x176", + }, + { + src: "windows11/StoreLogo.scale-100.png", + sizes: "50x50", + }, + { + src: "windows11/StoreLogo.scale-125.png", + sizes: "63x63", + }, + { + src: "windows11/StoreLogo.scale-150.png", + sizes: "75x75", + }, + { + src: "windows11/StoreLogo.scale-200.png", + sizes: "100x100", + }, + { + src: "windows11/StoreLogo.scale-400.png", + sizes: "200x200", + }, + { + src: "windows11/SplashScreen.scale-100.png", + sizes: "620x300", + }, + { + src: "windows11/SplashScreen.scale-125.png", + sizes: "775x375", + }, + { + src: "windows11/SplashScreen.scale-150.png", + sizes: "930x450", + }, + { + src: "windows11/SplashScreen.scale-200.png", + sizes: "1240x600", + }, + { + src: "windows11/SplashScreen.scale-400.png", + sizes: "2480x1200", + }, + { + src: "windows11/Square44x44Logo.targetsize-16.png", + sizes: "16x16", + }, + { + src: "windows11/Square44x44Logo.targetsize-20.png", + sizes: "20x20", + }, + { + src: "windows11/Square44x44Logo.targetsize-24.png", + sizes: "24x24", + }, + { + src: "windows11/Square44x44Logo.targetsize-30.png", + sizes: "30x30", + }, + { + src: "windows11/Square44x44Logo.targetsize-32.png", + sizes: "32x32", + }, + { + src: "windows11/Square44x44Logo.targetsize-36.png", + sizes: "36x36", + }, + { + src: "windows11/Square44x44Logo.targetsize-40.png", + sizes: "40x40", + }, + { + src: "windows11/Square44x44Logo.targetsize-44.png", + sizes: "44x44", + }, + { + src: "windows11/Square44x44Logo.targetsize-48.png", + sizes: "48x48", + }, + { + src: "windows11/Square44x44Logo.targetsize-60.png", + sizes: "60x60", + }, + { + src: "windows11/Square44x44Logo.targetsize-64.png", + sizes: "64x64", + }, + { + src: "windows11/Square44x44Logo.targetsize-72.png", + sizes: "72x72", + }, + { + src: "windows11/Square44x44Logo.targetsize-80.png", + sizes: "80x80", + }, + { + src: "windows11/Square44x44Logo.targetsize-96.png", + sizes: "96x96", + }, + { + src: "windows11/Square44x44Logo.targetsize-256.png", + sizes: "256x256", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-16.png", + sizes: "16x16", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-20.png", + sizes: "20x20", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-24.png", + sizes: "24x24", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-30.png", + sizes: "30x30", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-32.png", + sizes: "32x32", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-36.png", + sizes: "36x36", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-40.png", + sizes: "40x40", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-44.png", + sizes: "44x44", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-48.png", + sizes: "48x48", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-60.png", + sizes: "60x60", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-64.png", + sizes: "64x64", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-72.png", + sizes: "72x72", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-80.png", + sizes: "80x80", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-96.png", + sizes: "96x96", + }, + { + src: "windows11/Square44x44Logo.altform-unplated_targetsize-256.png", + sizes: "256x256", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png", + sizes: "16x16", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png", + sizes: "20x20", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png", + sizes: "24x24", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png", + sizes: "30x30", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png", + sizes: "32x32", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png", + sizes: "36x36", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png", + sizes: "40x40", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png", + sizes: "44x44", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png", + sizes: "48x48", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png", + sizes: "60x60", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png", + sizes: "64x64", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png", + sizes: "72x72", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png", + sizes: "80x80", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png", + sizes: "96x96", + }, + { + src: "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png", + sizes: "256x256", + }, + { + src: "android/android-launchericon-512-512.png", + sizes: "512x512", + }, + { + src: "android/android-launchericon-192-192.png", + sizes: "192x192", + }, + { + src: "android/android-launchericon-144-144.png", + sizes: "144x144", + }, + { + src: "android/android-launchericon-96-96.png", + sizes: "96x96", + }, + { + src: "android/android-launchericon-72-72.png", + sizes: "72x72", + }, + { + src: "android/android-launchericon-48-48.png", + sizes: "48x48", + }, + { + src: "ios/16.png", + sizes: "16x16", + }, + { + src: "ios/20.png", + sizes: "20x20", + }, + { + src: "ios/29.png", + sizes: "29x29", + }, + { + src: "ios/32.png", + sizes: "32x32", + }, + { + src: "ios/40.png", + sizes: "40x40", + }, + { + src: "ios/50.png", + sizes: "50x50", + }, + { + src: "ios/57.png", + sizes: "57x57", + }, + { + src: "ios/58.png", + sizes: "58x58", + }, + { + src: "ios/60.png", + sizes: "60x60", + }, + { + src: "ios/64.png", + sizes: "64x64", + }, + { + src: "ios/72.png", + sizes: "72x72", + }, + { + src: "ios/76.png", + sizes: "76x76", + }, + { + src: "ios/80.png", + sizes: "80x80", + }, + { + src: "ios/87.png", + sizes: "87x87", + }, + { + src: "ios/100.png", + sizes: "100x100", + }, + { + src: "ios/114.png", + sizes: "114x114", + }, + { + src: "ios/120.png", + sizes: "120x120", + }, + { + src: "ios/128.png", + sizes: "128x128", + }, + { + src: "ios/144.png", + sizes: "144x144", + }, + { + src: "ios/152.png", + sizes: "152x152", + }, + { + src: "ios/167.png", + sizes: "167x167", + }, + { + src: "ios/180.png", + sizes: "180x180", + }, + { + src: "ios/192.png", + sizes: "192x192", + }, + { + src: "ios/256.png", + sizes: "256x256", + }, + { + src: "ios/512.png", + sizes: "512x512", + }, + { + src: "ios/1024.png", + sizes: "1024x1024", + }, + ], + }; +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 0000000..844c060 --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,7 @@ +import { permanentRedirect } from "next/navigation"; + +const Home: React.FC = async () => { + permanentRedirect("/home"); +}; + +export default Home; diff --git a/src/app/utils/fetchUtil.ts b/src/app/utils/fetchUtil.ts new file mode 100644 index 0000000..718dd30 --- /dev/null +++ b/src/app/utils/fetchUtil.ts @@ -0,0 +1,46 @@ +import { SessionWithTokens, authOptions } from "@/config/authConfig"; +import { getServerSession } from "next-auth"; +import { headers } from "next/headers"; +import { redirect } from "next/navigation"; + +export const serverFetch: typeof fetch = async (input, init) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const session = await getServerSession(authOptions); + const accessToken = session?.accessToken; + + return fetch(input, { + ...init, + headers: { + ...init?.headers, + ...(accessToken + ? { + Authorization: `Bearer ${accessToken}`, + } + : {}), + }, + }); +}; + +type FetchParams = Parameters; + +export async function serverFetchJson(...args: FetchParams) { + const response = await serverFetch(...args); + if (response.ok) { + return response.json() as T; + } else { + switch (response.status) { + case 401: + signOutUser(); + default: + throw Error("Something went wrong fetching data in server."); + } + } +} + +export const signOutUser = () => { + const headersList = headers(); + const referer = headersList.get("referer"); + redirect( + `/logout${referer ? `?callbackUrl=${encodeURIComponent(referer)}` : ""}`, + ); +}; diff --git a/src/app/utils/formatUtil.ts b/src/app/utils/formatUtil.ts new file mode 100644 index 0000000..c2e38ea --- /dev/null +++ b/src/app/utils/formatUtil.ts @@ -0,0 +1,9 @@ +export const manhourFormatter = new Intl.NumberFormat("en-HK", { + minimumFractionDigits: 2, + maximumFractionDigits: 2, +}); + +export const moneyFormatter = new Intl.NumberFormat("en-HK", { + style: "currency", + currency: "HKD", +}); diff --git a/src/components/AppBar/AppBar.tsx b/src/components/AppBar/AppBar.tsx new file mode 100644 index 0000000..a38d2bd --- /dev/null +++ b/src/components/AppBar/AppBar.tsx @@ -0,0 +1,34 @@ +import MUIAppBar from "@mui/material/AppBar"; +import Toolbar from "@mui/material/Toolbar"; +import React from "react"; +import Profile from "./Profile"; +import Box from "@mui/material/Box"; +import NavigationToggle from "./NavigationToggle"; +import { I18nProvider } from "@/i18n"; + +export interface AppBarProps { + avatarImageSrc?: string; + profileName: string; +} + +const AppBar: React.FC = ({ avatarImageSrc, profileName }) => { + return ( + + + + + + + + + + + ); +}; + +export default AppBar; diff --git a/src/components/AppBar/NavigationToggle.tsx b/src/components/AppBar/NavigationToggle.tsx new file mode 100644 index 0000000..9f61753 --- /dev/null +++ b/src/components/AppBar/NavigationToggle.tsx @@ -0,0 +1,46 @@ +"use client"; +import IconButton from "@mui/material/IconButton"; +import MenuIcon from "@mui/icons-material/Menu"; +import NavigationContent from "../NavigationContent"; +import React from "react"; +import Drawer from "@mui/material/Drawer"; + +const NavigationToggle: React.FC = () => { + const [isOpened, setIsOpened] = React.useState(false); + + const openNavigation = () => { + setIsOpened(true); + }; + const closeNavigation = () => { + setIsOpened(false); + }; + + return ( + <> + + + + + + + + + + + ); +}; + +export default NavigationToggle; diff --git a/src/components/AppBar/Profile.tsx b/src/components/AppBar/Profile.tsx new file mode 100644 index 0000000..8cb49cf --- /dev/null +++ b/src/components/AppBar/Profile.tsx @@ -0,0 +1,61 @@ +"use client"; + +import IconButton from "@mui/material/IconButton"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import Avatar from "@mui/material/Avatar"; +import React from "react"; +import { AppBarProps } from "./AppBar"; +import Divider from "@mui/material/Divider"; +import Typography from "@mui/material/Typography"; +import { useTranslation } from "react-i18next"; +import { signOut } from "next-auth/react"; + +type Props = Pick; + +const Profile: React.FC = ({ avatarImageSrc, profileName }) => { + const [profileMenuAnchorEl, setProfileMenuAnchorEl] = + React.useState(); + const openProfileMenu: React.MouseEventHandler = ( + event, + ) => { + setProfileMenuAnchorEl(event.currentTarget); + }; + const closeProfileMenu = () => { + setProfileMenuAnchorEl(undefined); + }; + + const { t } = useTranslation("login"); + + return ( + <> + + + + + + {profileName} + + + signOut()}>{t("Sign out")} + + + ); +}; + +export default Profile; diff --git a/src/components/AppBar/index.ts b/src/components/AppBar/index.ts new file mode 100644 index 0000000..cc81140 --- /dev/null +++ b/src/components/AppBar/index.ts @@ -0,0 +1 @@ +export { default } from "./AppBar"; diff --git a/src/components/AssignedProjectGrid/AssignedProjectGrid.tsx b/src/components/AssignedProjectGrid/AssignedProjectGrid.tsx new file mode 100644 index 0000000..a41fc77 --- /dev/null +++ b/src/components/AssignedProjectGrid/AssignedProjectGrid.tsx @@ -0,0 +1,247 @@ +import * as React from "react"; +import { + Card, + CardHeader, + CardContent, + SxProps, + Theme, + Tabs, + Tab, + Box, + Typography, + Grid, + Link, +} from "@mui/material"; +import { DataGrid, GridColDef } from "@mui/x-data-grid"; +import { darken, lighten, styled } from "@mui/material/styles"; +import { ThemeProvider } from "@emotion/react"; +import { TAB_THEME } from "@/theme/colorConst"; +import AllProjectGrid from "../UserWorkspacePage/ProjectGrid"; + +interface AssignedProjectGridProps { + Title?: string; + // rows: any[]; + // columns: any[]; + columnWidth?: number; + Style?: boolean; + sx?: SxProps; + height?: number; + [key: string]: any; +} + +interface TabPanelProps { + children?: React.ReactNode; + index: number; + value: number; +} + +function CustomTabPanel(props: TabPanelProps) { + const { children, value, index, ...other } = props; + + return ( + + ); +} + +function a11yProps(index: number) { + return { + id: `simple-tab-${index}`, + "aria-controls": `simple-tabpanel-${index}`, + }; +} + +const AssignedProjectGrid: React.FC = ({ + Title, + rows, + columns, + columnWidth, + Style = true, + sx, + height, + ...props +}) => { + // const modifiedColumns = columns.map((column) => { + // return { + // ...column, + // width: columnWidth ?? 150, + // }; + // }); + + // const rowsWithDefaultValues = rows.map((row) => { + // return { ...row }; + // }); + + const getBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.7) : lighten(color, 0.7); + + const getHoverBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.6) : lighten(color, 0.6); + + const getSelectedBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.5) : lighten(color, 0.5); + + const getSelectedHoverBackgroundColor = ( + color: string, + mode: "light" | "dark", + ) => (mode === "dark" ? darken(color, 0.4) : lighten(color, 0.4)); + + const StyledDataGrid = styled(DataGrid)(({ theme }) => ({ + "& .super-app-theme--Open": { + backgroundColor: getBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--finish": { + backgroundColor: getBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--danger": { + backgroundColor: getBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--warning": { + backgroundColor: getBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + }, + }, + }, + })); + + const [value, setValue] = React.useState(0); + + const handleChange = (event: React.SyntheticEvent, newValue: number) => { + setValue(newValue); + }; + + return ( +
+ + {Title && } + +
+ + + + + + + + + {/* + Item {value} + + + Item {value} + + + Item {value} + */} + +
+
+ +
+
+ ); +}; + +export default AssignedProjectGrid; diff --git a/src/components/AssignedProjectGrid/index.ts b/src/components/AssignedProjectGrid/index.ts new file mode 100644 index 0000000..7192046 --- /dev/null +++ b/src/components/AssignedProjectGrid/index.ts @@ -0,0 +1 @@ +export { default } from "./AssignedProjectGrid"; diff --git a/src/components/Breadcrumb/Breadcrumb.tsx b/src/components/Breadcrumb/Breadcrumb.tsx new file mode 100644 index 0000000..8b4d131 --- /dev/null +++ b/src/components/Breadcrumb/Breadcrumb.tsx @@ -0,0 +1,51 @@ +"use client"; + +import Breadcrumbs from "@mui/material/Breadcrumbs"; +import Typography from "@mui/material/Typography"; +import Link from "next/link"; +import MUILink from "@mui/material/Link"; +import { usePathname } from "next/navigation"; + +const pathToLabelMap: { [path: string]: string } = { + "": "Overview", + "/projects": "Projects", + "/projects/create": "Create Project", + "/tasks": "Task Template", + "/tasks/create": "Create Task Template", +}; + +const Breadcrumb = () => { + const pathname = usePathname(); + const segments = pathname.split("/"); + + return ( + + {segments.map((segment, index) => { + const href = segments.slice(0, index + 1).join("/"); + const label = pathToLabelMap[href] || segment; + + if (index === segments.length - 1) { + return ( + + {label} + + ); + } else { + return ( + + {label} + + ); + } + })} + + ); +}; + +export default Breadcrumb; diff --git a/src/components/Breadcrumb/index.ts b/src/components/Breadcrumb/index.ts new file mode 100644 index 0000000..aa94cf8 --- /dev/null +++ b/src/components/Breadcrumb/index.ts @@ -0,0 +1 @@ +export { default } from "./Breadcrumb"; diff --git a/src/components/ClaimSearch/ClaimSearch.tsx b/src/components/ClaimSearch/ClaimSearch.tsx new file mode 100644 index 0000000..6ab02cf --- /dev/null +++ b/src/components/ClaimSearch/ClaimSearch.tsx @@ -0,0 +1,93 @@ +"use client"; + +import { ClaimResult } from "@/app/api/claims"; +import React, { useCallback, useMemo, useState } from "react"; +import SearchBox, { Criterion } from "../SearchBox/index"; +import { useTranslation } from "react-i18next"; +import SearchResults, { Column } from "../SearchResults/index"; +import EditNote from "@mui/icons-material/EditNote"; + +interface Props { + claims: ClaimResult[]; +} + +type SearchQuery = Partial>; +type SearchParamNames = keyof SearchQuery; + +const ClaimSearch: React.FC = ({ claims }) => { + const { t } = useTranslation("claims"); + + // If claim searching is done on the server-side, then no need for this. + const [filteredClaims, setFilteredClaims] = useState(claims); + + const searchCriteria: Criterion[] = useMemo( + () => [ + { label: t("Creation Date"), paramName: "created", type: "dateRange" }, + { label: t("Related Project Name"), paramName: "name", type: "text" }, + { + label: t("Cost (HKD)"), + paramName: "cost", + type: "text", + }, + { + label: t("Expense Type"), + paramName: "type", + type: "select", + options: ["Expense", "Petty Cash"], + }, + { + label: t("Status"), + paramName: "status", + type: "select", + options: [ + "Not Submitted", + "Waiting for Approval", + "Approved", + "Rejected", + ], + }, + { + label: t("Remarks"), + paramName: "remarks", + type: "text", + }, + ], + [t], + ); + + const onClaimClick = useCallback((claim: ClaimResult) => { + console.log(claim); + }, []); + + const columns = useMemo[]>( + () => [ + // { + // name: "action", + // label: t("Actions"), + // onClick: onClaimClick, + // buttonIcon: , + // }, + { name: "created", label: t("Creation Date") }, + { name: "name", label: t("Related Project Name") }, + { name: "cost", label: t("Cost (HKD)") }, + { name: "type", label: t("Expense Type") }, + { name: "status", label: t("Status") }, + { name: "remarks", label: t("Remarks") }, + ], + [t, onClaimClick], + ); + + return ( + <> + { + console.log(query); + }} + /> + items={filteredClaims} columns={columns} /> + + ); +}; + +export default ClaimSearch; diff --git a/src/components/ClaimSearch/ClaimSearchLoading.tsx b/src/components/ClaimSearch/ClaimSearchLoading.tsx new file mode 100644 index 0000000..604aa7a --- /dev/null +++ b/src/components/ClaimSearch/ClaimSearchLoading.tsx @@ -0,0 +1,40 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Skeleton from "@mui/material/Skeleton"; +import Stack from "@mui/material/Stack"; +import React from "react"; + +// Can make this nicer +export const ClaimSearchLoading: React.FC = () => { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default ClaimSearchLoading; diff --git a/src/components/ClaimSearch/ClaimSearchWrapper.tsx b/src/components/ClaimSearch/ClaimSearchWrapper.tsx new file mode 100644 index 0000000..c8a7f55 --- /dev/null +++ b/src/components/ClaimSearch/ClaimSearchWrapper.tsx @@ -0,0 +1,18 @@ +import { fetchClaims } from "@/app/api/claims"; +import React from "react"; +import ClaimSearch from "./ClaimSearch"; +import ClaimSearchLoading from "./ClaimSearchLoading"; + +interface SubComponents { + Loading: typeof ClaimSearchLoading; +} + +const ClaimSearchWrapper: React.FC & SubComponents = async () => { + const claims = await fetchClaims(); + + return ; +}; + +ClaimSearchWrapper.Loading = ClaimSearchLoading; + +export default ClaimSearchWrapper; diff --git a/src/components/ClaimSearch/index.ts b/src/components/ClaimSearch/index.ts new file mode 100644 index 0000000..865400d --- /dev/null +++ b/src/components/ClaimSearch/index.ts @@ -0,0 +1 @@ +export { default } from "./ClaimSearchWrapper"; diff --git a/src/components/CompanyTeamCashFlow/CompanyTeamCashFlow.tsx b/src/components/CompanyTeamCashFlow/CompanyTeamCashFlow.tsx new file mode 100644 index 0000000..6d255a4 --- /dev/null +++ b/src/components/CompanyTeamCashFlow/CompanyTeamCashFlow.tsx @@ -0,0 +1,306 @@ +"use client"; +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useState, useEffect, useMemo } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import { Card, CardHeader } from "@mui/material"; +import CustomSearchForm from "../CustomSearchForm/CustomSearchForm"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import ReactApexChart from "react-apexcharts"; +import { ApexOptions } from "apexcharts"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ReportProblemIcon from "@mui/icons-material/ReportProblem"; +import dynamic from "next/dynamic"; +import "../../app/global.css"; +import { AnyARecord, AnyCnameRecord } from "dns"; +import SearchBox, { Criterion } from "../SearchBox"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import ProgressCashFlowSearch from "@/components/ProgressCashFlowSearch"; +import { Input, Label } from "reactstrap"; +import Select, { components } from "react-select"; + +const CompanyTeamCashFlow: React.FC = () => { + const todayDate = new Date(); + const [selectionModel, setSelectionModel]: any[] = React.useState([]); + const [cashFlowYear, setCashFlowYear]: any[] = React.useState( + todayDate.getFullYear(), + ); + + const teamOptions = [ + { value: 1, label: "XXX Team" }, + { value: 2, label: "YYY Team" }, + { value: 3, label: "ZZZ Team" }, + ]; + + const columns = [ + { + id: "projectCode", + field: "projectCode", + headerName: "Project Code", + flex: 1, + }, + { + id: "projectName", + field: "projectName", + headerName: "Project Name", + flex: 1, + }, + { + id: "team", + field: "team", + headerName: "Team", + flex: 1, + }, + { + id: "teamLeader", + field: "teamLeader", + headerName: "Team Leader", + flex: 1, + }, + { + id: "startDate", + field: "startDate", + headerName: "Start Date", + flex: 1, + }, + { + id: "targetEndDate", + field: "targetEndDate", + headerName: "Target End Date", + flex: 1, + }, + { + id: "client", + field: "client", + headerName: "Client", + flex: 1, + }, + { + id: "subsidiary", + field: "subsidiary", + headerName: "Subsidiary", + flex: 1, + }, + ]; + + const ledgerColumns = [ + { + id: "date", + field: "date", + headerName: "Date", + flex: 0.5, + }, + { + id: "expenditure", + field: "expenditure", + headerName: "Expenditure (HKD)", + flex: 0.6, + }, + { + id: "income", + field: "income", + headerName: "Income (HKD)", + flex: 0.6, + }, + { + id: "cashFlowBalance", + field: "cashFlowBalance", + headerName: "Cash Flow Balance (HKD)", + flex: 0.6, + }, + { + id: "remarks", + field: "remarks", + headerName: "Remarks", + flex: 1, + }, + ]; + + const options: ApexOptions = { + chart: { + height: 350, + type: "line", + }, + stroke: { + width: [0, 0, 2, 2], + }, + plotOptions: { + bar: { + horizontal: false, + distributed: false, + }, + }, + dataLabels: { + enabled: false, + }, + xaxis: { + categories: [ + "Q1", + "Q2", + "Q3", + "Q4", + "Q5", + "Q6", + "Q7", + "Q8", + "Q9", + "Q10", + "Q11", + "Q12", + ], + }, + yaxis: [ + { + title: { + text: "Monthly Income and Expenditure(HKD)", + }, + min: 0, + max: 3700000, + tickAmount: 5, + }, + { + show: false, + seriesName: "Monthly_Expenditure", + title: { + text: "Monthly Expenditure (HKD)", + }, + min: 0, + max: 3700000, + tickAmount: 5, + }, + { + seriesName: "Cumulative_Income", + opposite: true, + title: { + text: "Cumulative Income and Expenditure(HKD)", + }, + min: 0, + max: 21000000, + tickAmount: 5, + }, + { + show: false, + seriesName: "Cumulative_Expenditure", + opposite: true, + title: { + text: "Cumulative Expenditure (HKD)", + }, + min: 0, + max: 21000000, + tickAmount: 5, + }, + ], + grid: { + borderColor: "#f1f1f1", + }, + annotations: {}, + series: [ + { + name: "Monthly_Income", + type: "column", + color: "#ffde91", + data: [ + 1280000, 170000, 3600000, 2400000, 1000000, 1800000, 1800000, 1200000, + 1250000, 1200000, 600000, 2400000, + ], + }, + { + name: "Monthly_Expenditure", + type: "column", + color: "#82b59a", + data: [ + 1200000, 1400000, 2000000, 1400000, 1450000, 1800000, 1200000, + 1400000, 1200000, 1600000, 2000000, 1600000, + ], + }, + { + name: "Cumulative_Income", + type: "line", + color: "#EE6D7A", + data: [ + 500000, 3000000, 7000000, 9000000, 10000000, 13000000, 14000000, + 16000000, 17000000, 17500000, 18000000, 20000000, + ], + }, + { + name: "Cumulative_Expenditure", + type: "line", + color: "#7cd3f2", + data: [ + 400000, 2800000, 4000000, 5200000, 7100000, 8000000, 10000000, + 11000000, 12100000, 14000000, 15400000, 17200000, + ], + }, + ], + }; + + return ( + <> + +
+ + + +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ + {t("M1001")} + {t("M1301")} + {t("M1354")} + + + + + + {t("Expense Type")} + + + + + + + + + + + {/* + + */} + + + ); +}; + +export default ClaimDetails; diff --git a/src/components/CreateClaim/ClaimInputGrid.tsx b/src/components/CreateClaim/ClaimInputGrid.tsx new file mode 100644 index 0000000..1231001 --- /dev/null +++ b/src/components/CreateClaim/ClaimInputGrid.tsx @@ -0,0 +1,442 @@ +"use client"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { useState, useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import PageTitle from "../PageTitle/PageTitle"; +import { Suspense } from "react"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Link from "next/link"; +import { t } from "i18next"; +import { + Box, + Container, + Modal, + Select, + SelectChangeEvent, + Typography, +} from "@mui/material"; +import { Close } from "@mui/icons-material"; +import AddIcon from "@mui/icons-material/Add"; +import EditIcon from "@mui/icons-material/Edit"; +import DeleteIcon from "@mui/icons-material/DeleteOutlined"; +import SaveIcon from "@mui/icons-material/Save"; +import CancelIcon from "@mui/icons-material/Close"; +import AddPhotoAlternateOutlinedIcon from "@mui/icons-material/AddPhotoAlternateOutlined"; +import ImageNotSupportedOutlinedIcon from "@mui/icons-material/ImageNotSupportedOutlined"; +import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; +import ArrowBackIcon from "@mui/icons-material/ArrowBack"; +import Swal from "sweetalert2"; +import { msg } from "../Swal/CustomAlerts"; +import React from "react"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { + GridRowsProp, + GridRowModesModel, + GridRowModes, + DataGrid, + GridColDef, + GridToolbarContainer, + GridFooterContainer, + GridActionsCellItem, + GridEventListener, + GridRowId, + GridRowModel, + GridRowEditStopReasons, + GridEditInputCell, + GridValueSetterParams, +} from "@mui/x-data-grid"; +import { LocalizationProvider } from "@mui/x-date-pickers"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import dayjs from "dayjs"; +import { Props } from "react-intl/src/components/relative"; +import palette from "@/theme/devias-material-kit/palette"; + +const weekdays = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]; + +interface BottomBarProps { + getCostTotal: () => number; + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +interface EditToolbarProps { + // setDay: (newDay : dayjs.Dayjs) => void; + setDay: (newDay: (oldDay: dayjs.Dayjs) => dayjs.Dayjs) => void; + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +interface EditFooterProps { + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +const BottomBar = (props: BottomBarProps) => { + const { setRows, setRowModesModel, getCostTotal } = props; + // const getCostTotal = props.getCostTotal; + const [newId, setNewId] = useState(-1); + const [invalidDays, setInvalidDays] = useState(0); + + const handleAddClick = () => { + const id = newId; + setNewId(newId - 1); + setRows((oldRows) => [ + ...oldRows, + { id, projectCode: "", task: "", isNew: true }, + ]); + setRowModesModel((oldModel) => ({ + ...oldModel, + [id]: { mode: GridRowModes.Edit, fieldToFocus: "projectCode" }, + })); + }; + + const totalColDef = { + flex: 1, + // style: {color:getCostTotal('mon')>24?"red":"black"} + }; + + const TotalCell = ({ value }: Props) => { + const [invalid, setInvalid] = useState(false); + + useEffect(() => { + const newInvalid = (value ?? 0) < 0; + setInvalid(newInvalid); + }, [value]); + + return ( + + $ {value} + + ); + }; + + return ( +
+
+ + Total: + + +
+ +
+ ); +}; + +const EditFooter = (props: EditFooterProps) => { + return ( +
+ + Total: + + test +
+ ); +}; + +interface ClaimInputGridProps { + onClose?: () => void; +} + +const initialRows: GridRowsProp = [ + { + id: 1, + date: new Date(), + description: "Taxi to client office", + cost: 169.5, + document: "taxi_receipt.jpg", + }, + { + id: 2, + date: dayjs().add(-14, "days").toDate(), + description: "MTR fee to Kowloon Bay Office", + cost: 15.5, + document: "octopus_invoice.jpg", + }, + { + id: 3, + date: dayjs().add(-44, "days").toDate(), + description: "Starbucks", + cost: 504, + }, +]; + +const ClaimInputGrid: React.FC = ({ ...props }) => { + const [rows, setRows] = useState(initialRows); + const [day, setDay] = useState(dayjs()); + const [rowModesModel, setRowModesModel] = React.useState( + {}, + ); + + const handleRowEditStop: GridEventListener<"rowEditStop"> = ( + params, + event, + ) => { + if (params.reason === GridRowEditStopReasons.rowFocusOut) { + event.defaultMuiPrevented = true; + } + }; + + const handleEditClick = (id: GridRowId) => () => { + setRowModesModel({ ...rowModesModel, [id]: { mode: GridRowModes.Edit } }); + }; + + const handleSaveClick = (id: GridRowId) => () => { + setRowModesModel({ ...rowModesModel, [id]: { mode: GridRowModes.View } }); + }; + + const handleDeleteClick = (id: GridRowId) => () => { + setRows(rows.filter((row) => row.id !== id)); + }; + + const handleCancelClick = (id: GridRowId) => () => { + setRowModesModel({ + ...rowModesModel, + [id]: { mode: GridRowModes.View, ignoreModifications: true }, + }); + + const editedRow = rows.find((row) => row.id === id); + if (editedRow!.isNew) { + setRows(rows.filter((row) => row.id !== id)); + } + }; + + const processRowUpdate = (newRow: GridRowModel) => { + const updatedRow = { ...newRow, isNew: false }; + setRows(rows.map((row) => (row.id === newRow.id ? updatedRow : row))); + return updatedRow; + }; + + const handleRowModesModelChange = (newRowModesModel: GridRowModesModel) => { + setRowModesModel(newRowModesModel); + }; + + const getCostTotal = () => { + let sum = 0; + rows.forEach((row) => { + sum += row["cost"] ?? 0; + }); + return sum; + }; + + const commonGridColConfig: any = { + type: "number", + // sortable: false, + //width: 100, + flex: 1, + align: "left", + headerAlign: "left", + // headerClassName: 'header', + editable: true, + renderEditCell: (value: any) => ( + + ), + }; + + const columns: GridColDef[] = [ + { + field: "actions", + type: "actions", + headerName: "Actions", + width: 100, + cellClassName: "actions", + getActions: ({ id }) => { + const isInEditMode = rowModesModel[id]?.mode === GridRowModes.Edit; + + if (isInEditMode) { + return [ + } + title="Save" + label="Save" + sx={{ + color: "primary.main", + }} + onClick={handleSaveClick(id)} + />, + } + title="Cancel" + label="Cancel" + className="textPrimary" + onClick={handleCancelClick(id)} + color="inherit" + />, + ]; + } + + return [ + } + title="Edit" + label="Edit" + className="textPrimary" + onClick={handleEditClick(id)} + color="inherit" + />, + } + onClick={handleDeleteClick(id)} + sx={{ color: "red" }} + />, + ]; + }, + }, + { + field: "date", + headerName: "Invoice Date", + // width: 220, + flex: 1, + editable: true, + type: "date", + }, + { + field: "description", + headerName: "Description", + // width: 220, + flex: 2, + editable: true, + type: "string", + }, + { + field: "cost", + headerName: "Cost (HKD)", + editable: true, + type: "number", + valueFormatter: (params) => { + return `$ ${params.value ?? 0}`; + }, + }, + { + field: "document", + headerName: "Supporting Document", + type: "string", + editable: true, + flex: 2, + renderCell: (params) => { + return params.value ? ( + + + {params.value} + + + ) : ( + No Documents + ); + }, + renderEditCell: (params) => { + return params.value ? ( + + + {params.value} + + + + ) : ( + + ); + }, + }, + ]; + + return ( + + + + + + ); +}; + +export default ClaimInputGrid; diff --git a/src/components/CreateClaim/CreateClaim.tsx b/src/components/CreateClaim/CreateClaim.tsx new file mode 100644 index 0000000..5e89398 --- /dev/null +++ b/src/components/CreateClaim/CreateClaim.tsx @@ -0,0 +1,48 @@ +"use client"; + +import Check from "@mui/icons-material/Check"; +import Close from "@mui/icons-material/Close"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Tab from "@mui/material/Tab"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import { useRouter } from "next/navigation"; +import React, { useCallback, useState } from "react"; +import { useTranslation } from "react-i18next"; +import ClaimProjectDetails from "./ClaimDetails"; +// import TaskSetup from "./TaskSetup"; +// import StaffAllocation from "./StaffAllocation"; +// import ResourceMilestone from "./ResourceMilestone"; + +const CreateProject: React.FC = () => { + const [tabIndex, setTabIndex] = useState(0); + const { t } = useTranslation(); + const router = useRouter(); + + const handleCancel = () => { + router.back(); + }; + + const handleTabChange = useCallback>( + (_e, newValue) => { + setTabIndex(newValue); + }, + [], + ); + + return ( + <> + + + + + + + ); +}; + +export default CreateProject; diff --git a/src/components/CreateClaim/index.ts b/src/components/CreateClaim/index.ts new file mode 100644 index 0000000..a0bd052 --- /dev/null +++ b/src/components/CreateClaim/index.ts @@ -0,0 +1 @@ +export { default } from "./CreateClaim"; diff --git a/src/components/CreateProject/CreateProject.tsx b/src/components/CreateProject/CreateProject.tsx new file mode 100644 index 0000000..39adc96 --- /dev/null +++ b/src/components/CreateProject/CreateProject.tsx @@ -0,0 +1,125 @@ +"use client"; + +import Check from "@mui/icons-material/Check"; +import Close from "@mui/icons-material/Close"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Tab from "@mui/material/Tab"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import { useRouter } from "next/navigation"; +import React, { useCallback, useState } from "react"; +import { useTranslation } from "react-i18next"; +import ProjectClientDetails from "./ProjectClientDetails"; +import TaskSetup from "./TaskSetup"; +import StaffAllocation from "./StaffAllocation"; +import ResourceMilestone from "./ResourceMilestone"; +import { Task } from "@/app/api/tasks"; +import { + FieldErrors, + FormProvider, + SubmitErrorHandler, + SubmitHandler, + useForm, +} from "react-hook-form"; +import { CreateProjectInputs } from "@/app/api/projects/actions"; +import { Error } from "@mui/icons-material"; + +export interface Props { + allTasks: Task[]; +} + +const hasErrorsInTab = ( + tabIndex: number, + errors: FieldErrors, +) => { + switch (tabIndex) { + case 0: + return errors.projectName; + default: + false; + } +}; + +const CreateProject: React.FC = ({ allTasks }) => { + const [tabIndex, setTabIndex] = useState(0); + const { t } = useTranslation(); + const router = useRouter(); + + const handleCancel = () => { + router.back(); + }; + + const handleTabChange = useCallback>( + (_e, newValue) => { + setTabIndex(newValue); + }, + [], + ); + + const onSubmit = useCallback>((data) => { + console.log(data); + }, []); + + const onSubmitError = useCallback>( + (errors) => { + // Set the tab so that the focus will go there + if (errors.projectName) { + setTabIndex(0); + } + }, + [], + ); + + const formProps = useForm({ + defaultValues: { + tasks: {}, + allocatedStaffIds: [], + milestones: {}, + }, + }); + + const errors = formProps.formState.errors; + + return ( + + + + + ) : undefined + } + iconPosition="end" + /> + + + + + {} + {} + {} + {} + + + + + + + ); +}; + +export default CreateProject; diff --git a/src/components/CreateProject/CreateProjectWrapper.tsx b/src/components/CreateProject/CreateProjectWrapper.tsx new file mode 100644 index 0000000..f5fbb5a --- /dev/null +++ b/src/components/CreateProject/CreateProjectWrapper.tsx @@ -0,0 +1,10 @@ +import { fetchAllTasks } from "@/app/api/tasks"; +import CreateProject from "./CreateProject"; + +const CreateProjectWrapper: React.FC = async () => { + const tasks = await fetchAllTasks(); + + return ; +}; + +export default CreateProjectWrapper; diff --git a/src/components/CreateProject/MilestoneSection.tsx b/src/components/CreateProject/MilestoneSection.tsx new file mode 100644 index 0000000..dd4c154 --- /dev/null +++ b/src/components/CreateProject/MilestoneSection.tsx @@ -0,0 +1,338 @@ +import { CreateProjectInputs, PaymentInputs } from "@/app/api/projects/actions"; +import { TaskGroup } from "@/app/api/tasks"; +import { Add, Check, Close, Delete } from "@mui/icons-material"; +import { + Stack, + Typography, + Grid, + FormControl, + Box, + Button, +} from "@mui/material"; +import { + GridColDef, + GridActionsCellItem, + GridToolbarContainer, + GridRowModesModel, + GridRowModes, + FooterPropsOverrides, + GridRowId, + GridEventListener, + useGridApiRef, + GridRowModel, +} from "@mui/x-data-grid"; +import { LocalizationProvider, DatePicker } from "@mui/x-date-pickers"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import dayjs from "dayjs"; +import "dayjs/locale/zh-hk"; +import React, { useCallback, useEffect, useMemo, useState } from "react"; +import { useFormContext } from "react-hook-form"; +import { useTranslation } from "react-i18next"; +import StyledDataGrid from "../StyledDataGrid"; +import { moneyFormatter } from "@/app/utils/formatUtil"; +import isDate from "lodash/isDate"; + +interface Props { + taskGroupId: TaskGroup["id"]; +} + +declare module "@mui/x-data-grid" { + interface FooterPropsOverrides { + onAdd: () => void; + } +} + +type PaymentRow = Partial; + +const MilestoneSection: React.FC = ({ taskGroupId }) => { + const { t } = useTranslation(); + const { getValues, setValue } = useFormContext(); + const [payments, setPayments] = useState( + getValues("milestones")[taskGroupId]?.payments || [], + ); + const [rowModesModel, setRowModesModel] = useState({}); + // Change the payments table depending on the TaskGroupId + useEffect(() => { + setPayments(getValues("milestones")[taskGroupId]?.payments || []); + setRowModesModel({}); + }, [getValues, taskGroupId]); + + const apiRef = useGridApiRef(); + const addRow = useCallback(() => { + const id = Date.now(); + setPayments((p) => [...p, { id, _isNew: true }]); + setRowModesModel((model) => ({ + ...model, + [id]: { mode: GridRowModes.Edit, fieldToFocus: "description" }, + })); + }, []); + + const validateRow = useCallback( + (id: GridRowId) => { + const row = apiRef.current.getRowWithUpdatedValues(id, "") as PaymentRow; + let error: keyof PaymentInputs | "" = ""; + if (!row.description) { + error = "description"; + } else if (!(isDate(row.date) && row.date.getTime())) { + error = "date"; + } else if (!(row.amount && row.amount >= 0)) { + error = "amount"; + } + + apiRef.current.updateRows([{ id, _error: error }]); + return !error; + }, + [apiRef], + ); + + const handleCancel = useCallback( + (id: GridRowId) => () => { + setRowModesModel((model) => ({ + ...model, + [id]: { mode: GridRowModes.View, ignoreModifications: true }, + })); + const editedRow = payments.find((payment) => payment.id === id); + if (editedRow?._isNew) { + setPayments((ps) => ps.filter((p) => p.id !== id)); + } + }, + [payments], + ); + + const handleDelete = useCallback( + (id: GridRowId) => () => { + setPayments((ps) => ps.filter((p) => p.id !== id)); + }, + [], + ); + + const handleSave = useCallback( + (id: GridRowId) => () => { + if (validateRow(id)) { + setRowModesModel((model) => ({ + ...model, + [id]: { mode: GridRowModes.View }, + })); + } + }, + [validateRow], + ); + + const handleEditStop = useCallback>( + (params, event) => { + if (!validateRow(params.id)) { + event.defaultMuiPrevented = true; + } + }, + [validateRow], + ); + + const processRowUpdate = useCallback((newRow: GridRowModel) => { + const updatedRow = { ...newRow, _isNew: false }; + setPayments((ps) => ps.map((p) => (p.id === newRow.id ? updatedRow : p))); + return updatedRow; + }, []); + + const columns = useMemo( + () => [ + { + type: "actions", + field: "actions", + headerName: t("Actions"), + getActions: ({ id }) => { + if (rowModesModel[id]?.mode === GridRowModes.Edit) { + return [ + } + label={t("Save")} + onClick={handleSave(id)} + />, + } + label={t("Cancel")} + onClick={handleCancel(id)} + />, + ]; + } + + return [ + } + label={t("Remove")} + onClick={handleDelete(id)} + />, + ]; + }, + }, + { + field: "description", + headerName: t("Payment Milestone Description"), + width: 300, + editable: true, + }, + { + field: "date", + headerName: t("Payment Milestone Date"), + width: 200, + type: "date", + editable: true, + valueGetter(params) { + return new Date(params.value); + }, + }, + { + field: "amount", + headerName: t("Payment Milestone Amount"), + width: 300, + editable: true, + type: "number", + valueFormatter(params) { + return moneyFormatter.format(params.value); + }, + }, + ], + [handleCancel, handleDelete, handleSave, rowModesModel, t], + ); + + useEffect(() => { + const milestones = getValues("milestones"); + setValue("milestones", { + ...milestones, + [taskGroupId]: { + ...milestones[taskGroupId], + payments: payments + .filter((p) => !p._isNew && !p._error) + .map((p) => ({ + description: p.description!, + id: p.id!, + amount: p.amount!, + date: dayjs(p.date!).toISOString(), + })), + }, + }); + }, [getValues, payments, setValue, taskGroupId]); + + return ( + + + {t("Task Stage Milestones")} + + + + + + { + if (!date) return; + const milestones = getValues("milestones"); + setValue("milestones", { + ...milestones, + [taskGroupId]: { + ...milestones[taskGroupId], + startDate: date.toISOString(), + }, + }); + }} + /> + + + + + { + if (!date) return; + const milestones = getValues("milestones"); + setValue("milestones", { + ...milestones, + [taskGroupId]: { + ...milestones[taskGroupId], + endDate: date.toISOString(), + }, + }); + }} + /> + + + + + ({ + marginBlockStart: 1, + marginInline: -3, + borderBottom: `1px solid ${theme.palette.divider}`, + })} + > + { + return params.row._error === params.field ? "hasError" : ""; + }} + slots={{ + footer: FooterToolbar, + noRowsOverlay: NoRowsOverlay, + }} + slotProps={{ + footer: { onAdd: addRow }, + }} + /> + + + ); +}; + +const NoRowsOverlay: React.FC = () => { + const { t } = useTranslation(); + return ( + + + {t("Add some payment milestones!")} + + + ); +}; + +const FooterToolbar: React.FC = ({ onAdd }) => { + const { t } = useTranslation(); + return ( + + + + ); +}; + +export default MilestoneSection; diff --git a/src/components/CreateProject/ProjectClientDetails.tsx b/src/components/CreateProject/ProjectClientDetails.tsx new file mode 100644 index 0000000..610c15f --- /dev/null +++ b/src/components/CreateProject/ProjectClientDetails.tsx @@ -0,0 +1,153 @@ +"use client"; + +import Stack from "@mui/material/Stack"; +import Box from "@mui/material/Box"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import FormControl from "@mui/material/FormControl"; +import Grid from "@mui/material/Grid"; +import InputLabel from "@mui/material/InputLabel"; +import MenuItem from "@mui/material/MenuItem"; +import Select from "@mui/material/Select"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { useTranslation } from "react-i18next"; +import CardActions from "@mui/material/CardActions"; +import RestartAlt from "@mui/icons-material/RestartAlt"; +import Button from "@mui/material/Button"; +import { useFormContext } from "react-hook-form"; +import { CreateProjectInputs } from "@/app/api/projects/actions"; + +const ProjectClientDetails: React.FC<{ isActive: boolean }> = ({ + isActive, +}) => { + const { t } = useTranslation(); + const { + register, + formState: { errors }, + } = useFormContext(); + + return ( + + + + + {t("Project Details")} + + + + + + + + + + + {t("Project Category")} + + + + + + {t("Team Lead")} + + + + + + + + + + + + {t("Client Details")} + + + + + + + + + + + + + + + + + + + + {t("Client Subsidiary")} + + + + + + + + + + + ); +}; + +export default ProjectClientDetails; diff --git a/src/components/CreateProject/ProjectTotalFee.tsx b/src/components/CreateProject/ProjectTotalFee.tsx new file mode 100644 index 0000000..ead5e71 --- /dev/null +++ b/src/components/CreateProject/ProjectTotalFee.tsx @@ -0,0 +1,47 @@ +import { CreateProjectInputs } from "@/app/api/projects/actions"; +import { TaskGroup } from "@/app/api/tasks"; +import { moneyFormatter } from "@/app/utils/formatUtil"; +import { Divider, Stack, Typography } from "@mui/material"; +import React from "react"; +import { useFormContext } from "react-hook-form"; +import { useTranslation } from "react-i18next"; + +interface Props { + taskGroups: TaskGroup[]; +} + +const ProjectTotalFee: React.FC = ({ taskGroups }) => { + const { t } = useTranslation(); + const { watch } = useFormContext(); + const milestones = watch("milestones"); + + let projectTotal = 0; + + return ( + + {taskGroups.map((group, index) => { + const payments = milestones[group.id]?.payments || []; + const paymentTotal = payments.reduce((acc, p) => acc + p.amount, 0); + projectTotal += paymentTotal; + + return ( + + {group.name} + {moneyFormatter.format(paymentTotal)} + + ); + })} + + + {t("Project Total Fee")} + {moneyFormatter.format(projectTotal)} + + + ); +}; + +export default ProjectTotalFee; diff --git a/src/components/CreateProject/ResourceCapacity.tsx b/src/components/CreateProject/ResourceCapacity.tsx new file mode 100644 index 0000000..ee466f6 --- /dev/null +++ b/src/components/CreateProject/ResourceCapacity.tsx @@ -0,0 +1,139 @@ +import { manhourFormatter } from "@/app/utils/formatUtil"; +import { + Box, + Stack, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Typography, +} from "@mui/material"; +import { useMemo } from "react"; +import { useTranslation } from "react-i18next"; + +const mockItems: ResourceItem[] = [ + { + grade: "Grade 1", + title: "A. QS / QS Trainee", + headcount: 20, + totalAvailableManhours: 39520, + loadedManhours: 3760, + remainingAvailableManhours: 35760, + }, + { + grade: "Grade 2", + title: "QS", + headcount: 20, + totalAvailableManhours: 39520, + loadedManhours: 3760, + remainingAvailableManhours: 35760, + }, + { + grade: "Grade 3", + title: "Senior QS", + headcount: 10, + totalAvailableManhours: 19760, + loadedManhours: 1530, + remainingAvailableManhours: 18230, + }, + { + grade: "Grade 4", + title: "A. Manager / Deputy Manager / Manager / S. Manager", + headcount: 5, + totalAvailableManhours: 9880, + loadedManhours: 2760, + remainingAvailableManhours: 7120, + }, + { + grade: "Grade 5", + title: "A. Director / Deputy Director / Director", + headcount: 20, + totalAvailableManhours: 1976, + loadedManhours: 374, + remainingAvailableManhours: 1602, + }, +]; + +interface ResourceColumn { + label: string; + name: keyof ResourceItem; +} + +interface ResourceItem { + grade: string; + title: string; + headcount: number; + totalAvailableManhours: number; + loadedManhours: number; + remainingAvailableManhours: number; +} + +interface Props { + items?: ResourceItem[]; +} + +const ResourceCapacity: React.FC = ({ items = mockItems }) => { + const { t } = useTranslation(); + const columns = useMemo( + () => [ + { label: t("Grade"), name: "grade" }, + { label: t("Title"), name: "title" }, + { label: t("Headcount"), name: "headcount" }, + { label: t("Total Available Manhours"), name: "totalAvailableManhours" }, + { label: t("Loaded Manhours"), name: "loadedManhours" }, + { + label: t("Remaining Available Manhours"), + name: "remainingAvailableManhours", + }, + ], + [t], + ); + + return ( + + + {t("Resource Capacity")} + + + + + + + {columns.map((column, idx) => ( + + {column.label} + + ))} + + + + {items.map((item, index) => { + return ( + + {columns.map((column, idx) => { + const columnName = column.name; + const cellData = item[columnName]; + + return ( + + {columnName !== "headcount" && + typeof cellData === "number" + ? manhourFormatter.format(cellData) + : cellData} + + ); + })} + + ); + })} + +
+
+
+
+ ); +}; + +export default ResourceCapacity; diff --git a/src/components/CreateProject/ResourceMilestone.tsx b/src/components/CreateProject/ResourceMilestone.tsx new file mode 100644 index 0000000..9acf287 --- /dev/null +++ b/src/components/CreateProject/ResourceMilestone.tsx @@ -0,0 +1,128 @@ +"use client"; + +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Typography from "@mui/material/Typography"; +import { useTranslation } from "react-i18next"; +import Button from "@mui/material/Button"; +import React, { useCallback, useMemo, useState } from "react"; +import CardActions from "@mui/material/CardActions"; +import RestartAlt from "@mui/icons-material/RestartAlt"; +import { + Alert, + FormControl, + InputLabel, + MenuItem, + Select, + SelectChangeEvent, +} from "@mui/material"; +import { Task, TaskGroup } from "@/app/api/tasks"; +import uniqBy from "lodash/uniqBy"; +import { useFormContext } from "react-hook-form"; +import { CreateProjectInputs } from "@/app/api/projects/actions"; +import MilestoneSection from "./MilestoneSection"; +import ResourceSection from "./ResourceSection"; +import ProjectTotalFee from "./ProjectTotalFee"; + +export interface Props { + allTasks: Task[]; + defaultManhourBreakdownByGrade?: { [gradeId: number]: number }; + isActive: boolean; +} + +const ResourceMilestone: React.FC = ({ + allTasks, + defaultManhourBreakdownByGrade, + isActive, +}) => { + const { t } = useTranslation(); + const { getValues } = useFormContext(); + const tasks = useMemo(() => { + return allTasks.filter((task) => getValues("tasks")[task.id]); + }, [allTasks, getValues]); + + const taskGroups = useMemo(() => { + return uniqBy( + tasks.map((task) => task.taskGroup), + "id", + ); + }, [tasks]); + const [currentTaskGroupId, setCurrentTaskGroupId] = useState( + taskGroups[0].id, + ); + const [currentTasks, setCurrentTasks] = useState( + tasks.filter((t) => t.taskGroup.id === currentTaskGroupId), + ); + const onSelectTaskGroup = useCallback( + (event: SelectChangeEvent) => { + const id = event.target.value; + const newTaksGroupId = typeof id === "string" ? parseInt(id) : id; + setCurrentTaskGroupId(newTaksGroupId); + setCurrentTasks(tasks.filter((t) => t.taskGroup.id === newTaksGroupId)); + }, + [tasks], + ); + + return ( + <> + + + + {t("Task Stage")} + + + + + + + + + + + + + + + + ); +}; + +const NoTaskState: React.FC> = ({ isActive }) => { + const { t } = useTranslation(); + return ( + + + + {t('Please add some tasks in "Project Task Setup" first!')} + + + + ); +}; + +const ResourceMilestoneWrapper: React.FC = (props) => { + const { getValues } = useFormContext(); + + if (Object.keys(getValues("tasks")).length === 0) { + return ; + } + + return ; +}; + +export default ResourceMilestoneWrapper; diff --git a/src/components/CreateProject/ResourceSection.tsx b/src/components/CreateProject/ResourceSection.tsx new file mode 100644 index 0000000..9b60fc1 --- /dev/null +++ b/src/components/CreateProject/ResourceSection.tsx @@ -0,0 +1,226 @@ +import { Task } from "@/app/api/tasks"; +import { + Box, + Typography, + Grid, + Paper, + List, + ListItemButton, + ListItemText, + TextField, +} from "@mui/material"; +import { useState, useCallback, useEffect, useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { Props as ResourceMilestoneProps } from "./ResourceMilestone"; +import StyledDataGrid from "../StyledDataGrid"; +import { useForm, useFormContext } from "react-hook-form"; +import { GridColDef, GridRowModel, useGridApiRef } from "@mui/x-data-grid"; +import { + CreateProjectInputs, + ManhourAllocation, +} from "@/app/api/projects/actions"; +import isEmpty from "lodash/isEmpty"; +import _reduce from "lodash/reduce"; + +const mockGrades = [1, 2, 3, 4, 5]; + +interface Props { + tasks: Task[]; + manhourBreakdownByGrade: ResourceMilestoneProps["defaultManhourBreakdownByGrade"]; +} + +type Row = ManhourAllocation & { id: "manhourAllocation" }; + +const parseValidManhours = (value: number | string): number => { + const inputNumber = Number(value); + return isNaN(inputNumber) || inputNumber < 0 ? 0 : inputNumber; +}; + +const ResourceSection: React.FC = ({ + tasks, + manhourBreakdownByGrade = mockGrades.reduce< + NonNullable + >((acc, grade) => { + return { ...acc, [grade]: 1 }; + }, {}), +}) => { + const { t } = useTranslation(); + const [selectedTaskId, setSelectedTaskId] = useState(tasks[0].id); + const makeOnTaskSelect = useCallback( + (taskId: Task["id"]): React.MouseEventHandler => + () => { + return setSelectedTaskId(taskId); + }, + [], + ); + + useEffect(() => { + setSelectedTaskId(tasks[0].id); + }, [tasks]); + + const { getValues, setValue } = useFormContext(); + + const updateTaskAllocations = useCallback( + (newAllocations: ManhourAllocation) => { + setValue("tasks", { + ...getValues("tasks"), + [selectedTaskId]: { + manhourAllocation: newAllocations, + }, + }); + }, + [getValues, selectedTaskId, setValue], + ); + + const gridApiRef = useGridApiRef(); + const columns = useMemo(() => { + return mockGrades.map((grade) => ({ + field: grade.toString(), + editable: true, + sortable: false, + width: 120, + headerName: t("Grade {{grade}}", { grade }), + type: "number", + valueParser: parseValidManhours, + valueFormatter(params) { + return Number(params.value).toFixed(2); + }, + })); + }, [t]); + + const rows = useMemo(() => { + const initialAllocation = + getValues("tasks")[selectedTaskId].manhourAllocation; + if (!isEmpty(initialAllocation)) { + return [{ ...initialAllocation, id: "manhourAllocation" }]; + } + return [ + mockGrades.reduce( + (acc, grade) => { + return { ...acc, [grade]: 0 }; + }, + { id: "manhourAllocation" }, + ), + ]; + }, [getValues, selectedTaskId]); + + const initialManhours = useMemo(() => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { id, ...allocations } = rows[0]; + return Object.values(allocations).reduce((acc, hours) => acc + hours, 0); + }, [rows]); + + const { + register, + reset, + getValues: getManhourFormValues, + setValue: setManhourFormValue, + } = useForm<{ manhour: number }>({ + defaultValues: { + manhour: initialManhours, + }, + }); + + // Reset man hour input when task changes + useEffect(() => { + reset({ manhour: initialManhours }); + }, [initialManhours, reset, selectedTaskId]); + + const updateAllocation = useCallback(() => { + const inputHour = getManhourFormValues("manhour"); + const ratioSum = Object.values(manhourBreakdownByGrade).reduce( + (acc, ratio) => acc + ratio, + 0, + ); + const newAllocations = _reduce( + manhourBreakdownByGrade, + (acc, value, key) => { + return { ...acc, [key]: (inputHour / ratioSum) * value }; + }, + {}, + ); + gridApiRef.current.updateRows([ + { id: "manhourAllocation", ...newAllocations }, + ]); + updateTaskAllocations(newAllocations); + }, [ + getManhourFormValues, + gridApiRef, + manhourBreakdownByGrade, + updateTaskAllocations, + ]); + + const processRowUpdate = useCallback( + (newRow: GridRowModel) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { id: rowId, ...newAllocations } = newRow; + const totalHours = Object.values( + newAllocations as ManhourAllocation, + ).reduce((acc, hour) => acc + hour, 0); + setManhourFormValue("manhour", totalHours); + updateTaskAllocations(newAllocations); + return newRow; + }, + [setManhourFormValue, updateTaskAllocations], + ); + + return ( + + + {t("Task Breakdown")} + + + + + + {tasks.map((task, index) => { + return ( + + + + ); + })} + + + + + + + + + + + + ); +}; + +export default ResourceSection; diff --git a/src/components/CreateProject/StaffAllocation.tsx b/src/components/CreateProject/StaffAllocation.tsx new file mode 100644 index 0000000..f55dc5d --- /dev/null +++ b/src/components/CreateProject/StaffAllocation.tsx @@ -0,0 +1,334 @@ +"use client"; + +import { useTranslation } from "react-i18next"; +import React, { useEffect } from "react"; +import RestartAlt from "@mui/icons-material/RestartAlt"; +import SearchResults, { Column } from "../SearchResults"; +import { Search, Clear, PersonAdd, PersonRemove } from "@mui/icons-material"; +import { + Stack, + Typography, + Grid, + TextField, + InputAdornment, + IconButton, + FormControl, + InputLabel, + Select, + MenuItem, + Box, + Button, + Card, + CardActions, + CardContent, + TabsProps, + Tab, + Tabs, + SelectChangeEvent, +} from "@mui/material"; +import differenceBy from "lodash/differenceBy"; +import uniq from "lodash/uniq"; +import ResourceCapacity from "./ResourceCapacity"; +import { useFormContext } from "react-hook-form"; +import { CreateProjectInputs } from "@/app/api/projects/actions"; + +interface StaffResult { + id: number; + name: string; + team: string; + grade: string; + title: string; +} + +const mockStaffs: StaffResult[] = [ + { + name: "Albert", + grade: "1", + id: 1, + team: "ABC", + title: "Associate Quantity Surveyor", + }, + { + name: "Bernard", + grade: "2", + id: 2, + team: "ABC", + title: "Quantity Surveyor", + }, + { + name: "Carl", + grade: "3", + id: 3, + team: "XYZ", + title: "Senior Quantity Surveyor", + }, + { name: "Denis", grade: "4", id: 4, team: "ABC", title: "Manager" }, + { name: "Edward", grade: "5", id: 5, team: "ABC", title: "Director" }, + { name: "Fred", grade: "1", id: 6, team: "XYZ", title: "General Laborer" }, + { name: "Gordon", grade: "2", id: 7, team: "ABC", title: "Inspector" }, + { + name: "Heather", + grade: "3", + id: 8, + team: "XYZ", + title: "Field Engineer", + }, + { name: "Ivan", grade: "4", id: 9, team: "ABC", title: "Senior Manager" }, + { + name: "Jackson", + grade: "5", + id: 10, + team: "XYZ", + title: "Senior Director", + }, + { + name: "Kurt", + grade: "1", + id: 11, + team: "ABC", + title: "Construction Assistant", + }, + { name: "Lawrence", grade: "2", id: 12, team: "ABC", title: "Operator" }, +]; + +interface Props { + allStaff?: StaffResult[]; + isActive: boolean; +} + +const StaffAllocation: React.FC = ({ + allStaff = mockStaffs, + isActive, +}) => { + const { t } = useTranslation(); + const { setValue, getValues } = useFormContext(); + + const [filteredStaff, setFilteredStaff] = React.useState(allStaff); + const [selectedStaff, setSelectedStaff] = React.useState< + typeof filteredStaff + >( + allStaff.filter((staff) => + getValues("allocatedStaffIds").includes(staff.id), + ), + ); + + // Adding / Removing staff + const addStaff = React.useCallback((staff: StaffResult) => { + setSelectedStaff((staffs) => [...staffs, staff]); + }, []); + const removeStaff = React.useCallback((staff: StaffResult) => { + setSelectedStaff((staffs) => staffs.filter((s) => s.id !== staff.id)); + }, []); + const clearStaff = React.useCallback(() => { + setSelectedStaff([]); + }, []); + // Sync with form + useEffect(() => { + setValue( + "allocatedStaffIds", + selectedStaff.map((staff) => staff.id), + ); + }, [selectedStaff, setValue]); + + const staffPoolColumns = React.useMemo[]>( + () => [ + { + label: t("Add"), + name: "id", + onClick: addStaff, + buttonIcon: , + }, + { label: t("Staff ID"), name: "id" }, + { label: t("Staff Name"), name: "name" }, + { label: t("Team"), name: "team" }, + { label: t("Grade"), name: "grade" }, + { label: t("Title"), name: "title" }, + ], + [addStaff, t], + ); + + const allocatedStaffColumns = React.useMemo[]>( + () => [ + { + label: t("Remove"), + name: "id", + onClick: removeStaff, + buttonIcon: , + }, + { label: t("Staff ID"), name: "id" }, + { label: t("Staff Name"), name: "name" }, + { label: t("Team"), name: "team" }, + { label: t("Grade"), name: "grade" }, + { label: t("Title"), name: "title" }, + ], + [removeStaff, t], + ); + + // Query related + const [query, setQuery] = React.useState(""); + const onQueryInputChange = React.useCallback< + React.ChangeEventHandler + >((e) => { + setQuery(e.target.value); + }, []); + const clearQueryInput = React.useCallback(() => { + setQuery(""); + }, []); + const columnFilters = React.useMemo<(keyof StaffResult)[]>( + () => ["team", "grade"], + [], + ); + const filterValues = React.useMemo(() => { + return columnFilters.reduce<{ [filter in keyof StaffResult]?: string[] }>( + (acc, filter) => { + return { + ...acc, + [filter]: uniq(allStaff.map((staff) => staff[filter])), + }; + }, + {}, + ); + }, [columnFilters, allStaff]); + const defaultFilterValues = React.useMemo(() => { + return columnFilters.reduce<{ [filter in keyof StaffResult]?: string }>( + (acc, filter) => { + return { ...acc, [filter]: "All" }; + }, + {}, + ); + }, [columnFilters]); + const [filters, setFilters] = React.useState(defaultFilterValues); + const makeFilterSelect = React.useCallback( + (filter: keyof StaffResult) => (event: SelectChangeEvent) => { + setFilters((f) => ({ ...f, [filter]: event.target.value })); + }, + [], + ); + + React.useEffect(() => { + setFilteredStaff( + allStaff.filter((staff) => { + const q = query.toLowerCase(); + return ( + (staff.name.toLowerCase().includes(q) || + staff.id.toString().includes(q) || + staff.title.toLowerCase().includes(q)) && + Object.entries(filters).every(([filterKey, filterValue]) => { + const staffColumnValue = staff[filterKey as keyof StaffResult]; + return staffColumnValue === filterValue || filterValue === "All"; + }) + ); + }), + ); + }, [allStaff, filters, query]); + + // Tab related + const [tabIndex, setTabIndex] = React.useState(0); + const handleTabChange = React.useCallback>( + (_e, newValue) => { + setTabIndex(newValue); + }, + [], + ); + + const reset = React.useCallback(() => { + clearQueryInput(); + clearStaff(); + setFilters(defaultFilterValues); + }, [clearQueryInput, clearStaff, defaultFilterValues]); + + return ( + <> + + + + + {t("Staff Allocation")} + + + + + + + + + + ), + }} + /> + + {columnFilters.map((filter, idx) => { + const label = staffPoolColumns.find( + (c) => c.name === filter, + )!.label; + + return ( + + + {label} + + + + ); + })} + + + + + + + {tabIndex === 0 && ( + + )} + {tabIndex === 1 && ( + + )} + + + + + + + + + + + + + + ); +}; + +export default StaffAllocation; diff --git a/src/components/CreateProject/TaskSetup.tsx b/src/components/CreateProject/TaskSetup.tsx new file mode 100644 index 0000000..41fa76a --- /dev/null +++ b/src/components/CreateProject/TaskSetup.tsx @@ -0,0 +1,97 @@ +"use client"; + +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Grid from "@mui/material/Grid"; +import Typography from "@mui/material/Typography"; +import { useTranslation } from "react-i18next"; +import TransferList from "../TransferList"; +import Button from "@mui/material/Button"; +import React, { useMemo } from "react"; +import CardActions from "@mui/material/CardActions"; +import RestartAlt from "@mui/icons-material/RestartAlt"; +import FormControl from "@mui/material/FormControl"; +import Select from "@mui/material/Select"; +import MenuItem from "@mui/material/MenuItem"; +import InputLabel from "@mui/material/InputLabel"; +import { Task } from "@/app/api/tasks"; +import { useFormContext } from "react-hook-form"; +import { CreateProjectInputs } from "@/app/api/projects/actions"; + +interface Props { + allTasks: Task[]; + isActive: boolean; +} + +const TaskSetup: React.FC = ({ allTasks: tasks, isActive }) => { + const { t } = useTranslation(); + const { getValues, setValue } = useFormContext(); + const currentTasks = getValues("tasks"); + + const items = useMemo( + () => tasks.map((t) => ({ id: t.id, label: t.name, group: t.taskGroup })), + [tasks], + ); + const selectedItems = useMemo(() => { + return tasks + .filter((t) => currentTasks[t.id]) + .map((t) => ({ id: t.id, label: t.name, group: t.taskGroup })); + }, [currentTasks, tasks]); + + return ( + + + + {t("Task List Setup")} + + + + + {t("Task List Source")} + + + + + { + const newTasks = selectedTasks.reduce( + (acc, item) => { + // Reuse the task from currentTasks if present + return { + ...acc, + [item.id]: currentTasks[item.id] ?? { manhourAllocation: {} }, + }; + }, + {}, + ); + + setValue("tasks", newTasks); + }} + allItemsLabel={t("Task Pool")} + selectedItemsLabel={t("Project Task List")} + /> + + + + + + ); +}; + +export default TaskSetup; diff --git a/src/components/CreateProject/index.ts b/src/components/CreateProject/index.ts new file mode 100644 index 0000000..6332185 --- /dev/null +++ b/src/components/CreateProject/index.ts @@ -0,0 +1 @@ +export { default } from "./CreateProjectWrapper"; diff --git a/src/components/CreateTaskTemplate/CreateTaskTemplate.tsx b/src/components/CreateTaskTemplate/CreateTaskTemplate.tsx new file mode 100644 index 0000000..2f5543e --- /dev/null +++ b/src/components/CreateTaskTemplate/CreateTaskTemplate.tsx @@ -0,0 +1,137 @@ +"use client"; + +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Grid from "@mui/material/Grid"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { useTranslation } from "react-i18next"; +import TransferList from "../TransferList"; +import Button from "@mui/material/Button"; +import Check from "@mui/icons-material/Check"; +import Close from "@mui/icons-material/Close"; +import { useRouter } from "next/navigation"; +import React from "react"; +import Stack from "@mui/material/Stack"; +import { Task } from "@/app/api/tasks"; +import { + NewTaskTemplateFormInputs, + saveTaskTemplate, +} from "@/app/api/tasks/actions"; +import { SubmitHandler, useForm } from "react-hook-form"; + +interface Props { + tasks: Task[]; +} + +const CreateTaskTemplate: React.FC = ({ tasks }) => { + const { t } = useTranslation(); + + const router = useRouter(); + const handleCancel = () => { + router.back(); + }; + + const items = React.useMemo( + () => + tasks.map((task) => ({ + id: task.id, + label: task.name, + group: task.taskGroup || undefined, + })), + [tasks], + ); + + const [serverError, setServerError] = React.useState(""); + + const { + register, + handleSubmit, + setValue, + formState: { errors, isSubmitting }, + } = useForm(); + + const onSubmit: SubmitHandler = React.useCallback( + async (data) => { + try { + setServerError(""); + await saveTaskTemplate(data); + router.replace("/tasks"); + } catch (e) { + setServerError(t("An error has occurred. Please try again later.")); + } + }, + [router, t], + ); + + return ( + + + + {t("Task List Setup")} + + + + + + + + + { + setValue( + "taskIds", + selectedItems.map((item) => item.id), + ); + }} + allItemsLabel={t("Task Pool")} + selectedItemsLabel={t("Task List Template")} + /> + + + {serverError && ( + + {serverError} + + )} + + + + + + ); +}; + +export default CreateTaskTemplate; diff --git a/src/components/CreateTaskTemplate/CreateTaskTemplateWrapper.tsx b/src/components/CreateTaskTemplate/CreateTaskTemplateWrapper.tsx new file mode 100644 index 0000000..77888a2 --- /dev/null +++ b/src/components/CreateTaskTemplate/CreateTaskTemplateWrapper.tsx @@ -0,0 +1,11 @@ +import React from "react"; +import CreateTaskTemplate from "./CreateTaskTemplate"; +import { fetchAllTasks } from "@/app/api/tasks"; + +const CreateTaskTemplateWrapper: React.FC = async () => { + const tasks = await fetchAllTasks(); + + return ; +}; + +export default CreateTaskTemplateWrapper; diff --git a/src/components/CreateTaskTemplate/index.ts b/src/components/CreateTaskTemplate/index.ts new file mode 100644 index 0000000..e52ead3 --- /dev/null +++ b/src/components/CreateTaskTemplate/index.ts @@ -0,0 +1 @@ +export { default } from "./CreateTaskTemplateWrapper"; diff --git a/src/components/CustomCardGrid/CustomCardGrid.tsx b/src/components/CustomCardGrid/CustomCardGrid.tsx new file mode 100644 index 0000000..22454a2 --- /dev/null +++ b/src/components/CustomCardGrid/CustomCardGrid.tsx @@ -0,0 +1,240 @@ +import * as React from "react"; +import { + Card, + CardHeader, + CardContent, + SxProps, + Theme, + Grid, +} from "@mui/material"; +import { DataGrid, GridColDef } from "@mui/x-data-grid"; +import { darken, lighten, styled } from "@mui/material/styles"; +import { PROJECT_CARD_STYLE } from "@/theme/colorConst"; +import { useRef, useEffect, useState } from "react"; +import Swal from "sweetalert2"; +import styledcmp from "styled-components"; + +const CardWrapper = styledcmp.div` + /* Styles for the card when not hovered */ + background-color: #f0f0f0; + padding: 10px; + /* ...other styles... */ + + &:hover { + /* Styles for the card when hovered */ + background-color: #c0c0c0; + /* ...other hover styles... */ + } +`; + +interface CustomCardGridProps { + Title?: string; + cardsPerRow?: number; + rows?: any[]; + columns?: any[]; + items: any[]; + columnWidth?: number; + Style?: boolean; + sx?: SxProps; + dataGridHeight?: number; + cardStyle?: any; + [key: string]: any; +} + +const CustomCardGrid: React.FC = ({ + Title, + rows, + items, + columns, + columnWidth, + cardsPerRow = 4, + Style = true, + sx, + dataGridHeight, + ...props +}) => { + const getBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.7) : lighten(color, 0.7); + + const getHoverBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.6) : lighten(color, 0.6); + + const getSelectedBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.5) : lighten(color, 0.5); + + const getSelectedHoverBackgroundColor = ( + color: string, + mode: "light" | "dark", + ) => (mode === "dark" ? darken(color, 0.4) : lighten(color, 0.4)); + + const StyledCard = styled(Card)(({ theme }) => ({ + "& .super-app-theme--Open": { + backgroundColor: getBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--finish": { + backgroundColor: getBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--danger": { + backgroundColor: getBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--warning": { + backgroundColor: getBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + }, + }, + }, + })); + + const CardItem = (item: any) => { + const cardItem = item.item as Record; + return ( + props.cardStyle ?? ( + // + + + {Object.keys(cardItem).map((key) => ( +

+ {key}: {cardItem[key]} +

+ ))} +
+
+ //
+ ) + ); + }; + + const containerRef = useRef(null!); + + const [cardMargin, setCardMargin] = useState(1.5); + + useEffect(() => { + console.log(CardItem); + const resizeHandler = () => { + const containerWidth = containerRef.current.offsetWidth; + const cardCount = items.length; + const rootSize = parseFloat( + getComputedStyle(document.documentElement).fontSize, + ); + setCardMargin( + (containerWidth - + cardsPerRow * + (rootSize * parseInt(PROJECT_CARD_STYLE.width.slice(0, -3), 10))) / + (2 * cardsPerRow), + ); + // Set the cardMargin value using style={{margin: `${cardMargin}px`, ...PROJECT_CARD_STYLE}} + }; + + window.addEventListener("resize", resizeHandler); + + resizeHandler(); // Initial calculation + + // Swal.fire({ + // title: 'Error! ', + // text: `Card Count is ${items.length}`, + // icon: 'success', + // confirmButtonText: 'Jus Cool' + // }) + + return () => { + window.removeEventListener("resize", resizeHandler); + }; + }, [items]); + + return ( +
+ {/*

width is {containerRef.current == null? "idk":containerRef.current.offsetWidth}, margin is {cardMargin}

*/} + {items.map((item, index) => ( +
+ {props.cardStyle ? props.cardStyle(item) : } +
+ ))} +
+ ); +}; + +export default CustomCardGrid; diff --git a/src/components/CustomCardGrid/index.ts b/src/components/CustomCardGrid/index.ts new file mode 100644 index 0000000..b051fef --- /dev/null +++ b/src/components/CustomCardGrid/index.ts @@ -0,0 +1 @@ +export { default } from "./CustomCardGrid"; diff --git a/src/components/CustomDatagrid/CustomDatagrid.tsx b/src/components/CustomDatagrid/CustomDatagrid.tsx new file mode 100644 index 0000000..151e90d --- /dev/null +++ b/src/components/CustomDatagrid/CustomDatagrid.tsx @@ -0,0 +1,309 @@ +"use client"; +import * as React from "react"; +import { Card, CardHeader, CardContent, SxProps, Theme } from "@mui/material"; +import { DataGrid, GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import { darken, lighten, styled } from "@mui/material/styles"; +import { useState } from "react"; + +interface CustomDatagridProps { + Title?: string; + rows: any[]; + columns: any[]; + columnWidth?: number; + Style?: boolean; + sx?: SxProps; + dataGridHeight?: number; + [key: string]: any; + checkboxSelection?: boolean; + onRowSelectionModelChange?: ( + newSelectionModel: GridRowSelectionModel, + ) => void; + selectionModel?: any; +} + +const CustomDatagrid: React.FC = ({ + Title, + rows, + columns, + columnWidth, + Style = false, + sx, + dataGridHeight, + checkboxSelection, // Destructure the new prop + onRowSelectionModelChange, // Destructure the new prop + selectionModel, + ...props +}) => { + const modifiedColumns = columns.map((column) => { + return { + ...column, + width: columnWidth ?? 150, + }; + }); + + const rowsWithDefaultValues = rows.map((row) => { + return { ...row }; + }); + + // Event handler to be called when the selection changes + const handleSelectionModelChange = ( + newSelectionModel: GridRowSelectionModel, + ) => { + // setSelectionModel(newSelectionModel); + // To log selected row data, filter rows based on the new selection model + const selectedRowsData = rows.filter((row) => + newSelectionModel.includes(row.id), + ); + console.log(selectedRowsData); + }; + + const getBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.7) : lighten(color, 0.7); + + const getHoverBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.6) : lighten(color, 0.6); + + const getSelectedBackgroundColor = (color: string, mode: "light" | "dark") => + mode === "dark" ? darken(color, 0.5) : lighten(color, 0.5); + + const getSelectedHoverBackgroundColor = ( + color: string, + mode: "light" | "dark", + ) => (mode === "dark" ? darken(color, 0.4) : lighten(color, 0.4)); + + const StyledDataGrid = styled(DataGrid)(({ theme }) => ({ + "& .super-app-theme--Open": { + backgroundColor: getBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.info.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--finish": { + backgroundColor: getBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.success.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--danger": { + backgroundColor: getBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.warning.main, + theme.palette.mode, + ), + }, + }, + }, + "& .super-app-theme--warning": { + backgroundColor: getBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getHoverBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + }, + "&.Mui-selected": { + backgroundColor: getSelectedBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + "&:hover": { + backgroundColor: getSelectedHoverBackgroundColor( + theme.palette.error.main, + theme.palette.mode, + ), + }, + }, + }, + })); + + return ( +
+ {Title ? ( + + {Title && } + + {Style ? ( + + ) : ( + + )} + + + ) : Style ? ( + + ) : ( + + )} +
+ ); +}; + +export default CustomDatagrid; diff --git a/src/components/CustomDatagrid/index.ts b/src/components/CustomDatagrid/index.ts new file mode 100644 index 0000000..d34e5f0 --- /dev/null +++ b/src/components/CustomDatagrid/index.ts @@ -0,0 +1 @@ +export { default } from "./CustomDatagrid"; diff --git a/src/components/CustomModal/CustomModal.tsx b/src/components/CustomModal/CustomModal.tsx new file mode 100644 index 0000000..1004213 --- /dev/null +++ b/src/components/CustomModal/CustomModal.tsx @@ -0,0 +1,81 @@ +import * as React from "react"; +import { + Card, + CardHeader, + CardContent, + SxProps, + Theme, + Grid, + Modal, + Typography, + Button, +} from "@mui/material"; +import { DataGrid, GridColDef } from "@mui/x-data-grid"; +import { darken, lighten, styled } from "@mui/material/styles"; +import { PROJECT_MODAL_STYLE } from "@/theme/colorConst"; +import { useRef, useEffect, useState } from "react"; +import Swal from "sweetalert2"; +import styledcmp from "styled-components"; + +const CardWrapper = styledcmp.div` + /* Styles for the card when not hovered */ + background-color: #f0f0f0, + padding: 10px, + /* ...other styles... */ + + &:hover { + /* Styles for the card when hovered */ + background-color: #c0c0c0, + /* ...other hover styles... */ + } +`; + +interface CustomModalProps { + title?: string; + isOpen: boolean; + onClose: () => void; + modalStyle?: any; +} + +const CustomModal: React.FC = ({ ...props }) => { + const ModalContent = () => { + return ( + // +
+ + {props.title ?? "Modal Title"} + + + Modal Content + +
+ + +
+
+ //
+ ); + }; + + return ( + + {props.modalStyle ? : } + + ); +}; + +export default CustomModal; diff --git a/src/components/CustomModal/index.ts b/src/components/CustomModal/index.ts new file mode 100644 index 0000000..f13c96c --- /dev/null +++ b/src/components/CustomModal/index.ts @@ -0,0 +1 @@ +export { default } from "./CustomModal"; diff --git a/src/components/CustomSearchForm/CustomSearchForm.tsx b/src/components/CustomSearchForm/CustomSearchForm.tsx new file mode 100644 index 0000000..c005887 --- /dev/null +++ b/src/components/CustomSearchForm/CustomSearchForm.tsx @@ -0,0 +1,379 @@ +"use client"; +import React, { useState, FC } from "react"; +import { + Stack, + Typography, + FormControlLabel, + Checkbox, + Autocomplete, + Button, + Grid, + TextField, + CardHeader, + Card, + FormControl, + InputLabel, + Select, + MenuItem, + ThemeProvider, +} from "@mui/material"; +import { useForm, Controller } from "react-hook-form"; +import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import dayjs from "dayjs"; +import SearchIcon from "@mui/icons-material/Search"; +import RefreshIcon from "@mui/icons-material/Refresh"; +import { DemoItem } from "@mui/x-date-pickers/internals/demo"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; + +interface Field { + id: any; + label: any; + type: string; + options?: Array<{ id: string; label: string }>; + setValue: ((value: any) => void) | Array<(value: any) => void>; + value?: any; + required?: boolean; +} + +interface FormComponentProps { + fields: Field[]; + onSubmit: (data: any) => void; + resetForm: () => void; + sx?: any; +} + +interface SearchFormProps { + applySearch: (data: any) => void; + fields: Field[]; + title?: string; + sx?: any; +} + +const FormComponent: FC = ({ + fields, + onSubmit, + resetForm, + sx, +}) => { + const { reset, register, handleSubmit, control } = useForm(); + const [fromDate, setFromDate] = useState(null); + const [dayRangeFromDate, setDayRangeFromDate] = useState( + null, + ); + const [dayRangeToDate, setDayRangeToDate] = useState( + null, + ); + const [value, setValue] = useState<{ [key: string]: any }>({}); + const [checkbox1, setCheckbox1] = useState(false); + + const handleFormSubmit = (data: any) => { + if (fromDate != null || fromDate != undefined) { + data.fromDate = dayjs(fromDate).format("YYYY-MM-DD"); + } + if (value !== null) { + data.dropdownCombo = value; + } + if (value !== null) { + data.checkbox = checkbox1; + } + if (dayRangeFromDate != null || dayRangeFromDate != undefined) { + data.dayRangeFromDate = dayjs(dayRangeFromDate).format("YYYY-MM-DD"); + } + if (dayRangeToDate != null || dayRangeToDate != undefined) { + data.dayRangeToDate = dayjs(dayRangeToDate).format("YYYY-MM-DD"); + } + onSubmit(data); + }; + + const handleFormReset = () => { + reset(); + resetForm(); + setFromDate(null); + fields.forEach((field) => { + if (typeof field.setValue === "function") { + field.setValue(typeof field.value === "boolean" ? false : null); + } else if (Array.isArray(field.setValue)) { + field.setValue.forEach((setFunc) => { + setFunc(null); + }); + } + }); + }; + + return ( +
+ + {fields.map((field) => { + if (field.type === "dropdown") { + return ( + + + + {field.label} + + ( + + )} + /> + + + ); + } else if (field.type === "date") { + return ( + + + + { + setFromDate(newValue); + }} + /> + + + + ); + } else if (field.type === "checkbox") { + return ( + + { + if (typeof field.setValue === "function") { + field.setValue(event.target.checked); + setCheckbox1(event.target.checked); + } + }} + color="primary" + /> + } + label={ + + {field.label} + + } + /> + + ); + } else if (field.type === "dateRange") { + return ( + + + + + + setDayRangeFromDate(newValue)} + /> + + + + + To + + + + + setDayRangeToDate(newValue)} + /> + + + + + + ); + } + return ( + + + + ); + })} + + + + + + + + + + + +
+ ); +}; + +const CustomSearchForm: FC = ({ + applySearch, + fields, + title, + sx, +}) => { + const Title = title || "Searching Criteria"; + + const handleSubmit = (data: any) => { + if (applySearch) { + applySearch(data); + } else { + console.log("applySearch function is null"); + } + }; + + const handleFormReset = () => { + console.log("Form Reset"); + }; + + return ( + + + + + ); +}; + +export default CustomSearchForm; diff --git a/src/components/CustomSearchForm/index.ts b/src/components/CustomSearchForm/index.ts new file mode 100644 index 0000000..51718f8 --- /dev/null +++ b/src/components/CustomSearchForm/index.ts @@ -0,0 +1 @@ +export { default } from "./CustomSearchForm"; diff --git a/src/components/DashboardPage/DashboardPage.tsx b/src/components/DashboardPage/DashboardPage.tsx new file mode 100644 index 0000000..d3d70c7 --- /dev/null +++ b/src/components/DashboardPage/DashboardPage.tsx @@ -0,0 +1,51 @@ +"use client"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import PageTitle from "../PageTitle/PageTitle"; +import DashboardTabButton from "./DashboardTabButton"; +import { ThemeProvider } from "@mui/material/styles"; +import theme from "../../theme"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; +import React, { useCallback, useState } from "react"; +import { useRouter } from "next/navigation"; +import ProgressByClient from "./ProgressByClient"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; + +const DashboardPage: React.FC = () => { + const [tabIndex, setTabIndex] = useState(0); + const { t } = useTranslation("dashboard"); + const router = useRouter(); + const handleCancel = () => { + router.back(); + }; + const handleTabChange = useCallback>( + (_e, newValue) => { + setTabIndex(newValue); + }, + [], + ); + return ( + + + + + + + + + {tabIndex === 2 && } + {/* + + + + + */} + + ); +}; + +export default DashboardPage; diff --git a/src/components/DashboardPage/DashboardTabButton.tsx b/src/components/DashboardPage/DashboardTabButton.tsx new file mode 100644 index 0000000..1f95098 --- /dev/null +++ b/src/components/DashboardPage/DashboardTabButton.tsx @@ -0,0 +1,77 @@ +"use client"; +import Grid from "@mui/material/Grid"; +import { useState, useCallback } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import PageTitle from "../PageTitle/PageTitle"; +import ProgressByClient from "./ProgressByClient"; +import Tabs, { TabsProps } from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; +import "../../app/global.css"; + +const DashboardTabButton: React.FC = () => { + const [activeTab, setActiveTab] = useState("financialSummary"); + const { t } = useTranslation("dashboard"); + const renderContent = () => { + switch (activeTab) { + case "financialSummary": + return
Project Financial Summary
; + case "cashFlow": + return
Project Cash Flow
; + case "progressByClient": + return ; + case "resourceUtilization": + return
Project Resource Utilization
; + case "staffUtilization": + return
Staff Utilization
; + default: + return
Project Financial Summary
; + } + }; + const [tabIndex, setTabIndex] = useState(0); + const handleTabChange = useCallback>( + (_e, newValue) => { + setTabIndex(newValue); + }, + [], + ); + return ( + // + //
+ // {activeTab !== 'financialSummary' ? + // : + // + // } + // {activeTab !== 'cashFlow' ? + // : + // + // } + // {activeTab !== 'progressByClient' ? + // : + // + // } + // {activeTab !== 'resourceUtilization' ? + // : + // + // } + // {activeTab !== 'staffUtilization' ? + // : + // + // } + //
+ //
+ // {renderContent()} + //
+ //
+ + + + + + + + ); +}; + +export default DashboardTabButton; diff --git a/src/components/DashboardPage/ProgressByClient.tsx b/src/components/DashboardPage/ProgressByClient.tsx new file mode 100644 index 0000000..6475c03 --- /dev/null +++ b/src/components/DashboardPage/ProgressByClient.tsx @@ -0,0 +1,493 @@ +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useState, useEffect, useMemo } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import { Card, CardHeader } from "@mui/material"; +import CustomSearchForm from "../CustomSearchForm/CustomSearchForm"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import ReactApexChart from "react-apexcharts"; +import { ApexOptions } from "apexcharts"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ReportProblemIcon from "@mui/icons-material/ReportProblem"; +import dynamic from "next/dynamic"; +import "../../app/global.css"; +import { AnyARecord } from "dns"; +import SearchBox, { Criterion } from "../SearchBox"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; + +const ProgressByClient: React.FC = () => { + const [activeTab, setActiveTab] = useState("financialSummary"); + const [SearchCriteria, setSearchCriteria] = React.useState({}); + const { t } = useTranslation("dashboard"); + + const [clientCode, setClientCode] = useState(""); + const [clientName, setClientName] = useState(""); + const [subsidiaryClientCode, setSubsidiaryClientCode] = useState(""); + const [subsidiaryClientName, setSubsidiaryClientName] = useState(""); + const [projectArray, setProjectArray]: any[] = useState([]); + const [percentageArray, setPercentageArray]: any[] = useState([]); + const [selectionModel, setSelectionModel]: any[] = React.useState([]); + const [dropdownDemo, setDropdownDemo] = useState(""); + const [dateDemo, setDateDemo] = useState(null); + const [checkboxDemo, setCheckboxDemo] = useState(false); + const [receiptFromDate, setReceiptFromDate] = useState(null); + const [receiptToDate, setReceiptToDate] = useState(null); + const [selectedRows, setSelectedRows] = useState([]); + const rows = [ + { + id: 1, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "N/A", + clientSubsidiaryName: "N/A", + noOfProjects: "5", + }, + { + id: 2, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "SUBS-001", + clientSubsidiaryName: "Subsidiary A", + noOfProjects: "5", + }, + { + id: 3, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "SUBS-002", + clientSubsidiaryName: "Subsidiary B", + noOfProjects: "3", + }, + { + id: 4, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "SUBS-003", + clientSubsidiaryName: "Subsidiary C", + noOfProjects: "1", + }, + ]; + const rows2 = [ + { + id: 1, + project: "Consultancy Project 123", + team: "XXX", + teamLeader: "XXX", + currentStage: "Contract Documentation", + budgetedManhour: "200.00", + spentManhour: "120.00", + remainedManhour: "80.00", + comingPaymentMilestone: "31/03/2024", + alert: false, + }, + { + id: 2, + project: "Consultancy Project 456", + team: "XXX", + teamLeader: "XXX", + currentStage: "Report Preparation", + budgetedManhour: "400.00", + spentManhour: "200.00", + remainedManhour: "200.00", + comingPaymentMilestone: "20/02/2024", + alert: false, + }, + { + id: 3, + project: "Construction Project A", + team: "YYY", + teamLeader: "YYY", + currentStage: "Construction", + budgetedManhour: "187.50", + spentManhour: "200.00", + remainedManhour: "12.50", + comingPaymentMilestone: "13/12/2023", + alert: true, + }, + { + id: 4, + project: "Construction Project B", + team: "XXX", + teamLeader: "XXX", + currentStage: "Post Construction", + budgetedManhour: "100.00", + spentManhour: "40.00", + remainedManhour: "60.00", + comingPaymentMilestone: "05/01/2024", + alert: false, + }, + { + id: 5, + project: "Construction Project C", + team: "YYY", + teamLeader: "YYY", + currentStage: "Construction", + budgetedManhour: "300.00", + spentManhour: "150.00", + remainedManhour: "150.00", + comingPaymentMilestone: "31/03/2024", + alert: false, + }, + ]; + + const columns = [ + { + id: "clientCode", + field: "clientCode", + headerName: "Client Code", + flex: 1, + }, + { + id: "clientName", + field: "clientName", + headerName: "Client Name", + flex: 1, + }, + { + id: "clientSubsidiaryCode", + field: "clientSubsidiaryCode", + headerName: "Client Subsidiary Code", + flex: 1, + }, + { + id: "noOfProjects", + field: "noOfProjects", + headerName: "No. of Projects", + flex: 1, + }, + ]; + + const columns2 = [ + { + id: "project", + field: "project", + headerName: "Project", + flex: 1, + }, + { + id: "team", + field: "team", + headerName: "Team", + flex: 1, + }, + { + id: "teamLeader", + field: "teamLeader", + headerName: "Team Leader", + flex: 1, + }, + { + id: "currentStage", + field: "currentStage", + headerName: "Current Stage", + flex: 1, + }, + { + id: "budgetedManhour", + field: "budgetedManhour", + headerName: "Budgeted Manhour", + flex: 1, + }, + { + id: "spentManhour", + field: "spentManhour", + headerName: "Spent Manhour", + renderCell: (params: any) => { + if (params.row.budgetedManhour - params.row.spentManhour <= 0) { + return ( + {params.row.spentManhour} + ); + } else { + return {params.row.spentManhour}; + } + }, + flex: 1, + }, + { + id: "remainedManhour", + field: "remainedManhour", + headerName: "Remained Manhour", + renderCell: (params: any) => { + if (params.row.budgetedManhour - params.row.spentManhour <= 0) { + return ( + ({params.row.remainedManhour}) + ); + } else { + return {params.row.remainedManhour}; + } + }, + flex: 1, + }, + { + id: "comingPaymentMilestone", + field: "comingPaymentMilestone", + headerName: "Coming Payment Milestone", + flex: 1, + }, + { + id: "alert", + field: "alert", + headerName: "Alert", + renderCell: (params: any) => { + if (params.row.alert === true) { + return ( + + + + ); + } else { + return ; + } + }, + flex: 1, + }, + ]; + + const InputFields = [ + { + id: "clientCode", + label: "Client Code", + type: "text", + value: clientCode, + setValue: setClientCode, + }, + { + id: "clientName", + label: "Client Name", + type: "text", + value: clientName, + setValue: setClientName, + }, + { + id: "subsidiaryClientCode", + label: "Subsidiary Client Code", + type: "text", + value: subsidiaryClientCode, + setValue: setSubsidiaryClientCode, + }, + { + id: "subsidiaryClientName", + label: "Subsidiary Client Name", + type: "text", + value: subsidiaryClientName, + setValue: setSubsidiaryClientName, + }, + // { id: 'dropdownDemo', label: "dropdownDemo", type: 'dropdown', options: [{id:"1", label:"1"}], value: dropdownDemo, setValue: setDropdownDemo }, + // { id: 'dateDemo', label:'dateDemo', type: 'date', value: dateDemo, setValue: setDateDemo }, + // { id: 'checkboxDemo', label:'checkboxDemo', type: 'checkbox', value: checkboxDemo, setValue: setCheckboxDemo }, + // { id: ['receiptFromDate','receiptToDate'], label: ["收貨日期","收貨日期"], value: [receiptFromDate ? receiptFromDate : null, receiptToDate ? receiptToDate : null], + // setValue: [setReceiptFromDate, setReceiptToDate],type: 'dateRange' }, + ]; + + const stageDeadline = [ + "31/03/2024", + "20/02/2024", + "01/12/2023", + "05/01/2024", + "31/03/2023", + ]; + + const series2: ApexAxisChartSeries | ApexNonAxisChartSeries = [ + { + data: [17.1, 28.6, 5.7, 48.6], + }, + ]; + + const series: ApexAxisChartSeries | ApexNonAxisChartSeries = [ + { + name: "Current Stage Completion Percentage", + data: [80, 55, 40, 65, 70], + }, + ]; + + const options2: ApexOptions = { + chart: { + type: "donut", + }, + plotOptions: { + pie: { + donut: { + labels: { + show: false, + }, + }, + }, + }, + labels: [projectArray], + legend: { + show: false, + }, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 200, + }, + legend: { + position: "bottom", + show: false, + }, + }, + }, + ], + }; + + const options: ApexOptions = { + chart: { + type: "bar", + height: 350, + }, + colors: ["#FF4560", "#00E396", "#008FFB", "#775DD0", "#FEB019"], + plotOptions: { + bar: { + horizontal: true, + distributed: true, + }, + }, + dataLabels: { + enabled: false, + }, + xaxis: { + categories: [ + "Consultancy Project 123", + "Consultancy Project 456", + "Construction Project A", + "Construction Project B", + "Construction Project C", + ], + }, + yaxis: { + title: { + text: "Projects", + }, + labels: { + maxWidth: 200, + style: { + cssClass: "apexcharts-yaxis-label", + }, + }, + }, + title: { + text: "Current Stage Completion Percentage", + align: "center", + }, + grid: { + borderColor: "#f1f1f1", + }, + annotations: {}, + }; + + const handleSelectionChange = (newSelectionModel: GridRowSelectionModel) => { + const selectedRowsData = rows2.filter((row) => + newSelectionModel.includes(row.id), + ); + console.log(selectedRowsData); + const projectArray: any[] = []; + let otherPercentage = 100; + let totalBudgetManhour = 0; + const percentageArray = []; + for (let i = 0; i <= selectedRowsData.length; i++) { + if (i === selectedRowsData.length) { + projectArray.push("Other"); + } else { + projectArray.push(selectedRowsData[i].project); + totalBudgetManhour += Number(selectedRowsData[i].budgetedManhour); + } + } + for (let i = 0; i <= selectedRowsData.length; i++) { + if (i === selectedRowsData.length) { + percentageArray.push(otherPercentage); + } else { + const percentage = ( + (Number(selectedRowsData[i].spentManhour) / totalBudgetManhour) * + 100 + ).toFixed(1); + percentageArray.push(Number(percentage)); + otherPercentage -= Number(percentage); + } + } + setSelectionModel(newSelectionModel); + setProjectArray(projectArray); + setPercentageArray(percentageArray); + }; + + const applySearch = (data: any) => { + console.log(data); + setSearchCriteria(data); + }; + return ( + + {/* */} + {/* */} +
+ + + +
+ +
+ {/*
+

Stage Deadline

+ {stageDeadline.map((date, index) => { + const marginTop = index === 0 ? 25 : 20; + return ( +

{date}

+ ); + })} +
*/} + +
+ +
+
+
+
+
+ + + + + + +
+
+ ); +}; + +export default ProgressByClient; diff --git a/src/components/DashboardPage/index.ts b/src/components/DashboardPage/index.ts new file mode 100644 index 0000000..4b5c5d1 --- /dev/null +++ b/src/components/DashboardPage/index.ts @@ -0,0 +1 @@ +export { default } from "./DashboardPage"; diff --git a/src/components/EnterLeave/EnterLeaveModal.tsx b/src/components/EnterLeave/EnterLeaveModal.tsx new file mode 100644 index 0000000..a42322c --- /dev/null +++ b/src/components/EnterLeave/EnterLeaveModal.tsx @@ -0,0 +1,125 @@ +"use client"; + +// import { testing } from "@/app/api/timesheets"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { useState } from "react"; +import { useTranslation } from "react-i18next"; +import AssignedProjectGrid from "../AssignedProjectGrid/AssignedProjectGrid"; +import PageTitle from "../PageTitle/PageTitle"; +import { Suspense } from "react"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import { Add } from "@mui/icons-material"; +import Link from "next/link"; +import { t } from "i18next"; +import { Card, Modal, Typography } from "@mui/material"; +import CustomModal from "../CustomModal/CustomModal"; +import { PROJECT_MODAL_STYLE } from "@/theme/colorConst"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import { DataGrid } from "@mui/x-data-grid"; +import TimesheetInputGrid from "./LeaveInputGrid"; +import { BASE_API_URL } from "@/config/api"; + +// import { fetchLeaves } from "@/app/api/leave"; + +interface EnterTimesheetModalProps { + isOpen: boolean; + onClose: () => void; + modalStyle?: any; +} + +const EnterTimesheetModal: React.FC = ({ + ...props +}) => { + const [lockConfirm, setLockConfirm] = useState(false); + const columns = [ + { + id: "projectCode", + field: "projectCode", + headerName: "Project Code and Name", + flex: 1, + }, + { + id: "task", + field: "task", + headerName: "Task", + flex: 1, + }, + ]; + + const rows = [ + { + id: 1, + projectCode: "M1001", + task: "1.2", + }, + { + id: 2, + projectCode: "M1301", + task: "1.1", + }, + ]; + + const fetchTimesheet = async () => { + // fetchLeaves(); + // const res = await fetch(`http://localhost:8090/api/timesheets`, { + // // const res = await fetch(`${BASE_API_URL}/timesheets`, { + // method: "GET", + // mode: 'no-cors', + // }); + + // console.log(res.json); + }; + + return ( + +
+ {/* +
+ Record Leave +
+
*/} + + + +
+ + +
+
+
+
+ ); +}; + +export default EnterTimesheetModal; diff --git a/src/components/EnterLeave/LeaveInputGrid.tsx b/src/components/EnterLeave/LeaveInputGrid.tsx new file mode 100644 index 0000000..03eeaab --- /dev/null +++ b/src/components/EnterLeave/LeaveInputGrid.tsx @@ -0,0 +1,548 @@ +"use client"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { useState, useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import PageTitle from "../PageTitle/PageTitle"; +import { Suspense } from "react"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Link from "next/link"; +import { t } from "i18next"; +import { + Box, + Container, + Modal, + Select, + SelectChangeEvent, + Typography, +} from "@mui/material"; +import { Close } from "@mui/icons-material"; +import AddIcon from "@mui/icons-material/Add"; +import EditIcon from "@mui/icons-material/Edit"; +import DeleteIcon from "@mui/icons-material/DeleteOutlined"; +import SaveIcon from "@mui/icons-material/Save"; +import CancelIcon from "@mui/icons-material/Close"; +import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; +import ArrowBackIcon from "@mui/icons-material/ArrowBack"; +import Swal from "sweetalert2"; +import { msg } from "../Swal/CustomAlerts"; +import React from "react"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { + GridRowsProp, + GridRowModesModel, + GridRowModes, + DataGrid, + GridColDef, + GridToolbarContainer, + GridFooterContainer, + GridActionsCellItem, + GridEventListener, + GridRowId, + GridRowModel, + GridRowEditStopReasons, + GridEditInputCell, + GridValueSetterParams, +} from "@mui/x-data-grid"; +import { LocalizationProvider } from "@mui/x-date-pickers"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import dayjs from "dayjs"; +import { Props } from "react-intl/src/components/relative"; + +const weekdays = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]; + +interface BottomBarProps { + getHoursTotal: (column: string) => number; + setLockConfirm: (newLock: (oldLock: boolean) => boolean) => void; + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +interface EditToolbarProps { + // setDay: (newDay : dayjs.Dayjs) => void; + setDay: (newDay: (oldDay: dayjs.Dayjs) => dayjs.Dayjs) => void; + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +interface EditFooterProps { + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +const EditToolbar = (props: EditToolbarProps) => { + const { setDay } = props; + const [selectedDate, setSelectedDate] = useState(dayjs()); + + const handleClickLeft = () => { + if (selectedDate) { + const newDate = selectedDate.add(-7, "day"); + setSelectedDate(newDate); + } + }; + const handleClickRight = () => { + if (selectedDate) { + const newDate = + selectedDate.add(7, "day") > dayjs() + ? dayjs() + : selectedDate.add(7, "day"); + setSelectedDate(newDate); + } + }; + + const handleDateChange = (date: dayjs.Dayjs | Date | null) => { + const newDate = dayjs(date); + setSelectedDate(newDate); + }; + + useEffect(() => { + setDay((oldDay) => selectedDate); + }, [selectedDate]); + + return ( + +
+ + Record Leave + + + + +
+
+ ); +}; + +const BottomBar = (props: BottomBarProps) => { + const { setRows, setRowModesModel, getHoursTotal, setLockConfirm } = props; + // const getHoursTotal = props.getHoursTotal; + const [newId, setNewId] = useState(-1); + const [invalidDays, setInvalidDays] = useState(0); + + const handleAddClick = () => { + const id = newId; + setNewId(newId - 1); + setRows((oldRows) => [ + ...oldRows, + { id, projectCode: "", task: "", isNew: true }, + ]); + setRowModesModel((oldModel) => ({ + ...oldModel, + [id]: { mode: GridRowModes.Edit, fieldToFocus: "projectCode" }, + })); + }; + + const totalColDef = { + flex: 1, + // style: {color:getHoursTotal('mon')>24?"red":"black"} + }; + + const TotalCell = ({ value }: Props) => { + const [invalid, setInvalid] = useState(false); + + useEffect(() => { + const newInvalid = (value ?? 0) > 24; + setInvalid(newInvalid); + }, [value]); + + return ( + + {value} + + ); + }; + + const checkUnlockConfirmBtn = () => { + // setLockConfirm((oldLock)=> valid); + setLockConfirm((oldLock) => + weekdays.every((weekday) => { + getHoursTotal(weekday) <= 24; + }), + ); + }; + + return ( +
+
+ + Total: + + + + + + + + +
+ +
+ ); +}; + +const EditFooter = (props: EditFooterProps) => { + return ( +
+ + Total: + + ssss +
+ ); +}; + +interface TimesheetInputGridProps { + setLockConfirm: (newLock: (oldLock: boolean) => boolean) => void; + onClose?: () => void; +} + +const initialRows: GridRowsProp = [ + { + id: 1, + projectCode: "M1001", + task: "1.2", + mon: 2.5, + }, + { + id: 2, + projectCode: "M1002", + task: "1.3", + mon: 3.25, + }, +]; + +const options = ["M1001", "M1301", "M1354", "M1973"]; +const options2 = [ + "1.1 - Preparation of preliminary Cost Estimate / Cost Plan", + "1.2 - Cash flow forecast", + "1.3 - Cost studies fo alterative design solutions", + "1.4 = Attend design co-ordination / project review meetings", + "1.5 - Prepare / Review RIC", +]; + +const getDateForHeader = (date: dayjs.Dayjs, weekday: number) => { + if (date.day() == 0) { + return date.add(weekday - date.day() - 7, "day").format("DD MMM"); + } else { + return date.add(weekday - date.day(), "day").format("DD MMM"); + } +}; + +const TimesheetInputGrid: React.FC = ({ + ...props +}) => { + const [rows, setRows] = useState(initialRows); + const [day, setDay] = useState(dayjs()); + const [rowModesModel, setRowModesModel] = React.useState( + {}, + ); + const { setLockConfirm } = props; + + const handleRowEditStop: GridEventListener<"rowEditStop"> = ( + params, + event, + ) => { + if (params.reason === GridRowEditStopReasons.rowFocusOut) { + event.defaultMuiPrevented = true; + } + }; + + const handleEditClick = (id: GridRowId) => () => { + setRowModesModel({ ...rowModesModel, [id]: { mode: GridRowModes.Edit } }); + }; + + const handleSaveClick = (id: GridRowId) => () => { + setRowModesModel({ ...rowModesModel, [id]: { mode: GridRowModes.View } }); + }; + + const handleDeleteClick = (id: GridRowId) => () => { + setRows(rows.filter((row) => row.id !== id)); + }; + + const handleCancelClick = (id: GridRowId) => () => { + setRowModesModel({ + ...rowModesModel, + [id]: { mode: GridRowModes.View, ignoreModifications: true }, + }); + + const editedRow = rows.find((row) => row.id === id); + if (editedRow!.isNew) { + setRows(rows.filter((row) => row.id !== id)); + } + }; + + const processRowUpdate = (newRow: GridRowModel) => { + const updatedRow = { ...newRow, isNew: false }; + setRows(rows.map((row) => (row.id === newRow.id ? updatedRow : row))); + return updatedRow; + }; + + const handleRowModesModelChange = (newRowModesModel: GridRowModesModel) => { + setRowModesModel(newRowModesModel); + }; + + const getHoursTotal = (column: any) => { + let sum = 0; + rows.forEach((row) => { + sum += row[column] ?? 0; + }); + return sum; + }; + + const weekdayColConfig: any = { + type: "number", + // sortable: false, + //width: 100, + flex: 1, + align: "left", + headerAlign: "left", + editable: true, + renderEditCell: (value: any) => ( + + ), + }; + + const columns: GridColDef[] = [ + { + field: "actions", + type: "actions", + headerName: "Actions", + width: 100, + cellClassName: "actions", + getActions: ({ id }) => { + const isInEditMode = rowModesModel[id]?.mode === GridRowModes.Edit; + + if (isInEditMode) { + return [ + } + title="Save" + label="Save" + sx={{ + color: "primary.main", + }} + onClick={handleSaveClick(id)} + />, + } + title="Cancel" + label="Cancel" + className="textPrimary" + onClick={handleCancelClick(id)} + color="inherit" + />, + ]; + } + + return [ + } + title="Edit" + label="Edit" + className="textPrimary" + onClick={handleEditClick(id)} + color="inherit" + />, + } + onClick={handleDeleteClick(id)} + sx={{ color: "red" }} + />, + ]; + }, + }, + { + field: "projectCode", + headerName: "Project Code", + // width: 220, + flex: 2, + editable: true, + type: "singleSelect", + valueOptions: options, + }, + { + field: "task", + headerName: "Task", + // width: 220, + flex: 3, + editable: true, + type: "singleSelect", + valueOptions: options2, + }, + { + // Mon + field: "mon", + ...weekdayColConfig, + renderHeader: () => { + return
Mon - {getDateForHeader(day, 1)}
; + }, + }, + { + // Tue + field: "tue", + ...weekdayColConfig, + renderHeader: () => { + return
Tue - {getDateForHeader(day, 2)}
; + }, + }, + { + // Wed + field: "wed", + ...weekdayColConfig, + renderHeader: () => { + return
Wed - {getDateForHeader(day, 3)}
; + }, + }, + { + // Thu + field: "thu", + ...weekdayColConfig, + renderHeader: () => { + return
Thu - {getDateForHeader(day, 4)}
; + }, + }, + { + // Fri + field: "fri", + ...weekdayColConfig, + renderHeader: () => { + return
Fri - {getDateForHeader(day, 5)}
; + }, + }, + { + // Sat + field: "sat", + ...weekdayColConfig, + renderHeader: () => { + return
Sat - {getDateForHeader(day, 6)}
; + }, + }, + { + // Sun + field: "sun", + ...weekdayColConfig, + renderHeader: () => { + return ( +
Sun - {getDateForHeader(day, 7)}
+ ); + }, + }, + // { + // field: 'joinDate', + // headerName: 'Join date', + // type: 'date', + // width: 180, + // editable: true, + // }, + ]; + + return ( + + + + + + ); +}; + +export default TimesheetInputGrid; diff --git a/src/components/EnterLeave/index.ts b/src/components/EnterLeave/index.ts new file mode 100644 index 0000000..33541f2 --- /dev/null +++ b/src/components/EnterLeave/index.ts @@ -0,0 +1 @@ +export { default } from "./EnterLeaveModal"; diff --git a/src/components/EnterTimesheet/EnterTimesheetModal.tsx b/src/components/EnterTimesheet/EnterTimesheetModal.tsx new file mode 100644 index 0000000..c63a905 --- /dev/null +++ b/src/components/EnterTimesheet/EnterTimesheetModal.tsx @@ -0,0 +1,125 @@ +"use client"; + +// import { testing } from "@/app/api/timesheets"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { useState } from "react"; +import { useTranslation } from "react-i18next"; +import AssignedProjectGrid from "../AssignedProjectGrid/AssignedProjectGrid"; +import PageTitle from "../PageTitle/PageTitle"; +import { Suspense } from "react"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import { Add } from "@mui/icons-material"; +import Link from "next/link"; +import { t } from "i18next"; +import { Card, Modal, Typography } from "@mui/material"; +import CustomModal from "../CustomModal/CustomModal"; +import { PROJECT_MODAL_STYLE } from "@/theme/colorConst"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import { DataGrid } from "@mui/x-data-grid"; +import TimesheetInputGrid from "./TimesheetInputGrid"; +import { BASE_API_URL } from "@/config/api"; + +// import { fetchTimesheets } from "@/app/api/timesheets"; + +interface EnterTimesheetModalProps { + isOpen: boolean; + onClose: () => void; + modalStyle?: any; +} + +const EnterTimesheetModal: React.FC = ({ + ...props +}) => { + const [lockConfirm, setLockConfirm] = useState(false); + const columns = [ + { + id: "projectCode", + field: "projectCode", + headerName: "Project Code and Name", + flex: 1, + }, + { + id: "task", + field: "task", + headerName: "Task", + flex: 1, + }, + ]; + + const rows = [ + { + id: 1, + projectCode: "M1001", + task: "1.2", + }, + { + id: 2, + projectCode: "M1301", + task: "1.1", + }, + ]; + + const fetchTimesheet = async () => { + // fetchTimesheets(); + // const res = await fetch(`http://localhost:8090/api/timesheets`, { + // // const res = await fetch(`${BASE_API_URL}/timesheets`, { + // method: "GET", + // mode: 'no-cors', + // }); + + // console.log(res.json); + }; + + return ( + +
+ {/* +
+ Timesheet Input +
+
*/} + + + +
+ + +
+
+
+
+ ); +}; + +export default EnterTimesheetModal; diff --git a/src/components/EnterTimesheet/TimesheetInputGrid.tsx b/src/components/EnterTimesheet/TimesheetInputGrid.tsx new file mode 100644 index 0000000..bc64c50 --- /dev/null +++ b/src/components/EnterTimesheet/TimesheetInputGrid.tsx @@ -0,0 +1,548 @@ +"use client"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { useState, useEffect } from "react"; +import { useTranslation } from "react-i18next"; +import PageTitle from "../PageTitle/PageTitle"; +import { Suspense } from "react"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import Link from "next/link"; +import { t } from "i18next"; +import { + Box, + Container, + Modal, + Select, + SelectChangeEvent, + Typography, +} from "@mui/material"; +import { Close } from "@mui/icons-material"; +import AddIcon from "@mui/icons-material/Add"; +import EditIcon from "@mui/icons-material/Edit"; +import DeleteIcon from "@mui/icons-material/DeleteOutlined"; +import SaveIcon from "@mui/icons-material/Save"; +import CancelIcon from "@mui/icons-material/Close"; +import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; +import ArrowBackIcon from "@mui/icons-material/ArrowBack"; +import Swal from "sweetalert2"; +import { msg } from "../Swal/CustomAlerts"; +import React from "react"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { + GridRowsProp, + GridRowModesModel, + GridRowModes, + DataGrid, + GridColDef, + GridToolbarContainer, + GridFooterContainer, + GridActionsCellItem, + GridEventListener, + GridRowId, + GridRowModel, + GridRowEditStopReasons, + GridEditInputCell, + GridValueSetterParams, +} from "@mui/x-data-grid"; +import { LocalizationProvider } from "@mui/x-date-pickers"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import dayjs from "dayjs"; +import { Props } from "react-intl/src/components/relative"; + +const weekdays = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]; + +interface BottomBarProps { + getHoursTotal: (column: string) => number; + setLockConfirm: (newLock: (oldLock: boolean) => boolean) => void; + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +interface EditToolbarProps { + // setDay: (newDay : dayjs.Dayjs) => void; + setDay: (newDay: (oldDay: dayjs.Dayjs) => dayjs.Dayjs) => void; + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +interface EditFooterProps { + setRows: (newRows: (oldRows: GridRowsProp) => GridRowsProp) => void; + setRowModesModel: ( + newModel: (oldModel: GridRowModesModel) => GridRowModesModel, + ) => void; +} + +const EditToolbar = (props: EditToolbarProps) => { + const { setDay } = props; + const [selectedDate, setSelectedDate] = useState(dayjs()); + + const handleClickLeft = () => { + if (selectedDate) { + const newDate = selectedDate.add(-7, "day"); + setSelectedDate(newDate); + } + }; + const handleClickRight = () => { + if (selectedDate) { + const newDate = + selectedDate.add(7, "day") > dayjs() + ? dayjs() + : selectedDate.add(7, "day"); + setSelectedDate(newDate); + } + }; + + const handleDateChange = (date: dayjs.Dayjs | Date | null) => { + const newDate = dayjs(date); + setSelectedDate(newDate); + }; + + useEffect(() => { + setDay((oldDay) => selectedDate); + }, [selectedDate]); + + return ( + +
+ + Timesheet Input + + + + +
+
+ ); +}; + +const BottomBar = (props: BottomBarProps) => { + const { setRows, setRowModesModel, getHoursTotal, setLockConfirm } = props; + // const getHoursTotal = props.getHoursTotal; + const [newId, setNewId] = useState(-1); + const [invalidDays, setInvalidDays] = useState(0); + + const handleAddClick = () => { + const id = newId; + setNewId(newId - 1); + setRows((oldRows) => [ + ...oldRows, + { id, projectCode: "", task: "", isNew: true }, + ]); + setRowModesModel((oldModel) => ({ + ...oldModel, + [id]: { mode: GridRowModes.Edit, fieldToFocus: "projectCode" }, + })); + }; + + const totalColDef = { + flex: 1, + // style: {color:getHoursTotal('mon')>24?"red":"black"} + }; + + const TotalCell = ({ value }: Props) => { + const [invalid, setInvalid] = useState(false); + + useEffect(() => { + const newInvalid = (value ?? 0) > 24; + setInvalid(newInvalid); + }, [value]); + + return ( + + {value} + + ); + }; + + const checkUnlockConfirmBtn = () => { + // setLockConfirm((oldLock)=> valid); + setLockConfirm((oldLock) => + weekdays.every((weekday) => { + getHoursTotal(weekday) <= 24; + }), + ); + }; + + return ( +
+
+ + Total: + + + + + + + + +
+ +
+ ); +}; + +const EditFooter = (props: EditFooterProps) => { + return ( +
+ + Total: + + ssss +
+ ); +}; + +interface TimesheetInputGridProps { + setLockConfirm: (newLock: (oldLock: boolean) => boolean) => void; + onClose?: () => void; +} + +const initialRows: GridRowsProp = [ + { + id: 1, + projectCode: "M1001", + task: "1.2", + mon: 2.5, + }, + { + id: 2, + projectCode: "M1002", + task: "1.3", + mon: 3.25, + }, +]; + +const options = ["M1001", "M1301", "M1354", "M1973"]; +const options2 = [ + "1.1 - Preparation of preliminary Cost Estimate / Cost Plan", + "1.2 - Cash flow forecast", + "1.3 - Cost studies fo alterative design solutions", + "1.4 = Attend design co-ordination / project review meetings", + "1.5 - Prepare / Review RIC", +]; + +const getDateForHeader = (date: dayjs.Dayjs, weekday: number) => { + if (date.day() == 0) { + return date.add(weekday - date.day() - 7, "day").format("DD MMM"); + } else { + return date.add(weekday - date.day(), "day").format("DD MMM"); + } +}; + +const TimesheetInputGrid: React.FC = ({ + ...props +}) => { + const [rows, setRows] = useState(initialRows); + const [day, setDay] = useState(dayjs()); + const [rowModesModel, setRowModesModel] = React.useState( + {}, + ); + const { setLockConfirm } = props; + + const handleRowEditStop: GridEventListener<"rowEditStop"> = ( + params, + event, + ) => { + if (params.reason === GridRowEditStopReasons.rowFocusOut) { + event.defaultMuiPrevented = true; + } + }; + + const handleEditClick = (id: GridRowId) => () => { + setRowModesModel({ ...rowModesModel, [id]: { mode: GridRowModes.Edit } }); + }; + + const handleSaveClick = (id: GridRowId) => () => { + setRowModesModel({ ...rowModesModel, [id]: { mode: GridRowModes.View } }); + }; + + const handleDeleteClick = (id: GridRowId) => () => { + setRows(rows.filter((row) => row.id !== id)); + }; + + const handleCancelClick = (id: GridRowId) => () => { + setRowModesModel({ + ...rowModesModel, + [id]: { mode: GridRowModes.View, ignoreModifications: true }, + }); + + const editedRow = rows.find((row) => row.id === id); + if (editedRow!.isNew) { + setRows(rows.filter((row) => row.id !== id)); + } + }; + + const processRowUpdate = (newRow: GridRowModel) => { + const updatedRow = { ...newRow, isNew: false }; + setRows(rows.map((row) => (row.id === newRow.id ? updatedRow : row))); + return updatedRow; + }; + + const handleRowModesModelChange = (newRowModesModel: GridRowModesModel) => { + setRowModesModel(newRowModesModel); + }; + + const getHoursTotal = (column: any) => { + let sum = 0; + rows.forEach((row) => { + sum += row[column] ?? 0; + }); + return sum; + }; + + const weekdayColConfig: any = { + type: "number", + // sortable: false, + //width: 100, + flex: 1, + align: "left", + headerAlign: "left", + editable: true, + renderEditCell: (value: any) => ( + + ), + }; + + const columns: GridColDef[] = [ + { + field: "actions", + type: "actions", + headerName: "Actions", + width: 100, + cellClassName: "actions", + getActions: ({ id }) => { + const isInEditMode = rowModesModel[id]?.mode === GridRowModes.Edit; + + if (isInEditMode) { + return [ + } + title="Save" + label="Save" + sx={{ + color: "primary.main", + }} + onClick={handleSaveClick(id)} + />, + } + title="Cancel" + label="Cancel" + className="textPrimary" + onClick={handleCancelClick(id)} + color="inherit" + />, + ]; + } + + return [ + } + title="Edit" + label="Edit" + className="textPrimary" + onClick={handleEditClick(id)} + color="inherit" + />, + } + onClick={handleDeleteClick(id)} + sx={{ color: "red" }} + />, + ]; + }, + }, + { + field: "projectCode", + headerName: "Project Code", + // width: 220, + flex: 2, + editable: true, + type: "singleSelect", + valueOptions: options, + }, + { + field: "task", + headerName: "Task", + // width: 220, + flex: 3, + editable: true, + type: "singleSelect", + valueOptions: options2, + }, + { + // Mon + field: "mon", + ...weekdayColConfig, + renderHeader: () => { + return
Mon - {getDateForHeader(day, 1)}
; + }, + }, + { + // Tue + field: "tue", + ...weekdayColConfig, + renderHeader: () => { + return
Tue - {getDateForHeader(day, 2)}
; + }, + }, + { + // Wed + field: "wed", + ...weekdayColConfig, + renderHeader: () => { + return
Wed - {getDateForHeader(day, 3)}
; + }, + }, + { + // Thu + field: "thu", + ...weekdayColConfig, + renderHeader: () => { + return
Thu - {getDateForHeader(day, 4)}
; + }, + }, + { + // Fri + field: "fri", + ...weekdayColConfig, + renderHeader: () => { + return
Fri - {getDateForHeader(day, 5)}
; + }, + }, + { + // Sat + field: "sat", + ...weekdayColConfig, + renderHeader: () => { + return
Sat - {getDateForHeader(day, 6)}
; + }, + }, + { + // Sun + field: "sun", + ...weekdayColConfig, + renderHeader: () => { + return ( +
Sun - {getDateForHeader(day, 7)}
+ ); + }, + }, + // { + // field: 'joinDate', + // headerName: 'Join date', + // type: 'date', + // width: 180, + // editable: true, + // }, + ]; + + return ( + + + + + + ); +}; + +export default TimesheetInputGrid; diff --git a/src/components/EnterTimesheet/index.ts b/src/components/EnterTimesheet/index.ts new file mode 100644 index 0000000..e070291 --- /dev/null +++ b/src/components/EnterTimesheet/index.ts @@ -0,0 +1 @@ +export { default } from "./EnterTimesheetModal"; diff --git a/src/components/LoginPage/LoginForm.tsx b/src/components/LoginPage/LoginForm.tsx new file mode 100644 index 0000000..38b1bab --- /dev/null +++ b/src/components/LoginPage/LoginForm.tsx @@ -0,0 +1,100 @@ +"use client"; + +import { FormHelperText } from "@mui/material"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import { TFunction } from "i18next"; +import { signIn } from "next-auth/react"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { SubmitHandler, useForm } from "react-hook-form"; +import { useTranslation } from "react-i18next"; + +type LoginFields = { + username: string; + password: string; +}; + +// Error codes in https://next-auth.js.org/configuration/pages#sign-in-page +const getHumanFriendlyErrorMessage = ( + t: TFunction, + serverError: string, +): string => { + switch (serverError) { + case "CredentialsSignin": + return t("Invalid username or password."); + case "Default": + default: + return t("Something went wrong. Please try again later."); + } +}; + +const LoginForm: React.FC = () => { + const { t } = useTranslation("login"); + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = useForm(); + + const [serverError, setServerError] = useState(); + + const router = useRouter(); + + const onSubmit: SubmitHandler = async (data) => { + const res = await signIn("credentials", { + redirect: false, + ...data, + }); + + if (res?.error) { + setServerError(res.error); + return; + } + const callbackUrl = + new URLSearchParams(window.location.search).get("callbackUrl") || "/"; + + router.push(callbackUrl); + }; + + return ( + + {t("Sign In")} + + + {serverError && ( + + {getHumanFriendlyErrorMessage(t, serverError)} + + )} + + + ); +}; + +export default LoginForm; diff --git a/src/components/LoginPage/LoginPage.tsx b/src/components/LoginPage/LoginPage.tsx new file mode 100644 index 0000000..eb65647 --- /dev/null +++ b/src/components/LoginPage/LoginPage.tsx @@ -0,0 +1,24 @@ +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import LoginForm from "./LoginForm"; +import Logo from "../Logo"; +import { Box } from "@mui/material"; + +const LoginPage = () => { + return ( + + + + + + + + + + + + + ); +}; + +export default LoginPage; diff --git a/src/components/LoginPage/index.ts b/src/components/LoginPage/index.ts new file mode 100644 index 0000000..f815230 --- /dev/null +++ b/src/components/LoginPage/index.ts @@ -0,0 +1 @@ +export { default } from "./LoginPage"; diff --git a/src/components/Logo/Logo.tsx b/src/components/Logo/Logo.tsx new file mode 100644 index 0000000..6005307 --- /dev/null +++ b/src/components/Logo/Logo.tsx @@ -0,0 +1,44 @@ +interface Props { + width?: number; + height?: number; +} + +const Logo: React.FC = ({ width, height }) => { + return ( + + + + + + + + + + + + + ); +}; + +export default Logo; diff --git a/src/components/Logo/index.ts b/src/components/Logo/index.ts new file mode 100644 index 0000000..f252704 --- /dev/null +++ b/src/components/Logo/index.ts @@ -0,0 +1 @@ +export { default } from "./Logo"; diff --git a/src/components/LogoutPage/LogoutPage.tsx b/src/components/LogoutPage/LogoutPage.tsx new file mode 100644 index 0000000..7cc220d --- /dev/null +++ b/src/components/LogoutPage/LogoutPage.tsx @@ -0,0 +1,17 @@ +"use client"; + +import { signOut } from "next-auth/react"; +import { useSearchParams } from "next/navigation"; +import { useEffect } from "react"; + +const LogoutPage = () => { + const params = useSearchParams(); + const callbackUrl = params.get("callbackUrl"); + useEffect(() => { + signOut({ redirect: true, callbackUrl: callbackUrl || "/" }); + }); + + return null; +}; + +export default LogoutPage; diff --git a/src/components/LogoutPage/index.ts b/src/components/LogoutPage/index.ts new file mode 100644 index 0000000..8efcfe6 --- /dev/null +++ b/src/components/LogoutPage/index.ts @@ -0,0 +1 @@ +export { default } from "./LogoutPage"; diff --git a/src/components/NavigationContent/NavigationContent.tsx b/src/components/NavigationContent/NavigationContent.tsx new file mode 100644 index 0000000..1c5b640 --- /dev/null +++ b/src/components/NavigationContent/NavigationContent.tsx @@ -0,0 +1,162 @@ +import Divider from "@mui/material/Divider"; +import Box from "@mui/material/Box"; +import React from "react"; +import List from "@mui/material/List"; +import ListItemButton from "@mui/material/ListItemButton"; +import ListItemText from "@mui/material/ListItemText"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import WorkHistory from "@mui/icons-material/WorkHistory"; +import Dashboard from "@mui/icons-material/Dashboard"; +import SummarizeIcon from "@mui/icons-material/Summarize"; +import PaymentsIcon from "@mui/icons-material/Payments"; +import AccountTreeIcon from "@mui/icons-material/AccountTree"; +import RequestQuote from "@mui/icons-material/RequestQuote"; +import PeopleIcon from "@mui/icons-material/People"; +import Task from "@mui/icons-material/Task"; +import Assignment from "@mui/icons-material/Assignment"; +import Settings from "@mui/icons-material/Settings"; +import Analytics from "@mui/icons-material/Analytics"; +import Payments from "@mui/icons-material/Payments"; +import { useTranslation } from "react-i18next"; +import Typography from "@mui/material/Typography"; +import { usePathname } from "next/navigation"; +import Link from "next/link"; +import { NAVIGATION_CONTENT_WIDTH } from "@/config/uiConfig"; +import Logo from "../Logo"; + +interface NavigationItem { + icon: React.ReactNode; + label: string; + path: string; + children?: NavigationItem[]; +} + +const navigationItems: NavigationItem[] = [ + { icon: , label: "User Workspace", path: "/home" }, + { + icon: , + label: "Dashboard", + path: "", + children: [ + { + icon: , + label: "Project Financial Summary", + path: "/dashboard/ProjectFinancialSummary", + }, + { + icon: , + label: "Company / Team Cash Flow", + path: "/dashboard/CompanyTeamCashFlow", + }, + { + icon: , + label: "Project Cash Flow", + path: "/dashboard/ProjectCashFlow", + }, + { + icon: , + label: "Project Status by Client", + path: "/dashboard/ProjectStatusByClient", + }, + { + icon: , + label: "Staff Utilization", + path: "/dashboard/StaffUtilization", + }, + ], + }, + { + icon: , + label: "Staff Reimbursement", + path: "/staffReimbursement", + children: [ + { + icon: , + label: "ClaimApproval", + path: "/staffReimbursement/ClaimApproval", + }, + { + icon: , + label: "ClaimSummary", + path: "/staffReimbursement/ClaimSummary", + }, + ], + }, + { icon: , label: "Project Management", path: "/projects" }, + { icon: , label: "Task Template", path: "/tasks" }, + { icon: , label: "Invoice", path: "/invoice" }, + { icon: , label: "Analysis Report", path: "/analytics" }, + { icon: , label: "Setting", path: "/settings" }, +]; + +const NavigationContent: React.FC = () => { + const { t } = useTranslation("common"); + const pathname = usePathname(); + + const [openItems, setOpenItems] = React.useState([]); + const toggleItem = (path: string) => { + setOpenItems((prevOpenItems) => + prevOpenItems.includes(path) + ? prevOpenItems.filter((item) => item !== path) + : [...prevOpenItems, path], + ); + }; + + const renderNavigationItem = (item: NavigationItem) => { + const isOpen = openItems.includes(item.path); + + return ( + + item.children && toggleItem(item.path)} + > + {item.icon} + + + {item.children && isOpen && ( + + {item.children.map((child) => renderNavigationItem(child))} + + )} + + ); + }; + + return ( + + + + {/* */} + + + + {navigationItems.map((item) => renderNavigationItem(item))} + {/* {navigationItems.map(({ icon, label, path }, index) => { + return ( + + + {icon} + + + + ); + })} */} + + + ); +}; + +export default NavigationContent; diff --git a/src/components/NavigationContent/index.ts b/src/components/NavigationContent/index.ts new file mode 100644 index 0000000..bcd4bfa --- /dev/null +++ b/src/components/NavigationContent/index.ts @@ -0,0 +1 @@ +export { default } from "./NavigationContent"; diff --git a/src/components/PageTitle/PageTitle.tsx b/src/components/PageTitle/PageTitle.tsx new file mode 100644 index 0000000..d76d313 --- /dev/null +++ b/src/components/PageTitle/PageTitle.tsx @@ -0,0 +1,166 @@ +"use client"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; + +type PageTitleProps = { + BigTitle: string; + SecondTitle?: string; + ThirdTitle?: string; + FourthTitle?: string; +}; + +const PageTitle: React.FC = ({ + BigTitle, + SecondTitle = "", + ThirdTitle = "", + FourthTitle = "", +}) => { + const { t } = useTranslation("dashboard"); + return ( + +
+

+ {BigTitle} +

+    +
+    +

+ Overview +

+   +

+ {">"} +

+   +

+ {BigTitle} +

+   + {SecondTitle !== "" ? ( +

+ {">"}  +

+ ) : ( + "" + )} + {SecondTitle !== "" ? ( +

+ {SecondTitle}  +

+ ) : ( + "" + )} + {ThirdTitle !== "" ? ( +

+ {">"}  +

+ ) : ( + "" + )} + {ThirdTitle !== "" ? ( +

+ {ThirdTitle}  +

+ ) : ( + "" + )} + {FourthTitle !== "" ? ( +

+ {">"}  +

+ ) : ( + "" + )} + {FourthTitle !== "" ? ( +

+ {FourthTitle}  +

+ ) : ( + "" + )} +
+
+ ); +}; + +export default PageTitle; diff --git a/src/components/PageTitle/index.ts b/src/components/PageTitle/index.ts new file mode 100644 index 0000000..1629166 --- /dev/null +++ b/src/components/PageTitle/index.ts @@ -0,0 +1 @@ +export { default } from "./PageTitle"; diff --git a/src/components/ProgressByClient/ProgressByClient.tsx b/src/components/ProgressByClient/ProgressByClient.tsx new file mode 100644 index 0000000..939f5d3 --- /dev/null +++ b/src/components/ProgressByClient/ProgressByClient.tsx @@ -0,0 +1,643 @@ +"use client"; +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useState, useEffect, useMemo } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import { Card, CardHeader } from "@mui/material"; +import CustomSearchForm from "../CustomSearchForm/CustomSearchForm"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import ReactApexChart from "react-apexcharts"; +import { ApexOptions } from "apexcharts"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ReportProblemIcon from "@mui/icons-material/ReportProblem"; +import dynamic from "next/dynamic"; +import "../../app/global.css"; +import { AnyARecord, AnyCnameRecord } from "dns"; +import SearchBox, { Criterion } from "../SearchBox"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; + +const ProgressByClient: React.FC = () => { + const [activeTab, setActiveTab] = useState("financialSummary"); + const [SearchCriteria, setSearchCriteria] = React.useState({}); + const { t } = useTranslation("dashboard"); + + const [clientCode, setClientCode] = useState(""); + const [clientName, setClientName] = useState(""); + const [subsidiaryClientCode, setSubsidiaryClientCode] = useState(""); + const [subsidiaryClientName, setSubsidiaryClientName] = useState(""); + const [projectArray, setProjectArray]: any[] = useState([]); + const [percentageArray, setPercentageArray]: any[] = useState([]); + const [colorArray, setColorArray]: any[] = useState([]); + const [selectionModel, setSelectionModel]: any[] = React.useState([]); + const [pieChartColor, setPieChartColor]: any[] = React.useState([]); + const [totalSpentPercentage, setTotalSpentPercentage]: any = React.useState(); + const [projectBudgetManhour, setProjectBudgetManhour]: any = + React.useState("-"); + const [actualManhourSpent, setActualManhourSpent]: any = React.useState("-"); + const [remainedManhour, setRemainedManhour]: any = React.useState("-"); + const [lastUpdate, setLastUpdate]: any = React.useState("-"); + const [dropdownDemo, setDropdownDemo] = useState(""); + const [dateDemo, setDateDemo] = useState(null); + const [checkboxDemo, setCheckboxDemo] = useState(false); + const [receiptFromDate, setReceiptFromDate] = useState(null); + const [receiptToDate, setReceiptToDate] = useState(null); + const [selectedRows, setSelectedRows] = useState([]); + const rows = [ + { + id: 1, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "N/A", + clientSubsidiaryName: "N/A", + noOfProjects: "5", + }, + { + id: 2, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "SUBS-001", + clientSubsidiaryName: "Subsidiary A", + noOfProjects: "5", + }, + { + id: 3, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "SUBS-002", + clientSubsidiaryName: "Subsidiary B", + noOfProjects: "3", + }, + { + id: 4, + clientCode: "CUST-001", + clientName: "Client A", + clientSubsidiaryCode: "SUBS-003", + clientSubsidiaryName: "Subsidiary C", + noOfProjects: "1", + }, + ]; + //['#f57f90', '#94f7d6', '#87c5f5', '#ab95f5', '#fcd68b'] + const rows2 = [ + { + id: 1, + project: "Consultancy Project 123", + team: "XXX", + teamLeader: "XXX", + currentStage: "Contract Documentation", + budgetedManhour: "200.00", + spentManhour: "120.00", + remainedManhour: "80.00", + comingPaymentMilestone: "31/03/2024", + alert: false, + color: "#f57f90", + }, + { + id: 2, + project: "Consultancy Project 456", + team: "XXX", + teamLeader: "XXX", + currentStage: "Report Preparation", + budgetedManhour: "400.00", + spentManhour: "200.00", + remainedManhour: "200.00", + comingPaymentMilestone: "20/02/2024", + alert: false, + color: "#94f7d6", + }, + { + id: 3, + project: "Construction Project A", + team: "YYY", + teamLeader: "YYY", + currentStage: "Construction", + budgetedManhour: "187.50", + spentManhour: "200.00", + remainedManhour: "12.50", + comingPaymentMilestone: "13/12/2023", + alert: true, + color: "#87c5f5", + }, + { + id: 4, + project: "Construction Project B", + team: "XXX", + teamLeader: "XXX", + currentStage: "Post Construction", + budgetedManhour: "100.00", + spentManhour: "40.00", + remainedManhour: "60.00", + comingPaymentMilestone: "05/01/2024", + alert: false, + color: "#ab95f5", + }, + { + id: 5, + project: "Construction Project C", + team: "YYY", + teamLeader: "YYY", + currentStage: "Construction", + budgetedManhour: "300.00", + spentManhour: "150.00", + remainedManhour: "150.00", + comingPaymentMilestone: "31/03/2024", + alert: false, + color: "#fcd68b", + }, + ]; + + const columns = [ + { + id: "clientCode", + field: "clientCode", + headerName: "Client Code", + flex: 1, + }, + { + id: "clientName", + field: "clientName", + headerName: "Client Name", + flex: 1, + }, + { + id: "clientSubsidiaryCode", + field: "clientSubsidiaryCode", + headerName: "Client Subsidiary Code", + flex: 1, + }, + { + id: "noOfProjects", + field: "noOfProjects", + headerName: "No. of Projects", + flex: 1, + }, + ]; + + const columns2 = [ + { + id: "color", + field: "color", + headerName: "", + renderCell: (params: any) => { + return ( + + ); + }, + flex: 0.1, + }, + { + id: "project", + field: "project", + headerName: "Project", + flex: 1, + }, + { + id: "team", + field: "team", + headerName: "Team", + flex: 0.8, + }, + { + id: "teamLeader", + field: "teamLeader", + headerName: "Team Leader", + flex: 0.8, + }, + { + id: "currentStage", + field: "currentStage", + headerName: "Current Stage", + flex: 1, + }, + { + id: "budgetedManhour", + field: "budgetedManhour", + headerName: "Budgeted Manhour", + flex: 0.8, + }, + { + id: "spentManhour", + field: "spentManhour", + headerName: "Spent Manhour", + renderCell: (params: any) => { + if (params.row.budgetedManhour - params.row.spentManhour <= 0) { + return ( + {params.row.spentManhour} + ); + } else { + return {params.row.spentManhour}; + } + }, + flex: 0.8, + }, + { + id: "remainedManhour", + field: "remainedManhour", + headerName: "Remained Manhour", + renderCell: (params: any) => { + if (params.row.budgetedManhour - params.row.spentManhour <= 0) { + return ( + ({params.row.remainedManhour}) + ); + } else { + return {params.row.remainedManhour}; + } + }, + flex: 1, + }, + { + id: "comingPaymentMilestone", + field: "comingPaymentMilestone", + headerName: "Coming Payment Milestone", + flex: 1, + }, + { + id: "alert", + field: "alert", + headerName: "Alert", + renderCell: (params: any) => { + if (params.row.alert === true) { + return ( + + + + ); + } else { + return ; + } + }, + flex: 0.2, + }, + ]; + + const InputFields = [ + { + id: "clientCode", + label: "Client Code", + type: "text", + value: clientCode, + setValue: setClientCode, + }, + { + id: "clientName", + label: "Client Name", + type: "text", + value: clientName, + setValue: setClientName, + }, + { + id: "subsidiaryClientCode", + label: "Subsidiary Client Code", + type: "text", + value: subsidiaryClientCode, + setValue: setSubsidiaryClientCode, + }, + { + id: "subsidiaryClientName", + label: "Subsidiary Client Name", + type: "text", + value: subsidiaryClientName, + setValue: setSubsidiaryClientName, + }, + // { id: 'dropdownDemo', label: "dropdownDemo", type: 'dropdown', options: [{id:"1", label:"1"}], value: dropdownDemo, setValue: setDropdownDemo }, + // { id: 'dateDemo', label:'dateDemo', type: 'date', value: dateDemo, setValue: setDateDemo }, + // { id: 'checkboxDemo', label:'checkboxDemo', type: 'checkbox', value: checkboxDemo, setValue: setCheckboxDemo }, + // { id: ['receiptFromDate','receiptToDate'], label: ["收貨日期","收貨日期"], value: [receiptFromDate ? receiptFromDate : null, receiptToDate ? receiptToDate : null], + // setValue: [setReceiptFromDate, setReceiptToDate],type: 'dateRange' }, + ]; + + const stageDeadline = [ + "31/03/2024", + "20/02/2024", + "01/12/2023", + "05/01/2024", + "31/03/2023", + ]; + + const series2: ApexAxisChartSeries | ApexNonAxisChartSeries = [ + { + data: [17.1, 28.6, 5.7, 48.6], + }, + ]; + + const series: ApexAxisChartSeries | ApexNonAxisChartSeries = [ + { + name: "Current Stage Completion Percentage", + data: [80, 55, 40, 65, 70], + }, + ]; + + const options2: ApexOptions = { + chart: { + type: "donut", + }, + colors: colorArray, + plotOptions: { + pie: { + donut: { + labels: { + show: true, + name: { + show: true, + }, + value: { + show: true, + fontWeight: 500, + fontSize: "30px", + color: "#3e98c7", + }, + total: { + show: true, + showAlways: true, + label: "Spent", + fontFamily: "sans-serif", + formatter: function (val) { + return totalSpentPercentage + "%"; + }, + }, + }, + }, + }, + }, + labels: projectArray, + legend: { + show: false, + }, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 200, + }, + legend: { + position: "bottom", + show: false, + }, + }, + }, + ], + }; + + const options: ApexOptions = { + chart: { + type: "bar", + height: 350, + }, + colors: ["#f57f90", "#94f7d6", "#87c5f5", "#ab95f5", "#fcd68b"], + plotOptions: { + bar: { + horizontal: true, + distributed: true, + }, + }, + dataLabels: { + enabled: false, + }, + xaxis: { + categories: [ + "Consultancy Project 123", + "Consultancy Project 456", + "Construction Project A", + "Construction Project B", + "Construction Project C", + ], + }, + yaxis: { + title: { + text: "Projects", + }, + labels: { + maxWidth: 200, + style: { + cssClass: "apexcharts-yaxis-label", + }, + }, + }, + title: { + text: "Current Stage Completion Percentage", + align: "center", + }, + grid: { + borderColor: "#f1f1f1", + }, + annotations: {}, + }; + + const handleSelectionChange = (newSelectionModel: GridRowSelectionModel) => { + const selectedRowsData = rows2.filter((row) => + newSelectionModel.includes(row.id), + ); + console.log(selectedRowsData); + const projectArray = []; + const pieChartColorArray = []; + let totalSpent = 0; + let totalBudgetManhour = 0; + const percentageArray = []; + for (let i = 0; i <= selectedRowsData.length; i++) { + if (i === selectedRowsData.length && i > 0) { + projectArray.push("Remained"); + } else if (selectedRowsData.length > 0) { + projectArray.push(selectedRowsData[i].project); + totalBudgetManhour += Number(selectedRowsData[i].budgetedManhour); + totalSpent += Number(selectedRowsData[i].spentManhour); + pieChartColorArray.push(selectedRowsData[i].color); + } + } + for (let i = 0; i <= selectedRowsData.length; i++) { + if (i === selectedRowsData.length && i > 0) { + const remainedManhour = totalBudgetManhour - totalSpent; + percentageArray.push( + Number(((remainedManhour / totalBudgetManhour) * 100).toFixed(1)), + ); + } else if (selectedRowsData.length > 0) { + const percentage = ( + (Number(selectedRowsData[i].spentManhour) / totalBudgetManhour) * + 100 + ).toFixed(1); + percentageArray.push(Number(percentage)); + } + } + setProjectBudgetManhour(totalBudgetManhour.toFixed(2)); + setActualManhourSpent(totalSpent.toFixed(2)); + setRemainedManhour((totalBudgetManhour - totalSpent).toFixed(2)); + setLastUpdate(new Date().toLocaleDateString("en-GB")); + setSelectionModel(newSelectionModel); + console.log(projectArray); + setProjectArray(projectArray); + setPercentageArray(percentageArray); + console.log(percentageArray); + setTotalSpentPercentage( + ((totalSpent / totalBudgetManhour) * 100).toFixed(1), + ); + if (projectArray.length > 0 && projectArray.includes("Remained")) { + const nonLastRecordColors = pieChartColorArray; + setColorArray([ + ...nonLastRecordColors.slice(0, projectArray.length - 1), + "#a3a3a3", + ]); + } else { + setColorArray(pieChartColorArray); + } + }; + + const applySearch = (data: any) => { + console.log(data); + setSearchCriteria(data); + }; + return ( + + {/* */} + {/* */} +
+ + + +
+ +
+ {/*
+

Stage Deadline

+ {stageDeadline.map((date, index) => { + const marginTop = index === 0 ? 25 : 20; + return ( +

{date}

+ ); + })} +
*/} + +
+ +
+
+
+
+
+ + + + {percentageArray.length === 0 && ( +
+ Please select the project you want to check. +
+ )} + {percentageArray.length > 0 && ( + + )} +
+
+ + +
+
+ Project Budget Manhour +
+
+ {projectBudgetManhour} +
+
+
+
+
+ Actual Manhour Spent +
+
+ {actualManhourSpent} +
+
+
+
+
+ Remained Manhour +
+
+ {remainedManhour} +
+
+
+
+
+ Last Update +
+
+ {lastUpdate} +
+
+
+
+
+
+ ); +}; + +export default ProgressByClient; diff --git a/src/components/ProgressByClient/index.ts b/src/components/ProgressByClient/index.ts new file mode 100644 index 0000000..3b2ccf9 --- /dev/null +++ b/src/components/ProgressByClient/index.ts @@ -0,0 +1 @@ +export { default } from "./ProgressByClient"; diff --git a/src/components/ProgressByClientSearch/ProgressByClientSearch.tsx b/src/components/ProgressByClientSearch/ProgressByClientSearch.tsx new file mode 100644 index 0000000..7ddbb00 --- /dev/null +++ b/src/components/ProgressByClientSearch/ProgressByClientSearch.tsx @@ -0,0 +1,57 @@ +"use client"; + +import { ProjectResult } from "@/app/api/projects"; +import React, { useMemo, useState } from "react"; +import SearchBox, { Criterion } from "../SearchBox"; +import { useTranslation } from "react-i18next"; +import SearchResults, { Column } from "../SearchResults"; +import { ClientProjectResult } from "@/app/api/clientprojects"; + +interface Props { + projects: ClientProjectResult[]; +} +type SearchQuery = Partial>; +type SearchParamNames = keyof SearchQuery; + +const ProgressByClientSearch: React.FC = ({ projects }) => { + const { t } = useTranslation("projects"); + + // If project searching is done on the server-side, then no need for this. + const [filteredProjects, setFilteredProjects] = useState(projects); + + const searchCriteria: Criterion[] = useMemo( + () => [ + { label: "Client Code", paramName: "clientCode", type: "text" }, + { label: "Client Name", paramName: "clientName", type: "text" }, + ], + [t], + ); + + const columns = useMemo[]>( + () => [ + { name: "clientCode", label: t("Project Code") }, + { name: "clientName", label: t("Project Name") }, + { name: "SubsidiaryClientCode", label: t("Project Category") }, + { name: "SubsidiaryClientName", label: t("Team") }, + { name: "NoOfProjects", label: t("Client") }, + ], + [t], + ); + + return ( + <> + { + console.log(query); + }} + /> + + items={filteredProjects} + columns={columns} + /> + + ); +}; + +export default ProgressByClientSearch; diff --git a/src/components/ProgressByClientSearch/ProgressByClientSearchLoading.tsx b/src/components/ProgressByClientSearch/ProgressByClientSearchLoading.tsx new file mode 100644 index 0000000..dd33fa0 --- /dev/null +++ b/src/components/ProgressByClientSearch/ProgressByClientSearchLoading.tsx @@ -0,0 +1,40 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Skeleton from "@mui/material/Skeleton"; +import Stack from "@mui/material/Stack"; +import React from "react"; + +// Can make this nicer +export const ProgressByClientSearchLoading: React.FC = () => { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default ProgressByClientSearchLoading; diff --git a/src/components/ProgressByClientSearch/ProgressByClientSearchWrapper.tsx b/src/components/ProgressByClientSearch/ProgressByClientSearchWrapper.tsx new file mode 100644 index 0000000..b644fb4 --- /dev/null +++ b/src/components/ProgressByClientSearch/ProgressByClientSearchWrapper.tsx @@ -0,0 +1,18 @@ +import { fetchClientProjects } from "@/app/api/clientprojects"; +import React from "react"; +import ProgressByClientSearch from "./ProgressByClientSearch"; +import ProgressByClientSearchLoading from "./ProgressByClientSearchLoading"; + +interface SubComponents { + Loading: typeof ProgressByClientSearchLoading; +} + +const ProgressByClientSearchWrapper: React.FC & SubComponents = async () => { + const clentprojects = await fetchClientProjects(); + + return ; +}; + +ProgressByClientSearchWrapper.Loading = ProgressByClientSearchLoading; + +export default ProgressByClientSearchWrapper; diff --git a/src/components/ProgressByClientSearch/index.ts b/src/components/ProgressByClientSearch/index.ts new file mode 100644 index 0000000..4fdbe22 --- /dev/null +++ b/src/components/ProgressByClientSearch/index.ts @@ -0,0 +1 @@ +export { default } from "./ProgressByClientSearchWrapper"; diff --git a/src/components/ProgressCashFlowSearch/ProgressCashFlowSearch.tsx b/src/components/ProgressCashFlowSearch/ProgressCashFlowSearch.tsx new file mode 100644 index 0000000..845c874 --- /dev/null +++ b/src/components/ProgressCashFlowSearch/ProgressCashFlowSearch.tsx @@ -0,0 +1,156 @@ +"use client"; + +import { ProjectResult } from "@/app/api/projects"; +import React, { useMemo, useState } from "react"; +import SearchBox, { Criterion } from "../SearchBox"; +import { useTranslation } from "react-i18next"; +import SearchResults, { Column } from "../SearchResults"; +import { CashFlow } from "@/app/api/cashflow"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ProjectCashFlow from "../ProjectCashFlow"; + +interface Props { + projects: CashFlow[]; +} +type SearchQuery = Partial>; +type SearchParamNames = keyof SearchQuery; + +const ProgressByClientSearch: React.FC = ({ projects }) => { + const { t } = useTranslation("projects"); + const [selectionModel, setSelectionModel]: any[] = React.useState([]); + const columns = [ + { + id: "projectCode", + field: "projectCode", + headerName: "Project Code", + flex: 1, + }, + { + id: "projectName", + field: "projectName", + headerName: "Project Name", + flex: 1, + }, + { + id: "team", + field: "team", + headerName: "Team", + flex: 1, + }, + { + id: "teamLeader", + field: "teamLeader", + headerName: "Team Leader", + flex: 1, + }, + { + id: "startDate", + field: "startDate", + headerName: "Start Date", + flex: 1, + }, + { + id: "targetEndDate", + field: "targetEndDate", + headerName: "Target End Date", + flex: 1, + }, + { + id: "client", + field: "client", + headerName: "Client", + flex: 1, + }, + { + id: "subsidiary", + field: "subsidiary", + headerName: "Subsidiary", + flex: 1, + }, + ]; + const rows = [ + { + id: 1, + projectCode: "M1001", + projectName: "Consultancy Project A", + team: "XXX", + teamLeader: "XXX", + startDate: "01/07/2022", + targetEndDate: "01/04/2024", + client: "Client B", + subsidiary: "N/A", + }, + { + id: 2, + projectCode: "M1301", + projectName: "Consultancy Project AAAA", + team: "XXX", + teamLeader: "XXX", + startDate: "01/09/2022", + targetEndDate: "20/02/2024", + client: "Client C", + subsidiary: "Subsidiary A", + }, + { + id: 3, + projectCode: "M1354", + projectName: "Consultancy Project BBB", + team: "YYY", + teamLeader: "YYY", + startDate: "01/02/2023", + targetEndDate: "31/01/2024", + client: "Client D", + subsidiary: "Subsidiary C", + }, + ]; + const [selectedTeamData, setSelectedTeamData]: any[] = React.useState(rows); + const handleSelectionChange = (newSelectionModel: GridRowSelectionModel) => { + const selectedRowsData = selectedTeamData.filter((row: any) => + newSelectionModel.includes(row.id), + ); + console.log(selectedRowsData); + }; + + // If project searching is done on the server-side, then no need for this. + const [filteredProjects, setFilteredProjects] = useState(projects); + + const searchCriteria: Criterion[] = useMemo( + () => [ + { label: "Project Code", paramName: "projectCode", type: "text" }, + { label: "Project Name", paramName: "projectName", type: "text" }, + { + label: "Start Date From", + label2: "Start Date To", + paramName: "startDateFrom", + type: "dateRange", + }, + ], + [t], + ); + + // const columns = useMemo[]>( + // () => [ + // { name: "clientCode", label: t("Project Code") }, + // { name: "clientName", label: t("Project Name") }, + // { name: "SubsidiaryClientCode", label: t("Project Category") }, + // { name: "SubsidiaryClientName", label: t("Team") }, + // { name: "NoOfProjects", label: t("Client") }, + // ], + // [t], + // ); + + return ( + <> + { + console.log(query); + }} + /> + {/* */} + + ); +}; + +export default ProgressByClientSearch; diff --git a/src/components/ProgressCashFlowSearch/ProgressCashFlowSearchLoading.tsx b/src/components/ProgressCashFlowSearch/ProgressCashFlowSearchLoading.tsx new file mode 100644 index 0000000..7d25500 --- /dev/null +++ b/src/components/ProgressCashFlowSearch/ProgressCashFlowSearchLoading.tsx @@ -0,0 +1,40 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Skeleton from "@mui/material/Skeleton"; +import Stack from "@mui/material/Stack"; +import React from "react"; + +// Can make this nicer +export const ProgressCashFlowSearchLoading: React.FC = () => { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default ProgressCashFlowSearchLoading; diff --git a/src/components/ProgressCashFlowSearch/ProgressCashFlowSearchWrapper.tsx b/src/components/ProgressCashFlowSearch/ProgressCashFlowSearchWrapper.tsx new file mode 100644 index 0000000..8e99756 --- /dev/null +++ b/src/components/ProgressCashFlowSearch/ProgressCashFlowSearchWrapper.tsx @@ -0,0 +1,18 @@ +import { fetchProjectsCashFlow } from "@/app/api/cashflow"; +import React from "react"; +import ProgressCashFlowSearch from "./ProgressCashFlowSearch"; +import ProgressCashFlowSearchSearchLoading from "./ProgressCashFlowSearchLoading"; + +interface SubComponents { + Loading: typeof ProgressCashFlowSearchSearchLoading; +} + +const ProgressCashFlowSearchWrapper: React.FC & SubComponents = async () => { + const clentprojects = await fetchProjectsCashFlow(); + + return ; +}; + +ProgressCashFlowSearchWrapper.Loading = ProgressCashFlowSearchSearchLoading; + +export default ProgressCashFlowSearchWrapper; diff --git a/src/components/ProgressCashFlowSearch/index.ts b/src/components/ProgressCashFlowSearch/index.ts new file mode 100644 index 0000000..417711b --- /dev/null +++ b/src/components/ProgressCashFlowSearch/index.ts @@ -0,0 +1 @@ +export { default } from "./ProgressCashFlowSearchWrapper"; diff --git a/src/components/ProjectCashFlow/ProjectCashFlow.tsx b/src/components/ProjectCashFlow/ProjectCashFlow.tsx new file mode 100644 index 0000000..5eb455c --- /dev/null +++ b/src/components/ProjectCashFlow/ProjectCashFlow.tsx @@ -0,0 +1,638 @@ +"use client"; +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useState, useEffect, useMemo } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import { Card, CardHeader } from "@mui/material"; +import CustomSearchForm from "../CustomSearchForm/CustomSearchForm"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import ReactApexChart from "react-apexcharts"; +import { ApexOptions } from "apexcharts"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ReportProblemIcon from "@mui/icons-material/ReportProblem"; +import dynamic from "next/dynamic"; +import "../../app/global.css"; +import { AnyARecord, AnyCnameRecord } from "dns"; +import SearchBox, { Criterion } from "../SearchBox"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import ProgressCashFlowSearch from "@/components/ProgressCashFlowSearch"; +import { Input, Label } from "reactstrap"; + +const ProjectCashFlow: React.FC = () => { + const todayDate = new Date(); + const [selectionModel, setSelectionModel]: any[] = React.useState([]); + const [cashFlowYear, setCashFlowYear]: any[] = React.useState( + todayDate.getFullYear(), + ); + const columns = [ + { + id: "projectCode", + field: "projectCode", + headerName: "Project Code", + flex: 1, + }, + { + id: "projectName", + field: "projectName", + headerName: "Project Name", + flex: 1, + }, + { + id: "team", + field: "team", + headerName: "Team", + flex: 1, + }, + { + id: "teamLeader", + field: "teamLeader", + headerName: "Team Leader", + flex: 1, + }, + { + id: "startDate", + field: "startDate", + headerName: "Start Date", + flex: 1, + }, + { + id: "targetEndDate", + field: "targetEndDate", + headerName: "Target End Date", + flex: 1, + }, + { + id: "client", + field: "client", + headerName: "Client", + flex: 1, + }, + { + id: "subsidiary", + field: "subsidiary", + headerName: "Subsidiary", + flex: 1, + }, + ]; + + const ledgerColumns = [ + { + id: "date", + field: "date", + headerName: "Date", + flex: 0.5, + }, + { + id: "expenditure", + field: "expenditure", + headerName: "Expenditure (HKD)", + flex: 0.6, + }, + { + id: "income", + field: "income", + headerName: "Income (HKD)", + flex: 0.6, + }, + { + id: "cashFlowBalance", + field: "cashFlowBalance", + headerName: "Cash Flow Balance (HKD)", + flex: 0.6, + }, + { + id: "remarks", + field: "remarks", + headerName: "Remarks", + flex: 1, + }, + ]; + + const options: ApexOptions = { + chart: { + height: 350, + type: "line", + }, + stroke: { + width: [0, 0, 2, 2], + }, + plotOptions: { + bar: { + horizontal: false, + distributed: false, + }, + }, + dataLabels: { + enabled: false, + }, + xaxis: { + categories: [ + "Q1", + "Q2", + "Q3", + "Q4", + "Q5", + "Q6", + "Q7", + "Q8", + "Q9", + "Q10", + "Q11", + "Q12", + ], + }, + yaxis: [ + { + title: { + text: "Monthly Income and Expenditure(HKD)", + }, + min: 0, + max: 350000, + tickAmount: 5, + }, + { + show: false, + seriesName: "Monthly_Expenditure", + title: { + text: "Monthly Expenditure (HKD)", + }, + min: 0, + max: 350000, + tickAmount: 5, + }, + { + seriesName: "Cumulative_Income", + opposite: true, + title: { + text: "Cumulative Income and Expenditure(HKD)", + }, + min: 0, + max: 850000, + tickAmount: 5, + }, + { + show: false, + seriesName: "Cumulative_Expenditure", + opposite: true, + title: { + text: "Cumulative Expenditure (HKD)", + }, + min: 0, + max: 850000, + tickAmount: 5, + }, + ], + grid: { + borderColor: "#f1f1f1", + }, + annotations: {}, + series: [ + { + name: "Monthly_Income", + type: "column", + color: "#ffde91", + data: [0, 110000, 0, 0, 185000, 0, 0, 189000, 0, 0, 300000, 0], + }, + { + name: "Monthly_Expenditure", + type: "column", + color: "#82b59a", + data: [ + 0, 160000, 120000, 120000, 55000, 55000, 55000, 55000, 55000, 70000, + 55000, 55000, + ], + }, + { + name: "Cumulative_Income", + type: "line", + color: "#EE6D7A", + data: [ + 0, 100000, 100000, 100000, 300000, 300000, 300000, 500000, 500000, + 500000, 800000, 800000, + ], + }, + { + name: "Cumulative_Expenditure", + type: "line", + color: "#7cd3f2", + data: [ + 0, 198000, 240000, 400000, 410000, 430000, 510000, 580000, 600000, + 710000, 730000, 790000, + ], + }, + ], + }; + + const accountsReceivableOptions: ApexOptions = { + colors: ["#20E647"], + series: [80], + chart: { + height: 350, + type: "radialBar", + }, + plotOptions: { + radialBar: { + hollow: { + size: "70%", + background: "#ffffff", + }, + track: { + dropShadow: { + enabled: true, + top: 2, + left: 0, + blur: 4, + opacity: 0.15, + }, + }, + dataLabels: { + name: { + show: false, + }, + value: { + color: "#3e98c7", + fontSize: "3em", + show: true, + }, + }, + }, + }, + fill: { + type: "gradient", + gradient: { + shade: "dark", + type: "vertical", + gradientToColors: ["#87D4F9"], + stops: [0, 100], + }, + }, + stroke: { + lineCap: "round", + }, + labels: ["AccountsReceivable"], + }; + + const expenditureOptions: ApexOptions = { + colors: ["#20E647"], + series: [95], + chart: { + height: 350, + type: "radialBar", + }, + plotOptions: { + radialBar: { + hollow: { + size: "70%", + background: "#ffffff", + }, + track: { + dropShadow: { + enabled: true, + top: 2, + left: 0, + blur: 4, + opacity: 0.15, + }, + }, + dataLabels: { + name: { + show: false, + }, + value: { + color: "#3e98c7", + fontSize: "3em", + show: true, + }, + }, + }, + }, + fill: { + type: "gradient", + gradient: { + shade: "dark", + type: "vertical", + gradientToColors: ["#87D4F9"], + stops: [0, 100], + }, + }, + stroke: { + lineCap: "round", + }, + labels: ["AccountsReceivable"], + }; + + const rows = [ + { + id: 1, + projectCode: "M1001", + projectName: "Consultancy Project A", + team: "XXX", + teamLeader: "XXX", + startDate: "01/07/2022", + targetEndDate: "01/04/2024", + client: "Client B", + subsidiary: "N/A", + }, + { + id: 2, + projectCode: "M1301", + projectName: "Consultancy Project AAAA", + team: "XXX", + teamLeader: "XXX", + startDate: "01/09/2022", + targetEndDate: "20/02/2024", + client: "Client C", + subsidiary: "Subsidiary A", + }, + { + id: 3, + projectCode: "M1354", + projectName: "Consultancy Project BBB", + team: "YYY", + teamLeader: "YYY", + startDate: "01/02/2023", + targetEndDate: "31/01/2024", + client: "Client D", + subsidiary: "Subsidiary C", + }, + ]; + + const ledgerRows = [ + { + id: 1, + date: "Feb 2023", + expenditure: "-", + income: "100,000.00", + cashFlowBalance: "100,000.00", + remarks: "Payment Milestone 1 (10%)", + }, + { + id: 2, + date: "Feb 2023", + expenditure: "160,000.00", + income: "-", + cashFlowBalance: "(60,000.00)", + remarks: "Monthly Manpower Expenditure", + }, + { + id: 3, + date: "Mar 2023", + expenditure: "160,000.00", + income: "-", + cashFlowBalance: "(180,000.00)", + remarks: "Monthly Manpower Expenditure", + }, + { + id: 4, + date: "Apr 2023", + expenditure: "120,000.00", + income: "-", + cashFlowBalance: "(300,000.00)", + remarks: "Monthly Manpower Expenditure", + }, + { + id: 5, + date: "May 2023", + expenditure: "-", + income: "200,000.00", + cashFlowBalance: "(100,000.00)", + remarks: "Payment Milestone 2 (20%)", + }, + { + id: 6, + date: "May 2023", + expenditure: "40,000.00", + income: "-", + cashFlowBalance: "(140,000.00)", + remarks: "Monthly Manpower Expenditure", + }, + ]; + + const [projectData, setProjectData]: any[] = React.useState(rows); + const [ledgerData, setLedgerData]: any[] = React.useState(ledgerRows); + const handleSelectionChange = (newSelectionModel: GridRowSelectionModel) => { + const selectedRowsData = projectData.filter((row: any) => + newSelectionModel.includes(row.id), + ); + console.log(selectedRowsData); + }; + + return ( + <> + }> + + + + +
+ + + +
+
+ + +
+
+ +
+
+ +
+ +
+
+
+
+
+ + + + + +
+ Total A. Receivable +
+
+ 1,000,000.00 +
+
+
+ Amount Received +
+
+ 800,000.00 +
+
+
+ Remaining Balance +
+
+ 200,000.00 +
+
+
+
+
+
+ + + + + +
+ Budgeted Expenditure +
+
+ 800,000.00 +
+
+
+ Actual Expenditure +
+
+ 760,000.00 +
+
+
+ Remaining Balance +
+
+ 40,000.00 +
+
+
+
+
+
+ + + +
+ +
+
+
+
+
+ + ); +}; + +export default ProjectCashFlow; diff --git a/src/components/ProjectCashFlow/index.ts b/src/components/ProjectCashFlow/index.ts new file mode 100644 index 0000000..af238d3 --- /dev/null +++ b/src/components/ProjectCashFlow/index.ts @@ -0,0 +1 @@ +export { default } from "./ProjectCashFlow"; diff --git a/src/components/ProjectFinancialSummary/ProjectFinancialCard.tsx b/src/components/ProjectFinancialSummary/ProjectFinancialCard.tsx new file mode 100644 index 0000000..25ff90e --- /dev/null +++ b/src/components/ProjectFinancialSummary/ProjectFinancialCard.tsx @@ -0,0 +1,173 @@ +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useState, useEffect, useMemo } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import { Card, CardHeader } from "@mui/material"; +import CustomSearchForm from "../CustomSearchForm/CustomSearchForm"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import ReactApexChart from "react-apexcharts"; +import { ApexOptions } from "apexcharts"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ReportProblemIcon from "@mui/icons-material/ReportProblem"; +import dynamic from "next/dynamic"; +import "../../app/global.css"; +import { AnyARecord, AnyCnameRecord } from "dns"; +import SearchBox, { Criterion } from "../SearchBox"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; + +interface Props { + Title: string; + TotalActiveProjectNumber: string; + TotalFees: string; + TotalBudget: string; + TotalCumulative: string; + TotalInvoicedAmount: string; + TotalReceivedAmount: string; + CashFlowStatus: string; + CostPerformanceIndex: string; + ClickedIndex: number; + Index: number; +} + +const ProjectFinancialCard: React.FC = ({ + Title, + TotalActiveProjectNumber, + TotalFees, + TotalBudget, + TotalCumulative, + TotalInvoicedAmount, + TotalReceivedAmount, + CashFlowStatus, + CostPerformanceIndex, + ClickedIndex, + Index, +}) => { + const [SearchCriteria, setSearchCriteria] = React.useState({}); + const { t } = useTranslation("dashboard"); + const borderColor = + CashFlowStatus === "Negative" + ? "border-red-300 border-solid" + : "border-green-200 border-solid"; + const selectedBackgroundColor = + ClickedIndex === Index ? "rgb(235 235 235)" : "rgb(255 255 255)"; + console.log(ClickedIndex); + console.log(Index); + return ( + +
+ {Title} +
+
+
+ Total Active Project +
+
+ {TotalActiveProjectNumber} +
+
+
+ Total Fees +
+
+ {TotalFees} +
+
+
+ Total Budget +
+
+ {TotalBudget} +
+
+
+ Total Cumulative Expenditure +
+
+ {TotalCumulative} +
+
+
+ Total Invoiced Amount +
+
+ {TotalInvoicedAmount} +
+
+
+ Total Received Amount +
+
+ {TotalReceivedAmount} +
+
+
+ Cash Flow Status +
+ {CashFlowStatus === "Negative" && ( + <> +
+ {CashFlowStatus} +
+
+ + )} + {CashFlowStatus === "Positive" && ( + <> +
+ {CashFlowStatus} +
+
+ + )} +
+ Cost Performance Index (CPI) +
+ {Number(CostPerformanceIndex) < 1 && ( + <> +
+ {CostPerformanceIndex} +
+ + )} + {Number(CostPerformanceIndex) >= 1 && ( + <> +
+ {CostPerformanceIndex} +
+ + )} +
+ ); +}; + +export default ProjectFinancialCard; diff --git a/src/components/ProjectFinancialSummary/ProjectFinancialSummary.tsx b/src/components/ProjectFinancialSummary/ProjectFinancialSummary.tsx new file mode 100644 index 0000000..e9839c9 --- /dev/null +++ b/src/components/ProjectFinancialSummary/ProjectFinancialSummary.tsx @@ -0,0 +1,465 @@ +"use client"; +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useState, useEffect, useMemo } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import { Card, CardHeader } from "@mui/material"; +import CustomSearchForm from "../CustomSearchForm/CustomSearchForm"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import ReactApexChart from "react-apexcharts"; +import { ApexOptions } from "apexcharts"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ReportProblemIcon from "@mui/icons-material/ReportProblem"; +import dynamic from "next/dynamic"; +import "../../app/global.css"; +import { AnyARecord, AnyCnameRecord } from "dns"; +import SearchBox, { Criterion } from "../SearchBox"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import ProjectFinancialCard from "./ProjectFinancialCard"; + +const ProjectFinancialSummary: React.FC = () => { + const [SearchCriteria, setSearchCriteria] = React.useState({}); + const { t } = useTranslation("dashboard"); + const [selectionModel, setSelectionModel]: any[] = React.useState([]); + const projectFinancialData = [ + { + id: 1, + title: "All Teams", + activeProject: "147", + fees: "22,800,000.00", + budget: "18,240,000.00", + cumulativeExpenditure: "17,950,000.00", + invoicedAmount: "18,240,000.00", + receivedAmount: "10,900,000.00", + cashFlowStatus: "Negative", + CPI: "0.69", + }, + { + id: 2, + title: "XXX Team", + activeProject: "25", + fees: "1,500,000.00", + budget: "1,200,000.00", + cumulativeExpenditure: "1,250,000.00", + invoicedAmount: "900,000.00", + receivedAmount: "650,000.00", + cashFlowStatus: "Negative", + CPI: "0.72", + }, + { + id: 3, + title: "YYY Team", + activeProject: "35", + fees: "5,000,000.00", + budget: "4,000,000.00", + cumulativeExpenditure: "3,200,000.00", + invoicedAmount: "3,500,000.00", + receivedAmount: "3,500,000.00", + cashFlowStatus: "Positive", + CPI: "1.09", + }, + { + id: 4, + title: "ZZZ Team", + activeProject: "50", + fees: "3,500,000.00", + budget: "2,800,000.00", + cumulativeExpenditure: "5,600,000.00", + invoicedAmount: "2,500,000.00", + receivedAmount: "2,200,000.00", + cashFlowStatus: "Negative", + CPI: "0.45", + }, + { + id: 5, + title: "AAA Team", + activeProject: "15", + fees: "4,800,000.00", + budget: "3,840,000.00", + cumulativeExpenditure: "2,500,000.00", + invoicedAmount: "1,500,000.00", + receivedAmount: "750,000.00", + cashFlowStatus: "Negative", + CPI: "0.60", + }, + { + id: 6, + title: "BBB Team", + activeProject: "22", + fees: "8,000,000.00", + budget: "6,400,000.00", + cumulativeExpenditure: "5,400,000.00", + invoicedAmount: "4,000,000.00", + receivedAmount: "3,800,000.00", + cashFlowStatus: "Negative", + CPI: "0.74", + }, + ]; + + const rows0 = [{id: 1,projectCode:"M1201",projectName:"Consultancy Project C", team:"XXX", teamLeader:"XXX", startDate:"01/08/2022", targetEndDate: "01/05/2024", client:"Client A", subsidiary:"N/A"}, + {id: 2,projectCode:"M1321",projectName:"Consultancy Project CCC", team:"XXX", teamLeader:"XXX", startDate:"01/08/2022", targetEndDate: "20/01/2024", client:"Client E", subsidiary:"Subsidiary B"}, + {id: 3,projectCode:"M1001",projectName:"Consultancy Project A", team:"YYY", teamLeader:"YYY", startDate:"01/07/2022", targetEndDate: "01/04/2024", client:"Client B", subsidiary:"N/A"}, + {id: 4,projectCode:"M1301",projectName:"Consultancy Project AAAA", team:"YYY", teamLeader:"YYY", startDate:"01/09/2022", targetEndDate: "20/02/2024", client:"Client C", subsidiary:"Subsidiary A"}, + {id: 5,projectCode:"M1354",projectName:"Consultancy Project BBB", team:"YYY", teamLeader:"YYY", startDate:"01/02/2023", targetEndDate: "31/01/2024", client:"Client D", subsidiary:"Subsidiary C"} + ] + + const rows1 = [{id: 1,projectCode:"M1201",projectName:"Consultancy Project C", team:"XXX", teamLeader:"XXX", startDate:"01/08/2022", targetEndDate: "01/05/2024", client:"Client A", subsidiary:"N/A"}, + {id: 2,projectCode:"M1321",projectName:"Consultancy Project CCC", team:"XXX", teamLeader:"XXX", startDate:"01/08/2022", targetEndDate: "20/01/2024", client:"Client E", subsidiary:"Subsidiary B"}, + ] + + const rows2 = [{id: 3,projectCode:"M1001",projectName:"Consultancy Project A", team:"YYY", teamLeader:"YYY", startDate:"01/07/2022", targetEndDate: "01/04/2024", client:"Client B", subsidiary:"N/A"}, + {id: 4,projectCode:"M1301",projectName:"Consultancy Project AAAA", team:"YYY", teamLeader:"YYY", startDate:"01/09/2022", targetEndDate: "20/02/2024", client:"Client C", subsidiary:"Subsidiary A"}, + {id: 5,projectCode:"M1354",projectName:"Consultancy Project BBB", team:"YYY", teamLeader:"YYY", startDate:"01/02/2023", targetEndDate: "31/01/2024", client:"Client D", subsidiary:"Subsidiary C"} + ] + + const projectFinancialRows = [{id: 1,projectCode:"M1354",projectName:"Consultanct Project BBB",clientName:"Client D",cashFlowStatus:"Positive",cpi:"1.25", totalFees:"500,000.00", totalBudget:"400,000.00", totalCumulativeExpenditure:"280,000.00", totalInvoicedAmount: "350,000.00", totalUnInvoicedAmount:"150,000.00", totalReceivedAmount:"350,000.00"} + ] + + const clientFinancialRows =[{id: 1,clientCode:"Cust-02",clientName:"Client B",totalProjectInvolved:"1",cashFlowStatus:"Positive",cpi:"1.25", totalFees:"500,000.00", totalBudget:"400,000.00", totalCumulativeExpenditure:"280,000.00", totalInvoicedAmount: "350,000.00", totalUnInvoicedAmount:"150,000.00", totalReceivedAmount:"350,000.00"}, + {id: 2,clientCode:"Cust-03",clientName:"Client C",totalProjectInvolved:"1",cashFlowStatus:"Positive",cpi:"1.25", totalFees:"500,000.00", totalBudget:"400,000.00", totalCumulativeExpenditure:"280,000.00", totalInvoicedAmount: "350,000.00", totalUnInvoicedAmount:"150,000.00", totalReceivedAmount:"350,000.00"}, + {id: 3,clientCode:"Cust-04",clientName:"Client D",totalProjectInvolved:"4",cashFlowStatus:"Positive",cpi:"1.25", totalFees:"500,000.00", totalBudget:"400,000.00", totalCumulativeExpenditure:"280,000.00", totalInvoicedAmount: "350,000.00", totalUnInvoicedAmount:"150,000.00", totalReceivedAmount:"350,000.00"} + ] + + const [isCardClickedIndex, setIsCardClickedIndex] = React.useState(0); + + const [selectedTeamData, setSelectedTeamData]: any[] = React.useState(rows0); + + const handleCardClick = (r: any) => { + setIsCardClickedIndex(r); + if (r === 0) { + setSelectedTeamData(rows0); + } else if (r === 1) { + setSelectedTeamData(rows1); + } else if (r === 2) { + setSelectedTeamData(rows2); + } + }; + + const columns = [ + { + id: 'clientCode', + field: 'clientCode', + headerName: "Client Code", + flex: 0.7, + }, + { + id: 'clientName', + field: 'clientName', + headerName: "Client Name", + flex: 1, + }, + { + id: 'totalProjectInvolved', + field: 'totalProjectInvolved', + headerName: "Total Project Involved", + flex: 1, + }, + { + id: 'cashFlowStatus', + field: 'cashFlowStatus', + headerName: "Cash Flow Status", + flex: 1, + renderCell: (params:any) => { + if (params.row.cashFlowStatus === "Positive") { + return ( + {params.row.cashFlowStatus} + ) + } else if (params.row.cashFlowStatus === "Negative") { + return ( + {params.row.cashFlowStatus} + ) + } + }, + }, + { + id: 'cpi', + field: 'cpi', + headerName: "CPI", + flex: 0.7, + renderCell: (params:any) => { + if (params.row.cpi >= 1) { + return ( + {params.row.cpi} + ) + } else if (params.row.cpi < 1) { + return ( + {params.row.cpi} + ) + } + }, + }, + { + id: 'totalFees', + field: 'totalFees', + headerName: "Total Fees (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalFees} + ) + }, + }, + { + id: 'totalBudget', + field: 'totalBudget', + headerName: "Total Budget (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalBudget} + ) + }, + }, + { + id: 'totalCumulativeExpenditure', + field: 'totalCumulativeExpenditure', + headerName: "Total Cumulative Expenditure (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalCumulativeExpenditure} + ) + }, + }, + { + id: 'totalInvoicedAmount', + field: 'totalInvoicedAmount', + headerName: "Total Invoiced Amount (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalInvoicedAmount} + ) + }, + }, + { + id: 'totalUnInvoicedAmount', + field: 'totalUnInvoicedAmount', + headerName: "Total Un-invoiced Amount (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalUnInvoicedAmount} + ) + }, + }, + { + id: 'totalReceivedAmount', + field: 'totalReceivedAmount', + headerName: "Total Received Amount (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalReceivedAmount} + ) + }, + }, + + // { + // id: 'projectCode', + // field: 'projectCode', + // headerName: "Project Code", + // flex: 1, + // }, + // { + // id: 'projectName', + // field: 'projectName', + // headerName: "Project Name", + // flex: 1, + // }, + // { + // id: 'team', + // field: 'team', + // headerName: "Team", + // flex: 1, + // }, + // { + // id: 'teamLeader', + // field: 'teamLeader', + // headerName: "Team Leader", + // flex: 1, + // }, + // { + // id: 'startDate', + // field: 'startDate', + // headerName: "Start Date", + // flex: 1, + // }, + // { + // id: 'targetEndDate', + // field: 'targetEndDate', + // headerName: "Target End Date", + // flex: 1, + // }, + // { + // id: 'client', + // field: 'client', + // headerName: "Client", + // flex: 1, + // }, + // { + // id: 'subsidiary', + // field: 'subsidiary', + // headerName: "Subsidiary", + // flex: 1, + // }, +]; + +const columns2 = [ + { + id: 'projectCode', + field: 'projectCode', + headerName: "Project Code", + flex: 0.7, + }, + { + id: 'projectName', + field: 'projectName', + headerName: "Project Name", + flex: 1, + }, + { + id: 'clientName', + field: 'clientName', + headerName: "Client Name", + flex: 1, + }, + { + id: 'cashFlowStatus', + field: 'cashFlowStatus', + headerName: "Cash Flow Status", + flex: 1, + renderCell: (params:any) => { + if (params.row.cashFlowStatus === "Positive") { + return ( + {params.row.cashFlowStatus} + ) + } else if (params.row.cashFlowStatus === "Negative") { + return ( + {params.row.cashFlowStatus} + ) + } + }, + }, + { + id: "cpi", + field: "cpi", + headerName: "CPI", + flex: 0.7, + renderCell: (params: any) => { + if (params.row.cpi >= 1) { + return {params.row.cpi}; + } else if (params.row.cpi < 1) { + return {params.row.cpi}; + } + }, + }, + +{ + id: 'totalFees', + field: 'totalFees', + headerName: "Total Fees (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalFees} + ) + }, +}, +{ + id: 'totalBudget', + field: 'totalBudget', + headerName: "Total Budget (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalBudget} + ) +}, +}, +{ + id: 'totalCumulativeExpenditure', + field: 'totalCumulativeExpenditure', + headerName: "Total Cumulative Expenditure (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalCumulativeExpenditure} + ) + }, +}, +{ + id: 'totalInvoicedAmount', + field: 'totalInvoicedAmount', + headerName: "Total Invoiced Amount (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalInvoicedAmount} + ) + }, +}, +{ + id: 'totalUnInvoicedAmount', + field: 'totalUnInvoicedAmount', + headerName: "Total Un-invoiced Amount (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalUnInvoicedAmount} + ) + }, +}, +{ + id: 'totalReceivedAmount', + field: 'totalReceivedAmount', + headerName: "Total Received Amount (HKD)", + flex: 1, + renderCell: (params:any) => { + return ( + ${params.row.totalReceivedAmount} + ) + }, +}, +]; + + const handleSelectionChange = (newSelectionModel: GridRowSelectionModel) => { + const selectedRowsData = selectedTeamData.filter((row: any) => + newSelectionModel.includes(row.id), + ); + console.log(selectedRowsData); + }; + + return ( + + + +
+ {projectFinancialData.map((record, index) => ( +
handleCardClick(index)}> + +
+ ))} +
+
+ + +
+ {/* */} + +
+
+ + +
+ +
+
+
+ ); +}; + +export default ProjectFinancialSummary; diff --git a/src/components/ProjectFinancialSummary/index.ts b/src/components/ProjectFinancialSummary/index.ts new file mode 100644 index 0000000..724bb4a --- /dev/null +++ b/src/components/ProjectFinancialSummary/index.ts @@ -0,0 +1 @@ +export { default } from "./ProjectFinancialSummary"; diff --git a/src/components/ProjectSearch/ProjectSearch.tsx b/src/components/ProjectSearch/ProjectSearch.tsx new file mode 100644 index 0000000..903f7cc --- /dev/null +++ b/src/components/ProjectSearch/ProjectSearch.tsx @@ -0,0 +1,100 @@ +"use client"; + +import { ProjectResult } from "@/app/api/projects"; +import React, { useCallback, useMemo, useState } from "react"; +import SearchBox, { Criterion } from "../SearchBox"; +import { useTranslation } from "react-i18next"; +import SearchResults, { Column } from "../SearchResults"; +import EditNote from "@mui/icons-material/EditNote"; + +interface Props { + projects: ProjectResult[]; +} + +type SearchQuery = Partial>; +type SearchParamNames = keyof SearchQuery; + +const ProjectSearch: React.FC = ({ projects }) => { + const { t } = useTranslation("projects"); + + // If project searching is done on the server-side, then no need for this. + const [filteredProjects, setFilteredProjects] = useState(projects); + + const searchCriteria: Criterion[] = useMemo( + () => [ + { label: t("Project code"), paramName: "code", type: "text" }, + { label: t("Project name"), paramName: "name", type: "text" }, + { + label: t("Client name"), + paramName: "client", + type: "select", + options: ["Client A", "Client B", "Client C"], + }, + { + label: t("Project category"), + paramName: "category", + type: "select", + options: ["Confirmed Project", "Project to be bidded"], + }, + { + label: t("Team"), + paramName: "team", + type: "select", + options: ["TW", "WY"], + }, + ], + [t], + ); + + const onReset = useCallback(() => { + setFilteredProjects(projects); + }, [projects]); + + const onProjectClick = useCallback((project: ProjectResult) => { + console.log(project); + }, []); + + const columns = useMemo[]>( + () => [ + { + name: "id", + label: t("Details"), + onClick: onProjectClick, + buttonIcon: , + }, + { name: "code", label: t("Project Code") }, + { name: "name", label: t("Project Name") }, + { name: "category", label: t("Project Category") }, + { name: "team", label: t("Team") }, + { name: "client", label: t("Client") }, + ], + [t, onProjectClick], + ); + + return ( + <> + { + setFilteredProjects( + projects.filter( + (p) => + p.code.toLowerCase().includes(query.code.toLowerCase()) && + p.name.toLowerCase().includes(query.name.toLowerCase()) && + (query.client === "All" || p.client === query.client) && + (query.category === "All" || p.category === query.category) && + (query.team === "All" || p.team === query.team), + ), + ); + }} + onReset={onReset} + /> + + items={filteredProjects} + columns={columns} + /> + + ); +}; + +export default ProjectSearch; diff --git a/src/components/ProjectSearch/ProjectSearchLoading.tsx b/src/components/ProjectSearch/ProjectSearchLoading.tsx new file mode 100644 index 0000000..0917c75 --- /dev/null +++ b/src/components/ProjectSearch/ProjectSearchLoading.tsx @@ -0,0 +1,40 @@ +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Skeleton from "@mui/material/Skeleton"; +import Stack from "@mui/material/Stack"; +import React from "react"; + +// Can make this nicer +export const ProjectSearchLoading: React.FC = () => { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default ProjectSearchLoading; diff --git a/src/components/ProjectSearch/ProjectSearchWrapper.tsx b/src/components/ProjectSearch/ProjectSearchWrapper.tsx new file mode 100644 index 0000000..737a1ef --- /dev/null +++ b/src/components/ProjectSearch/ProjectSearchWrapper.tsx @@ -0,0 +1,18 @@ +import { fetchProjects } from "@/app/api/projects"; +import React from "react"; +import ProjectSearch from "./ProjectSearch"; +import ProjectSearchLoading from "./ProjectSearchLoading"; + +interface SubComponents { + Loading: typeof ProjectSearchLoading; +} + +const ProjectSearchWrapper: React.FC & SubComponents = async () => { + const projects = await fetchProjects(); + + return ; +}; + +ProjectSearchWrapper.Loading = ProjectSearchLoading; + +export default ProjectSearchWrapper; diff --git a/src/components/ProjectSearch/index.ts b/src/components/ProjectSearch/index.ts new file mode 100644 index 0000000..bce975d --- /dev/null +++ b/src/components/ProjectSearch/index.ts @@ -0,0 +1 @@ +export { default } from "./ProjectSearchWrapper"; diff --git a/src/components/SearchBox/SearchBox.tsx b/src/components/SearchBox/SearchBox.tsx new file mode 100644 index 0000000..56c9b13 --- /dev/null +++ b/src/components/SearchBox/SearchBox.tsx @@ -0,0 +1,201 @@ +"use client"; + +import Grid from "@mui/material/Grid"; +import Card from "@mui/material/Card"; +import CardContent from "@mui/material/CardContent"; +import Typography from "@mui/material/Typography"; +import React, { useCallback, useMemo, useState } from "react"; +import { useTranslation } from "react-i18next"; +import TextField from "@mui/material/TextField"; +import FormControl from "@mui/material/FormControl"; +import InputLabel from "@mui/material/InputLabel"; +import Select, { SelectChangeEvent } from "@mui/material/Select"; +import MenuItem from "@mui/material/MenuItem"; +import CardActions from "@mui/material/CardActions"; +import Button from "@mui/material/Button"; +import RestartAlt from "@mui/icons-material/RestartAlt"; +import Search from "@mui/icons-material/Search"; +import dayjs from "dayjs"; +import "dayjs/locale/zh-hk"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import { Box } from "@mui/material"; + +interface BaseCriterion { + label: string; + label2?: string; + paramName: T; + paramName2?: T; +} + +interface TextCriterion extends BaseCriterion { + type: "text"; +} + +interface SelectCriterion extends BaseCriterion { + type: "select"; + options: string[]; +} + +interface DateRangeCriterion extends BaseCriterion { + type: "dateRange"; +} + +export type Criterion = + | TextCriterion + | SelectCriterion + | DateRangeCriterion; + +interface Props { + criteria: Criterion[]; + onSearch: (inputs: Record) => void; + onReset?: () => void; +} + +function SearchBox({ + criteria, + onSearch, + onReset, +}: Props) { + const { t } = useTranslation("common"); + const defaultInputs = useMemo( + () => + criteria.reduce>( + (acc, c) => { + return { ...acc, [c.paramName]: c.type === "select" ? "All" : "" }; + }, + {} as Record, + ), + [criteria], + ); + const [inputs, setInputs] = useState(defaultInputs); + + const makeInputChangeHandler = useCallback( + (paramName: T): React.ChangeEventHandler => { + return (e) => { + setInputs((i) => ({ ...i, [paramName]: e.target.value })); + }; + }, + [], + ); + + const makeSelectChangeHandler = useCallback((paramName: T) => { + return (e: SelectChangeEvent) => { + setInputs((i) => ({ ...i, [paramName]: e.target.value })); + }; + }, []); + + const makeDateChangeHandler = useCallback((paramName: T) => { + return (e: any) => { + setInputs((i) => ({ ...i, [paramName]: dayjs(e).format("YYYY-MM-DD") })); + }; + }, []); + + const makeDateToChangeHandler = useCallback((paramName: T) => { + return (e: any) => { + setInputs((i) => ({ + ...i, + [paramName + "To"]: dayjs(e).format("YYYY-MM-DD"), + })); + }; + }, []); + + const handleReset = () => { + setInputs(defaultInputs); + onReset?.(); + }; + + const handleSearch = () => { + onSearch(inputs); + }; + + return ( + + + {t("Search Criteria")} + + {criteria.map((c) => { + return ( + + {c.type === "text" && ( + + )} + {c.type === "select" && ( + + {c.label} + + + )} + {c.type === "dateRange" && ( + + + + + + + {"-"} + + + + + + + )} + + ); + })} + + + + + + + + ); +} + +export default SearchBox; diff --git a/src/components/SearchBox/index.ts b/src/components/SearchBox/index.ts new file mode 100644 index 0000000..c4da6a2 --- /dev/null +++ b/src/components/SearchBox/index.ts @@ -0,0 +1,2 @@ +export { default } from "./SearchBox"; +export type { Criterion } from "./SearchBox"; diff --git a/src/components/SearchResults/SearchResults.tsx b/src/components/SearchResults/SearchResults.tsx new file mode 100644 index 0000000..4c82280 --- /dev/null +++ b/src/components/SearchResults/SearchResults.tsx @@ -0,0 +1,126 @@ +"use client"; + +import React from "react"; +import Paper from "@mui/material/Paper"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TablePagination, { + TablePaginationProps, +} from "@mui/material/TablePagination"; +import TableRow from "@mui/material/TableRow"; +import IconButton from "@mui/material/IconButton"; + +export interface ResultWithId { + id: string | number; +} + +interface BaseColumn { + name: keyof T; + label: string; +} + +interface ColumnWithAction extends BaseColumn { + onClick: (item: T) => void; + buttonIcon: React.ReactNode; +} + +export type Column = + | BaseColumn + | ColumnWithAction; + +interface Props { + items: T[]; + columns: Column[]; + noWrapper?: boolean; +} + +function isActionColumn( + column: Column, +): column is ColumnWithAction { + return Boolean((column as ColumnWithAction).onClick); +} + +function SearchResults({ + items, + columns, + noWrapper, +}: Props) { + const [page, setPage] = React.useState(0); + const [rowsPerPage, setRowsPerPage] = React.useState(10); + + const handleChangePage: TablePaginationProps["onPageChange"] = ( + _event, + newPage, + ) => { + setPage(newPage); + }; + + const handleChangeRowsPerPage: TablePaginationProps["onRowsPerPageChange"] = ( + event, + ) => { + setRowsPerPage(+event.target.value); + setPage(0); + }; + + const table = ( + <> + + + + + {columns.map((column, idx) => ( + + {column.label} + + ))} + + + + {items + .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) + .map((item) => { + return ( + + {columns.map((column, idx) => { + const columnName = column.name; + + return ( + + {isActionColumn(column) ? ( + column.onClick(item)} + > + {column.buttonIcon} + + ) : ( + <>{item[columnName]} + )} + + ); + })} + + ); + })} + +
+
+ + + ); + + return noWrapper ? table : {table}; +} + +export default SearchResults; diff --git a/src/components/SearchResults/index.ts b/src/components/SearchResults/index.ts new file mode 100644 index 0000000..5671101 --- /dev/null +++ b/src/components/SearchResults/index.ts @@ -0,0 +1,2 @@ +export { default } from "./SearchResults"; +export type { Column } from "./SearchResults"; diff --git a/src/components/StaffUtilization/StaffUtilization.tsx b/src/components/StaffUtilization/StaffUtilization.tsx new file mode 100644 index 0000000..81dde4b --- /dev/null +++ b/src/components/StaffUtilization/StaffUtilization.tsx @@ -0,0 +1,1203 @@ +"use client"; +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useState, useEffect, useMemo } from "react"; +import Paper from "@mui/material/Paper"; +import { TFunction } from "i18next"; +import { useTranslation } from "react-i18next"; +import { Card, CardHeader } from "@mui/material"; +import CustomSearchForm from "../CustomSearchForm/CustomSearchForm"; +import CustomDatagrid from "../CustomDatagrid/CustomDatagrid"; +import ReactApexChart from "react-apexcharts"; +import { ApexOptions } from "apexcharts"; +import { GridColDef, GridRowSelectionModel } from "@mui/x-data-grid"; +import ReportProblemIcon from "@mui/icons-material/ReportProblem"; +import dynamic from "next/dynamic"; +import "../../app/global.css"; +import { AnyARecord, AnyCnameRecord } from "dns"; +import SearchBox, { Criterion } from "../SearchBox"; +import ProgressByClientSearch from "@/components/ProgressByClientSearch"; +import { Suspense } from "react"; +import ProgressCashFlowSearch from "@/components/ProgressCashFlowSearch"; +import { Input, Label } from "reactstrap"; +import Select, { components } from "react-select"; +import { DateCalendar } from "@mui/x-date-pickers/DateCalendar"; +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; +import dayjs, { Dayjs } from "dayjs"; +import isBetweenPlugin from "dayjs/plugin/isBetween"; +import { PickersDay, PickersDayProps } from "@mui/x-date-pickers/PickersDay"; +import { styled } from "@mui/material/styles"; + +dayjs.extend(isBetweenPlugin); +interface CustomPickerDayProps extends PickersDayProps { + isSelected: boolean; + isHovered: boolean; +} + +const CustomPickersDay = styled(PickersDay, { + shouldForwardProp: (prop) => prop !== "isSelected" && prop !== "isHovered", +})(({ theme, isSelected, isHovered, day }) => ({ + borderRadius: 0, + ...(isSelected && { + backgroundColor: theme.palette.primary.main, + color: theme.palette.primary.contrastText, + "&:hover, &:focus": { + backgroundColor: theme.palette.primary.main, + }, + }), + ...(isHovered && { + backgroundColor: theme.palette.primary[theme.palette.mode], + "&:hover, &:focus": { + backgroundColor: theme.palette.primary[theme.palette.mode], + }, + }), + ...(day.day() === 0 && { + borderTopLeftRadius: "50%", + borderBottomLeftRadius: "50%", + }), + ...(day.day() === 6 && { + borderTopRightRadius: "50%", + borderBottomRightRadius: "50%", + }), +})) as React.ComponentType; + +const isInSameWeek = (dayA: Dayjs, dayB: Dayjs | null | undefined) => { + if (dayB == null) { + return false; + } + + return dayA.isSame(dayB, "week"); +}; + +function Day( + props: PickersDayProps & { + selectedDay?: Dayjs | null; + hoveredDay?: Dayjs | null; + }, +) { + const { day, selectedDay, hoveredDay, ...other } = props; + + return ( + + ); +} + +const StaffUtilization: React.FC = () => { + const todayDate = new Date(); + const firstDayOfWeek = new Date(); + const lastDayOfWeek = new Date(); + firstDayOfWeek.setDate(todayDate.getDate() - todayDate.getDay() + 1); + lastDayOfWeek.setDate(todayDate.getDate() - todayDate.getDay() + 7); + const firstDayOfMonth = new Date( + todayDate.getFullYear(), + todayDate.getMonth(), + 1, + ); + const lastDayOfMonth = new Date( + todayDate.getFullYear(), + todayDate.getMonth() + 1, + 0, + ); + const [firstDayOfWeekString, setFirstDayOfWeekString] = React.useState( + dayjs(firstDayOfWeek).format("DD MMM YYYY"), + ); + const [lastDayOfWeekString, setLastDayOfWeekString] = React.useState( + dayjs(lastDayOfWeek).format("DD MMM YYYY"), + ); + const [firstDayOfMonthString, setFirstDayOfMonthString] = React.useState( + dayjs(firstDayOfMonth).format("DD MMM YYYY"), + ); + const [lastDayOfMonthString, setLastDayOfMonthString] = React.useState( + dayjs(lastDayOfMonth).format("DD MMM YYYY"), + ); + const [selectionModel, setSelectionModel]: any[] = React.useState([]); + const [manHoursSpentPeriod, setManHoursSpentPeriod]: any[] = React.useState( + firstDayOfWeekString + " to " + lastDayOfWeekString, + ); + const [teamTotalManhoursSpentSelect, setTeamTotalManhoursSpentSelect]: any = + React.useState("Weekly"); + const [staffGradeManhoursSpentSelect, setStaffGradeManhoursSpentSelect]: any = + React.useState("Weekly"); + const [ + individualStaffManhoursSpentSelect, + setIndividualStaffManhoursSpentSelect, + ]: any = React.useState("Daily"); + const weekDates: any[] = []; + const monthDates: any[] = []; + const currentDate = dayjs(); + const sixMonthsAgo = currentDate.subtract(6, "month"); + for (let i = 0; i < 7; i++) { + const currentDate = new Date(firstDayOfWeek); + currentDate.setDate(firstDayOfWeek.getDate() + i); + const formattedDate = dayjs(currentDate).format("DD MMM (ddd)"); + weekDates.push(formattedDate); + } + for ( + let date = sixMonthsAgo.clone(); + date.isBefore(currentDate, "month"); + date = date.add(1, "month") + ) { + monthDates.push(date.format("MM-YYYY")); + } + monthDates.push(currentDate.format("MM-YYYY")); + // for (let i = firstDayOfMonth.getDate(); i <= lastDayOfMonth.getDate(); i++) { + // const currentDate = new Date(todayDate.getFullYear(), todayDate.getMonth(), i); + // const formattedDate = dayjs(currentDate).format('DD MMM'); + // monthDates.push(formattedDate); + // } + const [teamTotalManhoursSpentPeriod, setTeamTotalManhoursSpentPeriod]: any[] = + React.useState(weekDates); + const [ + teamTotalManhoursByStaffGrade, + setTeamTotalManhoursByStaffGrade, + ]: any[] = React.useState(weekDates); + const [ + individualStaffManhoursSpentPeriod, + setIndividualStaffManhoursSpentPeriod, + ]: any[] = React.useState(weekDates); + const [ + teamTotalManhoursSpentPlanData, + setTeamTotalManhoursSpentPlanData, + ]: any[] = React.useState([42, 42, 42, 42, 42, 0, 0]); + const [ + teamTotalManhoursSpentActualData, + setTeamTotalManhoursSpentActualData, + ]: any[] = React.useState([45, 42, 60, 42, 58, 0, 0]); + const [hoveredDay, setHoveredDay] = React.useState(null); + const [value, setValue] = React.useState(dayjs()); + const [weeklyValueByStaffGrade, setWeeklyValueByStaffGrade] = + React.useState(dayjs()); + const [weeklyValueByIndividualStaff, setWeeklyValueByIndividualStaff] = + React.useState(dayjs()); + const [staffGradeManhoursSpentValue, setStaffGradeManhoursSpentValue] = + React.useState(dayjs()); + const [totalManHoursMonthlyFromValue, setTotalManHoursMonthlyFromValue] = + React.useState(dayjs(new Date()).subtract(6, "month")); + const [totalManHoursMonthlyToValue, setTotalManHoursMonthlyToValue] = + React.useState(dayjs()); + const [ + totalManHoursByStaffGradeMonthlyFromValue, + setTotalManHoursByStaffGradeMonthlyFromValue, + ] = React.useState(dayjs(new Date()).subtract(6, "month")); + const [ + totalManHoursByStaffGradeMonthlyToValue, + setTotalManHoursByStaffGradeMonthlyToValue, + ] = React.useState(dayjs()); + const [ + totalManHoursByIndividualStaffMonthlyFromValue, + setTotalManHoursByIndividualStaffMonthlyFromValue, + ] = React.useState(dayjs(new Date()).subtract(6, "month")); + const [ + totalManHoursByIndividualStaffMonthlyToValue, + setTotalManHoursByIndividualStaffMonthlyToValue, + ] = React.useState(dayjs()); + const [ + totalManHoursByIndividualStaffDailyFromValue, + setTotalManHoursByIndividualStaffDailyFromValue, + ] = React.useState(dayjs(new Date()).subtract(6, "day")); + const [ + totalManHoursByIndividualStaffDailyToValue, + setTotalManHoursByIndividualStaffDailyToValue, + ] = React.useState(dayjs()); + const [totalManHoursMaxValue, setTotalManHoursMaxValue] = React.useState(75); + + const teamOptions = [ + { value: 1, label: "XXX Team" }, + { value: 2, label: "YYY Team" }, + { value: 3, label: "ZZZ Team" }, + ]; + + const columns = [ + { + id: "projectCode", + field: "projectCode", + headerName: "Project Code", + flex: 1, + }, + { + id: "projectName", + field: "projectName", + headerName: "Project Name", + flex: 1, + }, + { + id: "team", + field: "team", + headerName: "Team", + flex: 1, + }, + { + id: "teamLeader", + field: "teamLeader", + headerName: "Team Leader", + flex: 1, + }, + { + id: "startDate", + field: "startDate", + headerName: "Start Date", + flex: 1, + }, + { + id: "targetEndDate", + field: "targetEndDate", + headerName: "Target End Date", + flex: 1, + }, + { + id: "client", + field: "client", + headerName: "Client", + flex: 1, + }, + { + id: "subsidiary", + field: "subsidiary", + headerName: "Subsidiary", + flex: 1, + }, + ]; + + const options: ApexOptions = { + chart: { + height: 350, + type: "line", + }, + stroke: { + width: [2, 2], + }, + plotOptions: { + bar: { + horizontal: false, + distributed: false, + }, + }, + dataLabels: { + enabled: true, + }, + xaxis: { + categories: teamTotalManhoursSpentPeriod, + }, + yaxis: [ + { + title: { + text: "Team Total Manhours Spent (Hour)", + }, + min: 0, + max: totalManHoursMaxValue, + tickAmount: 5, + }, + ], + grid: { + borderColor: "#f1f1f1", + }, + annotations: {}, + series: [ + { + name: "Planned", + type: "line", + color: "#efbe7d", + data: teamTotalManhoursSpentPlanData, + }, + { + name: "Actual", + type: "line", + color: "#7cd3f2", + data: teamTotalManhoursSpentActualData, + }, + ], + }; + + const staffGradeOptions: ApexOptions = { + chart: { + height: 350, + type: "line", + }, + stroke: { + width: [2, 2], + }, + plotOptions: { + bar: { + horizontal: true, + distributed: false, + }, + }, + dataLabels: { + enabled: true, + }, + xaxis: { + categories: [ + "Grade 1: A. QS / QS Trainee", + "Grade 2: QS", + "Grade 3: Senior QS", + "Grade 4: Manager", + "Grade 5: Director", + ], + }, + yaxis: [ + { + title: { + text: "Staff Grade", + }, + min: 0, + max: 60, + tickAmount: 5, + }, + ], + grid: { + borderColor: "#f1f1f1", + }, + annotations: {}, + series: [ + { + name: "Planned", + type: "bar", + color: "#efbe7d", + data: [35, 45, 35, 20, 10], + }, + { + name: "Actual", + type: "bar", + color: "#00acb1", + data: [25, 26, 33, 20, 11], + }, + ], + }; + + const individualStaffOptions: ApexOptions = { + chart: { + height: 350, + type: "line", + }, + stroke: { + width: [1], + }, + plotOptions: { + bar: { + horizontal: true, + distributed: false, + }, + }, + dataLabels: { + enabled: true, + }, + xaxis: { + categories: [ + "Consultancy Project 123 (CUST-001, Subsidiary A)", + "Consultancy Project 456 (CUST-001, Subsidiary A)", + "Construction Project A (CUST-001, Subsidiary A)", + "Construction Project B (CUST-001, Subsidiary A)", + "Construction Project C (CUST-001, Subsidiary A)", + ], + }, + yaxis: [ + { + title: { + text: "Project", + }, + min: 0, + max: 12, + tickAmount: 5, + }, + ], + grid: { + borderColor: "#f1f1f1", + }, + annotations: {}, + series: [ + { + name: "Manhours(Hour)", + type: "bar", + color: "#00acb1", + data: [12, 12, 11, 12, 0], + }, + ], + }; + + const teamTotalManhoursSpentOnClick = (r: any) => { + setTeamTotalManhoursSpentSelect(r); + if (r === "Weekly") { + setValue(dayjs(new Date())); + setTeamTotalManhoursSpentPeriod(weekDates); + setTeamTotalManhoursSpentPlanData([42, 42, 42, 42, 42, 0, 0]); + setTeamTotalManhoursSpentActualData([45, 42, 60, 42, 58, 0, 0]); + setTotalManHoursMaxValue(75); + } else if (r === "Monthly") { + setTeamTotalManhoursSpentPeriod(monthDates); + setTeamTotalManhoursSpentPlanData([840, 840, 840, 840, 840, 840]); + setTeamTotalManhoursSpentActualData([900, 840, 1200, 840, 1160, 840]); + setTotalManHoursMaxValue(1250); + } + }; + + const individualStaffManhoursSpentOnClick = (r: any) => { + setIndividualStaffManhoursSpentSelect(r); + // if (r === "Weekly") { + // setValue(dayjs(new Date)) + // setTeamTotalManhoursSpentPeriod(weekDates) + // setTeamTotalManhoursSpentPlanData([42,42,42,42,42,0,0]) + // setTeamTotalManhoursSpentActualData([45,42,60,42,58,0,0]) + // setTotalManHoursMaxValue(75) + // } else if (r === "Monthly") { + // setTeamTotalManhoursSpentPeriod(monthDates) + // setTeamTotalManhoursSpentPlanData([840,840,840,840,840,840]) + // setTeamTotalManhoursSpentActualData([900,840,1200,840,1160,840]) + // setTotalManHoursMaxValue(1250) + // } + }; + + const selectWeeklyPeriod = (r: any) => { + const selectDate = new Date(r); + const firstDayOfWeek = new Date(); + firstDayOfWeek.setDate(selectDate.getDate() - selectDate.getDay() + 0); + const weekDates: any[] = []; + for (let i = 0; i < 7; i++) { + const currentDate = new Date(firstDayOfWeek); + currentDate.setDate(firstDayOfWeek.getDate() + i); + const formattedDate = dayjs(currentDate).format("DD MMM (ddd)"); + weekDates.push(formattedDate); + } + setTeamTotalManhoursSpentPeriod(weekDates); + setValue(dayjs(firstDayOfWeek)); + }; + + const selectWeeklyPeriodByStaffGrade = (r: any) => { + const selectDate = new Date(r); + const firstDayOfWeek = new Date(); + firstDayOfWeek.setDate(selectDate.getDate() - selectDate.getDay() + 0); + const weekDates: any[] = []; + for (let i = 0; i < 7; i++) { + const currentDate = new Date(firstDayOfWeek); + currentDate.setDate(firstDayOfWeek.getDate() + i); + const formattedDate = dayjs(currentDate).format("DD MMM (ddd)"); + weekDates.push(formattedDate); + } + setTeamTotalManhoursByStaffGrade(weekDates); + setWeeklyValueByStaffGrade(dayjs(firstDayOfWeek)); + }; + + const selectWeeklyPeriodIndividualStaff = (r: any) => { + const selectDate = new Date(r); + const firstDayOfWeek = new Date(); + firstDayOfWeek.setDate(selectDate.getDate() - selectDate.getDay() + 0); + const weekDates: any[] = []; + for (let i = 0; i < 7; i++) { + const currentDate = new Date(firstDayOfWeek); + currentDate.setDate(firstDayOfWeek.getDate() + i); + const formattedDate = dayjs(currentDate).format("DD MMM (ddd)"); + weekDates.push(formattedDate); + } + setIndividualStaffManhoursSpentPeriod(weekDates); + setWeeklyValueByIndividualStaff(dayjs(firstDayOfWeek)); + }; + + const selectMonthlyPeriodFrom = (r: any) => { + const monthDates: any[] = []; + const monthPlanData: any[] = []; + const monthActualData: any[] = []; + const selectFromDate = dayjs(r); + for ( + let date = selectFromDate.clone(); + date.isBefore(totalManHoursMonthlyToValue, "month"); + date = date.add(1, "month") + ) { + monthDates.push(date.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + } + monthDates.push(totalManHoursMonthlyToValue.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + setTeamTotalManhoursSpentPlanData(monthPlanData); + setTeamTotalManhoursSpentActualData(monthActualData); + setTeamTotalManhoursSpentPeriod(monthDates); + }; + + const selectMonthlyPeriodTo = (r: any) => { + const monthDates: any[] = []; + const monthPlanData: any[] = []; + const monthActualData: any[] = []; + const selectToDate = dayjs(r); + for ( + let date = totalManHoursMonthlyFromValue.clone(); + date.isBefore(selectToDate, "month"); + date = date.add(1, "month") + ) { + monthDates.push(date.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + } + monthDates.push(selectToDate.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + setTeamTotalManhoursSpentPlanData(monthPlanData); + setTeamTotalManhoursSpentActualData(monthActualData); + setTeamTotalManhoursSpentPeriod(monthDates); + }; + + const selectStaffGradeMonthlyPeriodFrom = (r: any) => { + const monthDates: any[] = []; + const monthPlanData: any[] = []; + const monthActualData: any[] = []; + const selectFromDate = dayjs(r); + for ( + let date = selectFromDate.clone(); + date.isBefore(totalManHoursMonthlyToValue, "month"); + date = date.add(1, "month") + ) { + monthDates.push(date.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + } + monthDates.push(totalManHoursMonthlyToValue.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + // setTeamTotalManhoursSpentPlanData(monthPlanData) + // setTeamTotalManhoursSpentActualData(monthActualData) + setTeamTotalManhoursByStaffGrade(weekDates); + }; + + const selectStaffGradeMonthlyPeriodTo = (r: any) => { + const monthDates: any[] = []; + const monthPlanData: any[] = []; + const monthActualData: any[] = []; + const selectToDate = dayjs(r); + for ( + let date = totalManHoursMonthlyFromValue.clone(); + date.isBefore(selectToDate, "month"); + date = date.add(1, "month") + ) { + monthDates.push(date.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + } + monthDates.push(selectToDate.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + // setTeamTotalManhoursSpentPlanData(monthPlanData) + // setTeamTotalManhoursSpentActualData(monthActualData) + setTeamTotalManhoursByStaffGrade(weekDates); + }; + + const selectIndividualStaffMonthlyPeriodFrom = (r: any) => { + const monthDates: any[] = []; + const monthPlanData: any[] = []; + const monthActualData: any[] = []; + const selectFromDate = dayjs(r); + for ( + let date = selectFromDate.clone(); + date.isBefore(totalManHoursMonthlyToValue, "month"); + date = date.add(1, "month") + ) { + monthDates.push(date.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + } + monthDates.push(totalManHoursMonthlyToValue.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + // setTeamTotalManhoursSpentPlanData(monthPlanData) + // setTeamTotalManhoursSpentActualData(monthActualData) + setIndividualStaffManhoursSpentPeriod(weekDates); + }; + + const selectIndividualStaffMonthlyPeriodTo = (r: any) => { + const monthDates: any[] = []; + const monthPlanData: any[] = []; + const monthActualData: any[] = []; + const selectToDate = dayjs(r); + for ( + let date = totalManHoursMonthlyFromValue.clone(); + date.isBefore(selectToDate, "month"); + date = date.add(1, "month") + ) { + monthDates.push(date.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + } + monthDates.push(selectToDate.format("MM-YYYY")); + monthPlanData.push(840); + monthActualData.push(Math.floor(Math.random() * (1200 - 840) + 840)); + // setTeamTotalManhoursSpentPlanData(monthPlanData) + // setTeamTotalManhoursSpentActualData(monthActualData) + setIndividualStaffManhoursSpentPeriod(weekDates); + }; + + const options2: ApexOptions = { + chart: { + type: "donut", + }, + colors: ['#f57f90','#94f7d6','#87c5f5','#ab95f5','#ab95f5'], + plotOptions: { + pie: { + donut: { + labels: { + show: true, + name: { + show: true, + }, + value: { + show: false, + fontWeight: 500, + fontSize: "30px", + color: "#3e98c7", + }, + total: { + show: false, + showAlways: true, + label: "Spent", + fontFamily: "sans-serif", + formatter: function (val) { + return val + "%"; + }, + }, + }, + }, + }, + }, + series:[23.5,25.5,25.5,25.5], + labels: ["Consultancy Project 123","Consultancy Project ABC","Consultancy Project A","Consultancy Project B"], + legend: { + show: false, + }, + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 200, + }, + legend: { + position: "bottom", + show: false, + }, + }, + }, + ], + }; + + return ( + <> + +
+
+ + + +
+
+ {teamTotalManhoursSpentSelect === "Weekly" && ( + <> + + + + )} + {teamTotalManhoursSpentSelect === "Monthly" && ( + <> + + + + )} +
+
+
+ +
+
+ */} +
+
+ +
+
+
+
+
+
+ + + + +
+
+ {individualStaffManhoursSpentSelect === "Daily" && ( + <> + + + + + )} + {individualStaffManhoursSpentSelect === "Weekly" && ( + <> + + + + + )} + {individualStaffManhoursSpentSelect === "Monthly" && ( + <> + + + + + )} +
+
+
+ +
+
+ { + return ( + + {values.toSorted(compareFn).map((value) => ( + + {sortMap[value].label} + + ))} + + ); + }} + MenuProps={{ + slotProps: { + paper: { + sx: { maxHeight: 400 }, + }, + }, + anchorOrigin: { + vertical: "top", + horizontal: "left", + }, + transformOrigin: { + vertical: "top", + horizontal: "left", + }, + }} + > + + + + + + + {allItemsLabel} + {`${selectedItems.length}/${allItems.length} selected`} + + + + + {groups.flatMap((group) => { + const groupItems = groupedItems[group.id]; + if (!groupItems) return null; + + return [ + + {group.name} + , + ...groupItems.map((item) => { + return ( + + + + {item.label} + + + ); + }), + ]; + })} + + + + ); +}; + +export default MultiSelectList; diff --git a/src/components/TransferList/TransferList.tsx b/src/components/TransferList/TransferList.tsx new file mode 100644 index 0000000..c6ca4fb --- /dev/null +++ b/src/components/TransferList/TransferList.tsx @@ -0,0 +1,260 @@ +"use client"; + +import * as React from "react"; +import List from "@mui/material/List"; +import ListItem from "@mui/material/ListItem"; +import ListItemText from "@mui/material/ListItemText"; +import ListItemIcon from "@mui/material/ListItemIcon"; +import Checkbox from "@mui/material/Checkbox"; +import IconButton from "@mui/material/Fab"; +import Divider from "@mui/material/Divider"; +import ChevronLeft from "@mui/icons-material/ChevronLeft"; +import ChevronRight from "@mui/icons-material/ChevronRight"; +import intersection from "lodash/intersection"; +import differenceBy from "lodash/differenceBy"; +import Stack from "@mui/material/Stack"; +import Paper from "@mui/material/Paper"; +import Typography from "@mui/material/Typography"; +import ListSubheader from "@mui/material/ListSubheader"; +import groupBy from "lodash/groupBy"; +import uniqBy from "lodash/uniqBy"; +import { useTranslation } from "react-i18next"; + +export interface LabelGroup { + id: number; + name: string; +} + +export interface LabelWithId { + id: number; + label: string; + group?: LabelGroup; +} + +export interface TransferListProps { + allItems: LabelWithId[]; + initiallySelectedItems: LabelWithId[]; + onChange: (selectedItems: LabelWithId[]) => void; + allItemsLabel: string; + selectedItemsLabel: string; +} + +interface ItemListProps { + items: LabelWithId[]; + checkedItems: LabelWithId[]; + label: string; + handleToggleAll: ( + items: LabelWithId[], + checkedItems: LabelWithId[], + ) => React.MouseEventHandler; + handleToggle: (item: LabelWithId) => React.MouseEventHandler; +} + +const ItemList: React.FC = ({ + items, + checkedItems, + label, + handleToggle, + handleToggleAll, +}) => { + const { t } = useTranslation(); + const groups: LabelGroup[] = uniqBy( + [ + ...items.reduce((acc, item) => { + return item.group ? [...acc, item.group] : acc; + }, []), + // Items with no group + { id: 0, name: t("Ungrouped") }, + ], + "id", + ); + const groupedItems = groupBy(items, (item) => item.group?.id ?? 0); + + return ( + + + + + + + + {label} + {`${checkedItems.length}/${items.length} selected`} + + + + + } + > + {groups.map((group) => { + const groupItems = groupedItems[group.id]; + if (!groupItems) return null; + + return ( + + + {group.name} + + {groupItems.map((item) => { + return ( + + + + + + + ); + })} + + ); + })} + + + ); +}; + +const TransferList: React.FC = ({ + allItems, + initiallySelectedItems, + allItemsLabel, + selectedItemsLabel, + onChange, +}) => { + // Keep a map for the original order of items + const sortMap = React.useMemo(() => { + return allItems.reduce<{ [id: string]: number }>( + (acc, item, index) => ({ ...acc, [item.id]: index }), + {}, + ); + }, [allItems]); + const compareFn = React.useCallback( + (a: LabelWithId, b: LabelWithId) => sortMap[a.id] - sortMap[b.id], + [sortMap], + ); + + const [checkedList, setCheckedList] = React.useState([]); + const [leftList, setLeftList] = React.useState( + differenceBy(allItems, initiallySelectedItems, "id"), + ); + const [rightList, setRightList] = React.useState( + initiallySelectedItems, + ); + + const leftListChecked = intersection(checkedList, leftList); + const rightListChecked = intersection(checkedList, rightList); + + const handleToggle = React.useCallback( + (value: LabelWithId) => () => { + const isChecked = checkedList.includes(value); + const newCheckedList = isChecked + ? differenceBy(checkedList, [value], "id") + : [...checkedList, value]; + + setCheckedList(newCheckedList); + }, + [checkedList], + ); + + const handleToggleAll = React.useCallback( + (items: LabelWithId[], checkedItems: LabelWithId[]) => () => { + if (checkedItems.length === items.length) { + setCheckedList(differenceBy(checkedList, checkedItems, "id")); + } else { + setCheckedList([...checkedList, ...items]); + } + }, + [checkedList], + ); + + const handleCheckedRight = () => { + setRightList([...rightList, ...leftListChecked].sort(compareFn)); + setLeftList(differenceBy(leftList, leftListChecked, "id").sort(compareFn)); + setCheckedList(differenceBy(checkedList, leftListChecked, "id")); + }; + + const handleCheckedLeft = () => { + setLeftList([...leftList, ...rightListChecked].sort(compareFn)); + setRightList( + differenceBy(rightList, rightListChecked, "id").sort(compareFn), + ); + setCheckedList(differenceBy(checkedList, rightListChecked, "id")); + }; + + React.useEffect(() => { + onChange(rightList); + }, [onChange, rightList]); + + return ( + + + + + + + + + + + + + ); +}; + +export default TransferList; diff --git a/src/components/TransferList/TransferListWrapper.tsx b/src/components/TransferList/TransferListWrapper.tsx new file mode 100644 index 0000000..4668c47 --- /dev/null +++ b/src/components/TransferList/TransferListWrapper.tsx @@ -0,0 +1,15 @@ +"use client"; + +import React from "react"; +import TransferList, { TransferListProps } from "./TransferList"; +import { useMediaQuery, useTheme } from "@mui/material"; +import MultiSelectList from "./MultiSelectList"; + +const TransferListWrapper: React.FC = (props) => { + const theme = useTheme(); + const matches = useMediaQuery(theme.breakpoints.up("sm")); + + return matches ? : ; +}; + +export default TransferListWrapper; diff --git a/src/components/TransferList/index.ts b/src/components/TransferList/index.ts new file mode 100644 index 0000000..24888b4 --- /dev/null +++ b/src/components/TransferList/index.ts @@ -0,0 +1 @@ +export { default } from "./TransferListWrapper"; diff --git a/src/components/UserWorkspacePage/ProjectGrid.tsx b/src/components/UserWorkspacePage/ProjectGrid.tsx new file mode 100644 index 0000000..8cc37d5 --- /dev/null +++ b/src/components/UserWorkspacePage/ProjectGrid.tsx @@ -0,0 +1,100 @@ +"use client"; +import * as React from "react"; +import Grid from "@mui/material/Grid"; +import { useEffect } from "react"; +import { Card, CardContent, CardHeader } from "@mui/material"; +import CustomCardGrid from "../CustomCardGrid/CustomCardGrid"; +import "../../app/global.css"; +import { PROJECT_CARD_STYLE } from "@/theme/colorConst"; + +interface ProjectGridProps { + tab: number; +} + +const cards = [ + { + code: "M1001 (C)", + name: "Consultancy Project A", + hr_spent: 12.75, + hr_spent_normal: 0.0, + hr_alloc: 150.0, + hr_alloc_normal: 30.0, + }, + { + code: "M1301 (C)", + name: "Consultancy Project AAA", + hr_spent: 4.25, + hr_spent_normal: 0.25, + hr_alloc: 30.0, + hr_alloc_normal: 0.0, + }, + { + code: "M1354 (C)", + name: "Consultancy Project BBB", + hr_spent: 57.0, + hr_spent_normal: 6.5, + hr_alloc: 100.0, + hr_alloc_normal: 20.0, + }, + { + code: "M1973 (C)", + name: "Construction Project CCC", + hr_spent: 12.75, + hr_spent_normal: 0.0, + hr_alloc: 150.0, + hr_alloc_normal: 30.0, + }, + { + code: "M2014 (T)", + name: "Consultancy Project DDD", + hr_spent: 1.0, + hr_spent_normal: 0.0, + hr_alloc: 10.0, + hr_alloc_normal: 0.0, + }, +]; + +const ProjectGrid: React.FC = (props) => { + const [items, setItems] = React.useState([]); + + useEffect(() => { + if (props.tab == 0) { + setItems(cards); + } else { + const filteredItems = cards; //cards.filter(item => (item.track == props.tab)); + setItems(filteredItems); + } + }, [props.tab]); + + const cardLayout = (item: Record) => { + return ( + + + +

Hours Spent: {item.hr_spent}

+

Normal (Others): {item.hr_spent_normal}

+

Hours Allocated: {item.hr_alloc}

+

Normal (Others): {item.hr_alloc_normal}

+
+
+ ); + }; + // Apply the preset style to the cards in child, if not specified // + return ( + + {/* */} + {/* item count = {items?.length??"idk"} , track/tab = {props.tab} */} + + {/* */} + + ); +}; + +export default ProjectGrid; diff --git a/src/components/UserWorkspacePage/UserWorkspacePage.tsx b/src/components/UserWorkspacePage/UserWorkspacePage.tsx new file mode 100644 index 0000000..8fdb1cf --- /dev/null +++ b/src/components/UserWorkspacePage/UserWorkspacePage.tsx @@ -0,0 +1,81 @@ +"use client"; +import Grid from "@mui/material/Grid"; +import Paper from "@mui/material/Paper"; +import { useState } from "react"; +import { useTranslation } from "react-i18next"; +import AssignedProjectGrid from "../AssignedProjectGrid/AssignedProjectGrid"; +import PageTitle from "../PageTitle/PageTitle"; +import { Suspense } from "react"; +import Button from "@mui/material/Button"; +import Stack from "@mui/material/Stack"; +import { Add } from "@mui/icons-material"; +import Link from "next/link"; +import { t } from "i18next"; +import { Modal } from "@mui/material"; +import CustomModal from "../CustomModal/CustomModal"; +import EnterTimesheetModal from "../EnterTimesheet/EnterTimesheetModal"; +import EnterLeaveModal from "../EnterLeave/EnterLeaveModal"; + +const UserWorkspacePage: React.FC = () => { + const [isTimeheetModalVisible, setTimeheetModalVisible] = useState(false); + const [isLeaveModalVisible, setLeaveModalVisible] = useState(false); + const { t } = useTranslation("home"); + + const handleAddTimesheetButtonClick = () => { + setTimeheetModalVisible(true); + }; + + const handleCloseTimesheetModal = () => { + setTimeheetModalVisible(false); + }; + + const handleAddLeaveButtonClick = () => { + setLeaveModalVisible(true); + }; + + const handleCloseLeaveModal = () => { + setLeaveModalVisible(false); + }; + + return ( + + + +
+ + + + + {/*fallback={}>*/} +
+ + + +
+
+ ); +}; + +export default UserWorkspacePage; diff --git a/src/components/UserWorkspacePage/index.ts b/src/components/UserWorkspacePage/index.ts new file mode 100644 index 0000000..ec65d8f --- /dev/null +++ b/src/components/UserWorkspacePage/index.ts @@ -0,0 +1 @@ +export { default } from "./UserWorkspacePage"; diff --git a/src/config/api.ts b/src/config/api.ts new file mode 100644 index 0000000..376fd05 --- /dev/null +++ b/src/config/api.ts @@ -0,0 +1,2 @@ +export const BASE_API_URL = `${process.env.API_URL}`; +export const LOGIN_API_PATH = `${BASE_API_URL}/login`; diff --git a/src/config/authConfig.ts b/src/config/authConfig.ts new file mode 100644 index 0000000..e0c2860 --- /dev/null +++ b/src/config/authConfig.ts @@ -0,0 +1,58 @@ +import { AuthOptions, Session } from "next-auth"; +import CredentialsProvider from "next-auth/providers/credentials"; +import { LOGIN_API_PATH } from "./api"; + +export interface SessionWithTokens extends Session { + accessToken?: string; + refreshToken?: string; +} + +export const authOptions: AuthOptions = { + debug: process.env.NODE_ENV === "development", + providers: [ + CredentialsProvider({ + id: "credentials", + name: "Credentials", + credentials: { + username: { label: "Username", type: "text" }, + password: { label: "Password", type: "password" }, + }, + async authorize(credentials, req) { + const res = await fetch(LOGIN_API_PATH, { + method: "POST", + body: JSON.stringify(credentials), + headers: { "Content-Type": "application/json" }, + }); + + const user = await res.json(); + + if (res.ok && user) { + return user; + } + return null; + }, + }), + ], + pages: { + signIn: "/login", + }, + callbacks: { + jwt(params) { + // Add the data from user to the token + const { token, user } = params; + const newToken = { ...token, ...user }; + + return newToken; + }, + session({ session, token }) { + const sessionWithToken: SessionWithTokens = { + ...session, + // Add the data from the token to the session + accessToken: token.accessToken as string | undefined, + refreshToken: token.refreshToken as string | undefined, + }; + + return sessionWithToken; + }, + }, +}; diff --git a/src/config/uiConfig.ts b/src/config/uiConfig.ts new file mode 100644 index 0000000..f9d60b3 --- /dev/null +++ b/src/config/uiConfig.ts @@ -0,0 +1 @@ +export const NAVIGATION_CONTENT_WIDTH = "20rem"; diff --git a/src/i18n/I18nClientProvider.tsx b/src/i18n/I18nClientProvider.tsx new file mode 100644 index 0000000..0d2c13a --- /dev/null +++ b/src/i18n/I18nClientProvider.tsx @@ -0,0 +1,43 @@ +"use client"; + +import { createInstance, i18n } from "i18next"; +import React, { useMemo } from "react"; +import { I18nextProvider } from "react-i18next"; + +interface Props { + children: React.ReactNode; + language: string; + resources: { [ns: string]: any }; + namespaces: string[]; +} + +export const I18nContext = React.createContext(null); + +const I18nProvider: React.FC = ({ + children, + language, + resources, + namespaces, +}) => { + const i18n = useMemo(() => { + const instance = createInstance(); + instance.init({ + resources: { + [language]: resources, + }, + fallbackLng: language, + interpolation: { + escapeValue: false, + }, + ns: namespaces, + }); + return instance as i18n; + // No need to check dependencies since this + // should only be created once from the server + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return {children}; +}; + +export default I18nProvider; diff --git a/src/i18n/en/common.json b/src/i18n/en/common.json new file mode 100644 index 0000000..2b2f3a3 --- /dev/null +++ b/src/i18n/en/common.json @@ -0,0 +1,3 @@ +{ + "Grade {{grade}}": "Grade {{grade}}" +} \ No newline at end of file diff --git a/src/i18n/en/dashboard.json b/src/i18n/en/dashboard.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/en/dashboard.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/i18n/en/login.json b/src/i18n/en/login.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/en/login.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/i18n/en/projects.json b/src/i18n/en/projects.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/en/projects.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/i18n/index.tsx b/src/i18n/index.tsx new file mode 100644 index 0000000..b404524 --- /dev/null +++ b/src/i18n/index.tsx @@ -0,0 +1,92 @@ +import { cookies, headers } from "next/headers"; +import { createInstance, i18n, LanguageDetectorAsyncModule } from "i18next"; +import resourcesToBackend from "i18next-resources-to-backend"; +import { getServerSession } from "next-auth"; +import { authOptions } from "@/config/authConfig"; +import I18nClientProvider from "./I18nClientProvider"; +import universalLanguageDetect from "@unly/universal-language-detector"; + +const FALLBACK_LANG = "en"; +const SUPPORTED_LANGUAGES = ["en", "zh"]; + +export const detectLanguage = async (): Promise => { + // Logic to get language preference from cookies/headers/session + const cookiesList = cookies(); + const cookiesObj = cookiesList + .getAll() + .reduce<{ [name: string]: string }>( + (acc, cookie) => ({ ...acc, [cookie.name]: cookie.value }), + {}, + ); + const headersList = headers(); + const session = await getServerSession(authOptions); + + const lang = universalLanguageDetect({ + supportedLanguages: SUPPORTED_LANGUAGES, + fallbackLanguage: FALLBACK_LANG, + acceptLanguageHeader: headersList.get("accept-language") || undefined, + serverCookies: cookiesObj, + }); + + return lang; +}; + +const languageDetector: LanguageDetectorAsyncModule = { + type: "languageDetector", + detect: detectLanguage, + async: true, +}; + +const initI18next = async (namespaces: string[]): Promise => { + const i18nInstance = createInstance(); + await i18nInstance + .use(languageDetector) + .use( + resourcesToBackend((language: string, namespace: string) => { + return import(`./${language}/${namespace}.json`); + }), + ) + .init({ + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, + ns: namespaces, + }); + return i18nInstance as i18n; +}; + +export const getServerI18n = async (...namespaces: string[]) => { + return initI18next(namespaces); +}; + +interface Props { + children: React.ReactNode; + namespaces: string[]; +} + +// Provides the resources for the client +export const I18nProvider: React.FC = async ({ + children, + namespaces, +}) => { + const i18n = await getServerI18n(...namespaces); + const language = i18n.language; + const resources = namespaces.reduce<{ [ns: string]: any }>( + (acc, ns) => ({ + ...acc, + [ns]: i18n.getResourceBundle(language, ns), + }), + {}, + ); + + return ( + + {children} + + ); +}; diff --git a/src/i18n/zh/common.json b/src/i18n/zh/common.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/zh/common.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/i18n/zh/dashboard.json b/src/i18n/zh/dashboard.json new file mode 100644 index 0000000..d80cb57 --- /dev/null +++ b/src/i18n/zh/dashboard.json @@ -0,0 +1,3 @@ +{ + "Dashboard": "儀表板" +} \ No newline at end of file diff --git a/src/i18n/zh/login.json b/src/i18n/zh/login.json new file mode 100644 index 0000000..da69471 --- /dev/null +++ b/src/i18n/zh/login.json @@ -0,0 +1,10 @@ +{ + "Invalid username or password.": "帳號或密碼錯誤。", + "Something went wrong. Please try again later.": "出了些問題。請稍後再試。", + "Username": "帳號", + "Password": "密碼", + "Please enter a username": "請輸入帳號", + "Please enter a password": "請輸入密碼", + "Login": "登入", + "Sign In": "登入" +} \ No newline at end of file diff --git a/src/i18n/zh/projects.json b/src/i18n/zh/projects.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/i18n/zh/projects.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..85204dd --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,39 @@ +import { NextRequestWithAuth, withAuth } from "next-auth/middleware"; +import { authOptions } from "@/config/authConfig"; +import { NextFetchEvent, NextResponse } from "next/server"; + +const PRIVATE_ROUTES = [ + "/analytics", + "/dashboard", + "/home", + "/invoice", + "/projects", + "/tasks", + "/settings", + "/staffReimbursement", +]; +const LANG_QUERY_PARAM = "lang"; + +const authMiddleware = withAuth({ + pages: authOptions.pages, +}); + +export default async function middleware( + req: NextRequestWithAuth, + event: NextFetchEvent, +) { + const langPref = req.nextUrl.searchParams.get(LANG_QUERY_PARAM); + if (langPref) { + // Redirect to same url without the lang query param + set cookies + const newUrl = new URL(req.nextUrl); + newUrl.searchParams.delete(LANG_QUERY_PARAM); + const response = NextResponse.redirect(newUrl); + response.cookies.set("i18next", langPref); + return response; + } + + // Matcher for using the auth middleware + return PRIVATE_ROUTES.some((route) => req.nextUrl.pathname.startsWith(route)) + ? await authMiddleware(req, event) // Let auth middleware handle response + : NextResponse.next(); // Return normal response +} diff --git a/src/theme.ts b/src/theme.ts new file mode 100644 index 0000000..12ce360 --- /dev/null +++ b/src/theme.ts @@ -0,0 +1,11 @@ +import { createTheme } from "@mui/material/styles"; + +const theme = createTheme({ + palette: { + background: { + default: "#fcfcfc", + }, + }, +}); + +export default theme; diff --git a/src/theme/EmotionCache.tsx b/src/theme/EmotionCache.tsx new file mode 100644 index 0000000..8f13bef --- /dev/null +++ b/src/theme/EmotionCache.tsx @@ -0,0 +1,100 @@ +"use client"; +import * as React from "react"; +import createCache from "@emotion/cache"; +import { useServerInsertedHTML } from "next/navigation"; +import { CacheProvider as DefaultCacheProvider } from "@emotion/react"; +import type { + EmotionCache, + Options as OptionsOfCreateCache, +} from "@emotion/cache"; + +// Copied from https://github.com/mui/material-ui/blob/master/examples/material-ui-nextjs-ts/src/components/ThemeRegistry/EmotionCache.tsx +export type NextAppDirEmotionCacheProviderProps = { + /** This is the options passed to createCache() from 'import createCache from "@emotion/cache"' */ + options: Omit; + /** By default from 'import { CacheProvider } from "@emotion/react"' */ + CacheProvider?: (props: { + value: EmotionCache; + children: React.ReactNode; + }) => React.JSX.Element | null; + children: React.ReactNode; +}; + +// Adapted from https://github.com/garronej/tss-react/blob/main/src/next/appDir.tsx +export default function NextAppDirEmotionCacheProvider( + props: NextAppDirEmotionCacheProviderProps, +) { + const { options, CacheProvider = DefaultCacheProvider, children } = props; + + const [registry] = React.useState(() => { + const cache = createCache(options); + cache.compat = true; + const prevInsert = cache.insert; + let inserted: { name: string; isGlobal: boolean }[] = []; + cache.insert = (...args) => { + const [selector, serialized] = args; + if (cache.inserted[serialized.name] === undefined) { + inserted.push({ + name: serialized.name, + isGlobal: !selector, + }); + } + return prevInsert(...args); + }; + const flush = () => { + const prevInserted = inserted; + inserted = []; + return prevInserted; + }; + return { cache, flush }; + }); + + useServerInsertedHTML(() => { + const inserted = registry.flush(); + if (inserted.length === 0) { + return null; + } + let styles = ""; + let dataEmotionAttribute = registry.cache.key; + + const globals: { + name: string; + style: string; + }[] = []; + + inserted.forEach(({ name, isGlobal }) => { + const style = registry.cache.inserted[name]; + + if (typeof style !== "boolean") { + if (isGlobal) { + globals.push({ name, style }); + } else { + styles += style; + dataEmotionAttribute += ` ${name}`; + } + } + }); + + return ( + + {globals.map(({ name, style }) => ( +