From 9d13121a85272a360752ab691ab28dfc2e6a4d64 Mon Sep 17 00:00:00 2001 From: Jun-Hyeok Sin Date: Thu, 19 Oct 2023 19:34:36 +0900 Subject: [PATCH] Release v.1.3.0 (#811) Release v.1.3.0 (#811) --- .../com/votogether/VotogetherApplication.java | 2 + .../controller/AlarmCommandController.java | 35 + .../AlarmCommandControllerDocs.java | 51 + .../controller/AlarmQueryController.java | 56 + .../controller/AlarmQueryControllerDocs.java | 77 + .../alarm/dto/event/PostAlarmEvent.java | 13 + .../dto/response/PostAlarmDetailResponse.java | 26 + .../alarm/dto/response/PostAlarmResponse.java | 33 + .../response/ReportActionAlarmResponse.java | 28 + .../dto/response/ReportActionResponse.java | 44 + .../votogether/domain/alarm/entity/Alarm.java | 90 + .../alarm/entity/ReportActionAlarm.java | 77 + .../alarm/entity/vo/AlarmActionType.java | 20 + .../domain/alarm/entity/vo/AlarmType.java | 9 + .../alarm/exception/AlarmExceptionType.java | 23 + .../alarm/repository/AlarmRepository.java | 19 + .../ReportActionAlarmRepository.java | 20 + .../alarm/service/AlarmCommandService.java | 28 + .../alarm/service/AlarmEventListener.java | 34 + .../alarm/service/AlarmQueryService.java | 57 + .../service/strategy/AlarmReadStrategy.java | 9 + .../strategy/AlarmReadStrategyProvider.java | 26 + .../strategy/ContentAlarmReadStrategy.java | 26 + .../strategy/ReportAlarmReadStrategy.java | 26 + .../auth/exception/AuthExceptionType.java | 8 +- .../domain/auth/service/AuthService.java | 2 +- .../exception/CategoryExceptionType.java | 21 + .../category/service/CategoryService.java | 11 +- .../member/controller/MemberController.java | 6 + .../controller/MemberControllerDocs.java | 14 +- .../dto/response/MemberInfoResponse.java | 11 +- .../domain/member/entity/Member.java | 28 +- .../domain/member/entity/MemberMetric.java | 81 + .../domain/member/entity/vo/Roles.java | 7 + .../member/exception/MemberExceptionType.java | 4 +- .../MemberMetricCustomRepository.java | 10 + .../MemberMetricCustomRepositoryImpl.java | 28 + .../repository/MemberMetricRepository.java | 24 + .../domain/member/service/MemberService.java | 94 +- .../controller/NoticeCommandController.java | 55 + .../NoticeCommandControllerDocs.java | 108 + .../controller/NoticeQueryController.java | 47 + .../controller/NoticeQueryControllerDocs.java | 61 + .../notice/dto/request/NoticeRequest.java | 31 + .../dto/response/NoticePageResponse.java | 29 + .../notice/dto/response/NoticeResponse.java | 50 + .../domain/notice/entity/Notice.java | 89 + .../domain/notice/entity/vo/BannerTitle.java | 43 + .../domain/notice/entity/vo/Detail.java | 50 + .../notice/exception/NoticeExceptionType.java | 26 + .../notice/repository/NoticeRepository.java | 19 + .../notice/service/NoticeCommandService.java | 48 + .../notice/service/NoticeQueryService.java | 50 + .../controller/PostCommandController.java | 2 +- .../post/PostOptionVoteResultResponse.java | 3 + .../post/dto/response/post/PostResponse.java | 10 +- .../response/post/PostSummaryResponse.java | 10 +- .../response/post/PostVoteResultResponse.java | 13 +- .../votogether/domain/post/entity/Post.java | 26 +- .../domain/post/entity/PostOption.java | 15 +- .../post/repository/CommentRepository.java | 2 +- .../post/repository/PostCustomRepository.java | 4 + .../repository/PostCustomRepositoryImpl.java | 72 +- .../post/repository/PostOptionRepository.java | 6 + .../post/repository/PostRepository.java | 14 +- .../repository/dto/PostCommentCountDto.java | 13 + .../post/service/PostCommandService.java | 31 + .../post/service/PostCommentService.java | 22 +- .../domain/post/service/PostGuestService.java | 25 +- .../domain/post/service/PostQueryService.java | 55 +- .../ranking/dto/response/RankingResponse.java | 17 +- .../ranking/entity/PassionRankings.java | 59 - .../ranking/entity/vo/PassionRecord.java | 23 - .../ranking/service/RankingService.java | 65 +- ...ller.java => ReportCommandController.java} | 9 +- .../ReportCommandControllerDocs.java | 24 + .../controller/ReportQueryController.java | 28 + .../controller/ReportQueryControllerDocs.java | 33 + .../domain/report/dto/ReportAggregateDto.java | 13 + .../dto/request/ReportActionRequest.java | 17 + .../dto/response/ReportPageResponse.java | 30 + .../report/dto/response/ReportResponse.java | 40 + .../report/exception/ReportExceptionType.java | 3 +- .../repository/ReportCustomRepository.java | 18 + .../ReportCustomRepositoryImpl.java | 69 + .../report/repository/ReportRepository.java | 4 +- .../report/service/ReportCommandService.java | 49 +- .../report/service/ReportQueryService.java | 50 + .../strategy/ReportActionProvider.java | 28 + .../strategy/ReportCommentStrategy.java | 38 +- .../strategy/ReportNicknameStrategy.java | 48 +- .../service/strategy/ReportPostStrategy.java | 36 +- .../service/strategy/ReportStrategy.java | 6 +- .../vote/repository/VoteRepository.java | 87 +- .../domain/vote/service/VoteService.java | 40 +- .../global/config/WebMvcConfig.java | 7 + .../global/jwt/JwtAuthenticationFilter.java | 3 +- .../votogether/global/jwt/TokenProcessor.java | 17 +- backend/src/main/resources/application.yml | 4 + .../AlarmCommandControllerTest.java | 104 + .../controller/AlarmQueryControllerTest.java | 132 + .../domain/alarm/entity/AlarmTest.java | 80 + .../alarm/entity/ReportActionAlarmTest.java | 57 + .../alarm/entity/vo/AlarmActionTypeTest.java | 44 + .../ReportActionAlarmRepositoryTest.java | 105 + .../service/AlarmCommandServiceTest.java | 92 + .../alarm/service/AlarmEventListenerTest.java | 56 + .../alarm/service/AlarmQueryServiceTest.java | 178 + .../category/service/CategoryServiceTest.java | 3 +- .../controller/MemberControllerTest.java | 29 +- .../domain/member/entity/MemberTest.java | 52 +- .../member/entity/PassionRankingsTest.java | 85 - .../member/service/MemberServiceTest.java | 286 +- .../NoticeCommandControllerTest.java | 337 + .../controller/NoticeQueryControllerTest.java | 196 + .../repository/NoticeRepositoryTest.java | 172 + .../service/NoticeCommandServiceTest.java | 290 + .../service/NoticeQueryServiceTest.java | 158 + .../repository/CommentRepositoryTest.java | 2 +- .../PostCustomRepositoryImplTest.java | 21 + .../post/repository/PostRepositoryTest.java | 40 - .../post/service/PostCommandServiceTest.java | 13 + .../post/service/PostGuestServiceTest.java | 40 +- .../post/service/PostQueryServiceTest.java | 101 +- .../ranking/service/RankingServiceTest.java | 43 +- .../ReportCommandControllerTest.java | 98 +- .../controller/ReportQueryControllerTest.java | 124 + .../ReportCustomRepositoryImplTest.java | 136 + .../repository/ReportRepositoryTest.java | 4 + .../service/ReportCommandServiceTest.java | 335 +- .../service/ReportQueryServiceTest.java | 70 + .../strategy/ReportCommentStrategyTest.java | 118 +- .../strategy/ReportNicknameStrategyTest.java | 95 +- .../strategy/ReportPostStrategyTest.java | 119 +- .../vote/repository/VoteRepositoryTest.java | 25 - .../service/VoteServiceConcurrentTest.java | 215 + .../domain/vote/service/VoteServiceTest.java | 155 + .../global/jwt/TokenProcessorTest.java | 34 +- .../com/votogether/test/RepositoryTest.java | 12 +- .../java/com/votogether/test/ServiceTest.java | 12 +- .../test/fixtures/MemberFixtures.java | 57 +- .../test/persister/AlarmTestPersister.java | 73 + .../persister/MemberMetricTestPersister.java | 58 + .../test/persister/MemberTestPersister.java | 16 + .../test/persister/PostTestPersister.java | 14 + .../ReportActionAlarmTestPersister.java | 66 + backend/src/test/resources/application.yml | 4 + backend/src/test/resources/truncate.sql | 16 + frontend/__test__/api/notice.test.ts | 80 + frontend/__test__/api/user.test.ts | 16 +- frontend/__test__/convertTextToUrl.test.ts | 36 + .../query/notice/useBannerNotice.test.tsx | 24 + .../query/notice/useCreateNotice.test.tsx | 40 + .../query/notice/useDeleteNotice.test.tsx | 30 + .../query/notice/useModifyNotice.test.tsx | 40 + .../query/notice/useNoticeDetail.test.tsx | 26 + .../query/notice/usePagedNoticeList.test.tsx | 59 + .../notice/useStackedNoticeList.test.tsx | 42 + .../__test__/hooks/usePagination.test.tsx | 131 + frontend/package-lock.json | 42865 ++++++++-------- frontend/package.json | 1 + frontend/public/icons/og-image.png | Bin 0 -> 11359 bytes frontend/public/index.html | 4 +- frontend/src/App.tsx | 22 +- frontend/src/api/alarm.ts | 94 + frontend/src/api/notice.ts | 74 + frontend/src/api/report.ts | 46 +- frontend/src/api/userInfo.ts | 10 +- frontend/src/assets/bell.png | Bin 0 -> 12738 bytes frontend/src/assets/dangseon-yo.png | Bin 0 -> 23840 bytes frontend/src/assets/dangseon.png | Bin 0 -> 26688 bytes frontend/src/assets/first-rank.webp | Bin 1174 -> 0 bytes frontend/src/assets/ranking-first.webp | Bin 0 -> 3626 bytes frontend/src/assets/ranking-second.webp | Bin 0 -> 3626 bytes frontend/src/assets/ranking-third.webp | Bin 0 -> 3654 bytes frontend/src/assets/second-rank.webp | Bin 1106 -> 0 bytes frontend/src/assets/third-rank.webp | Bin 1082 -> 0 bytes .../AlarmContainer/AlarmContainer.stories.tsx | 24 + .../AlarmContainer/ContentAlarmList/index.tsx | 82 + .../components/AlarmContainer/ListStyle.ts | 53 + .../AlarmContainer/ReportAlarmList/index.tsx | 75 + .../src/components/AlarmContainer/constant.ts | 5 + .../src/components/AlarmContainer/index.tsx | 49 + .../src/components/AlarmContainer/style.ts | 26 + .../PostForm/CategoryWrapper/index.tsx | 3 + frontend/src/components/PostForm/index.tsx | 179 +- frontend/src/components/PostForm/style.ts | 57 +- .../ReportModal/ReportModal.stories.tsx | 3 + frontend/src/components/ReportModal/index.tsx | 38 +- frontend/src/components/ReportModal/style.ts | 5 + .../src/components/ToastContainer/index.tsx | 20 + .../src/components/ToastContainer/style.ts | 30 + .../CommentItem/CommentItem.stories.tsx | 4 +- .../CommentMenu/CommentMenu.stories.tsx | 20 - .../CommentItem/CommentMenu/index.tsx | 32 - .../CommentItem/CommentMenu/style.ts | 45 - .../comment/CommentList/CommentItem/index.tsx | 87 +- .../CommentList/CommentTextForm/index.tsx | 62 +- .../CommentList/CommentTextForm/style.ts | 18 +- .../comment/CommentList/constants.ts | 31 - .../components/comment/CommentList/index.tsx | 6 +- .../components/comment/CommentList/style.ts | 7 + .../components/comment/CommentList/types.ts | 13 - .../common/Accordion/Accordion.stories.tsx | 47 +- .../ActiveContainer.stories.tsx | 33 + .../common/ActiveContainer/index.tsx | 17 + .../common/ActiveContainer/style.ts | 17 + .../AppInstallPrompt/BookMarkPrompt/style.ts | 2 +- .../common/AppInstallPrompt/index.tsx | 4 +- .../src/components/common/Banner/style.ts | 4 +- .../common/Dashboard/CategorySection/style.ts | 4 +- .../common/Dashboard/CategoryToggle/index.tsx | 36 +- .../common/Dashboard/GuestProfile/index.tsx | 12 +- .../common/Dashboard/GuestProfile/style.ts | 2 +- .../UserProfile/UserProfile.stories.tsx | 2 + .../common/Dashboard/UserProfile/index.tsx | 14 +- .../src/components/common/Dashboard/index.tsx | 8 + .../common/Dashboard/profileStyle.ts | 2 +- .../src/components/common/Dashboard/style.ts | 24 +- .../components/common/DeleteModal/index.tsx | 47 +- .../components/common/DeleteModal/style.ts | 10 +- .../common/Drawer/Drawer.stories.tsx | 4 +- .../src/components/common/Drawer/index.tsx | 5 +- .../common/ErrorItem/ErrorItem.stories.tsx | 40 + .../src/components/common/ErrorItem/index.tsx | 61 + .../src/components/common/ErrorItem/style.ts | 47 + .../ErrorMessage/ErrorMessage.stories.tsx | 14 - .../components/common/ErrorMessage/index.tsx | 43 - .../components/common/ErrorMessage/style.ts | 112 - .../common/IconButton/IconButton.stories.tsx | 4 +- .../components/common/IconButton/index.tsx | 10 +- .../src/components/common/IconButton/style.ts | 7 +- .../ImageZoomModal/ImageZoomModal.stories.tsx | 68 + .../common/ImageZoomModal/index.tsx | 36 + .../components/common/ImageZoomModal/style.ts | 71 + .../components/common/LogoButton/index.tsx | 18 +- .../components/common/Menu/Menu.stories.tsx | 42 + .../common/{PostMenu => Menu}/index.tsx | 13 +- .../common/{PostMenu => Menu}/style.ts | 4 +- frontend/src/components/common/Menu/types.ts | 5 + .../common/MobileLayoutTemplate/index.tsx | 29 + .../common/MobileLayoutTemplate/style.ts | 11 + .../components/common/Modal/Modal.stories.tsx | 144 +- .../src/components/common/Modal/index.tsx | 54 +- frontend/src/components/common/Modal/style.ts | 52 +- .../components/common/MultiSelect/index.tsx | 13 +- .../NarrowMainHeader.stories.tsx | 4 +- .../common/NarrowMainHeader/index.tsx | 21 +- .../common/NarrowMainHeader/style.ts | 1 + .../common/PostMenu/PostMenu.stories.tsx | 22 - .../src/components/common/Skeleton/style.ts | 2 + .../common/TimePickerOptionList/style.ts | 2 +- .../components/common/Toast/Toast.stories.tsx | 133 +- .../src/components/common/Toast/index.tsx | 24 +- frontend/src/components/common/Toast/style.ts | 23 +- .../components/common/ToastNSnackBarStyle.ts | 2 +- .../components/common/ToggleSwitch/style.ts | 2 +- .../common/ToolTip/ToolTip.stories.tsx | 41 + .../src/components/common/ToolTip/index.tsx | 20 + .../src/components/common/ToolTip/style.ts | 51 + .../common/TwoButtonModal/index.tsx | 63 - .../components/common/TwoButtonModal/style.ts | 65 - .../src/components/common/UpButton/index.tsx | 24 +- .../src/components/common/UpButton/style.ts | 28 + .../components/common/WideHeader/index.tsx | 49 +- .../src/components/common/WideHeader/style.ts | 23 + .../AdminNoticeEdit.stories.tsx | 14 + .../notice/AdminNoticeEdit/index.tsx | 36 + .../AdminNoticeTableFetcher.stories.tsx | 14 + .../notice/AdminNoticeTableFetcher/index.tsx | 89 + .../notice/AdminNoticeTableFetcher/style.ts | 30 + .../components/notice/BannerFetcher/index.tsx | 26 + .../notice/BannerSkeleton/index.tsx | 5 + .../components/notice/BannerSkeleton/style.ts | 15 + .../NoticeDetail/NoticeDetail.stories.tsx | 16 + .../components/notice/NoticeDetail/index.tsx | 47 + .../notice/NoticeDetail}/style.ts | 73 +- .../notice/NoticeDetailFetcher/index.tsx | 16 + .../components/notice/NoticeForm/constant.ts | 4 + .../components/notice/NoticeForm/index.tsx | 108 + .../src/components/notice/NoticeForm/style.ts | 43 + .../NoticeItem/NoticeItem.stories.tsx | 17 + .../notice/NoticeList/NoticeItem/index.tsx | 19 + .../notice/NoticeList/NoticeItem/style.ts | 56 + .../notice/NoticeList/NoticeList.stories.tsx | 21 + .../components/notice/NoticeList/index.tsx | 18 + .../src/components/notice/NoticeList/style.ts | 16 + .../notice/NoticeListFetcher/index.tsx | 42 + .../notice/NoticeListFetcher/style.ts | 8 + .../WrittenVoteOption/index.tsx | 8 +- .../WrittenVoteOption/style.ts | 7 +- .../WrittenVoteOptionList/index.tsx | 5 + frontend/src/components/post/Post/index.tsx | 93 +- frontend/src/components/post/Post/style.ts | 34 +- .../src/components/post/PostList/style.ts | 1 + frontend/src/constants/animation.ts | 4 +- frontend/src/constants/api.ts | 1 + frontend/src/constants/cookie.ts | 2 + frontend/src/constants/path.ts | 9 +- frontend/src/constants/policyMessage.ts | 16 +- frontend/src/constants/post.ts | 32 + frontend/src/constants/queryKey.ts | 5 + frontend/src/constants/report.ts | 11 + frontend/src/hooks/context/toast.tsx | 50 + frontend/src/hooks/index.tsx | 23 +- .../hooks/query/alarm/useContentAlarmList.ts | 26 + .../src/hooks/query/alarm/useReadAlarm.ts | 21 + .../hooks/query/alarm/useReportAlarmList.ts | 26 + .../category/useCategoryFavoriteToggle.ts | 33 +- .../hooks/query/comment/useCreateComment.ts | 13 +- .../hooks/query/comment/useDeleteComment.ts | 29 +- .../src/hooks/query/comment/useEditComment.ts | 13 +- .../hooks/query/notice/useBannerNotice.tsx | 28 + .../hooks/query/notice/useCreateNotice.tsx | 34 + .../hooks/query/notice/useDeleteNotice.tsx | 32 + .../hooks/query/notice/useModifyNotice.tsx | 35 + .../hooks/query/notice/useNoticeDetail.tsx | 27 + .../hooks/query/notice/usePagedNoticeList.tsx | 55 + .../query/notice/useStackedNoticeList.tsx | 33 + .../src/hooks/query/post/useCreatePost.ts | 30 +- .../src/hooks/query/post/useCreateVote.ts | 12 +- .../src/hooks/query/post/useDeletePost.ts | 14 +- .../src/hooks/query/post/useEarlyClosePost.ts | 11 +- frontend/src/hooks/query/post/useEditPost.ts | 13 +- frontend/src/hooks/query/post/useEditVote.ts | 13 +- .../src/hooks/query/post/usePostDetail.ts | 8 + .../report/usePendingReportActionList.ts | 33 + .../src/hooks/query/report/useReportAction.ts | 30 + .../hooks/query/report/useReportContent.ts | 30 + .../hooks/query/useReportApproveResult.tsx | 28 + .../src/hooks/query/user/useModifyUser.ts | 18 +- .../hooks/query/user/useReadLatestAlarm.ts | 18 + .../src/hooks/query/user/useUpdateUserInfo.ts | 10 +- frontend/src/hooks/query/user/useUserInfo.ts | 2 - .../query/user/useWithdrawalMembership.ts | 10 +- frontend/src/hooks/useBannerToggle.ts | 32 + frontend/src/hooks/useDialog.tsx | 32 + frontend/src/hooks/useImageZoomModal.ts | 23 + frontend/src/hooks/useMultiSelect.ts | 8 +- frontend/src/hooks/usePagination.ts | 52 + frontend/src/hooks/useText.ts | 6 +- frontend/src/hooks/useToast.ts | 32 - frontend/src/index.tsx | 1 + frontend/src/mocks/alarm.ts | 13 + frontend/src/mocks/handlers.ts | 6 + frontend/src/mocks/mockData/alarm.ts | 83 + frontend/src/mocks/mockData/comment.ts | 2 +- frontend/src/mocks/mockData/notice.ts | 81 + frontend/src/mocks/mockData/report.ts | 29 + .../src/mocks/mockData/reportApproveResult.ts | 9 + frontend/src/mocks/mockData/user.ts | 12 + frontend/src/mocks/notice.ts | 41 + frontend/src/mocks/report.ts | 8 + frontend/src/mocks/reportApproveResult.ts | 9 + frontend/src/mocks/userInfo.ts | 4 +- frontend/src/pages/AnnouncementPage/index.tsx | 67 - frontend/src/pages/ErrorBoundary.tsx | 10 +- .../src/pages/ErrorBoundaryForTopClass.tsx | 48 +- .../pages/ErrorBoundaryWithNarrowHeader.tsx | 38 + frontend/src/pages/EventMascot/index.tsx | 21 + frontend/src/pages/EventMascot/style.ts | 22 + frontend/src/pages/HomePage/index.tsx | 78 +- frontend/src/pages/HomePage/style.ts | 4 +- .../MyInfoPage/DeleteMemberModal/index.tsx | 54 +- .../MyInfoPage/DeleteMemberModal/style.ts | 4 +- frontend/src/pages/MyInfoPage/index.tsx | 77 +- frontend/src/pages/MyInfoPage/style.ts | 43 +- frontend/src/pages/NoRenderErrorBoundary.tsx | 38 + .../pages/RankingPage/PageContent/index.tsx | 6 +- .../PassionUser/UserRanking/index.tsx | 2 +- .../pages/RankingPage/PassionUser/index.tsx | 14 +- .../pages/RankingPage/PassionUser/style.ts | 31 +- .../pages/RankingPage/PopularPost/index.tsx | 17 +- .../pages/RankingPage/PopularPost/style.ts | 24 +- .../pages/RankingPage/RankingTableStyle.ts | 30 +- frontend/src/pages/RankingPage/style.ts | 8 +- .../ReportTargetPost/index.tsx | 9 + .../ReportApproveResult/index.tsx | 55 + .../ReportApproveResult/style.ts | 47 + frontend/src/pages/ReportAlarmPage/index.tsx | 26 + frontend/src/pages/ReportAlarmPage/style.ts | 36 + .../OptionStatistics/index.tsx | 2 +- .../src/pages/VoteStatisticsPage/index.tsx | 2 +- .../src/pages/VoteStatisticsPage/style.ts | 2 +- .../PendingReportPage.stories.tsx | 14 + .../pages/admin/PendingReportPage/index.tsx | 116 + .../pages/admin/PendingReportPage/stlye.ts | 90 + .../NoticeAdminPage.stories.tsx | 14 + .../admin/notices/NoticeAdminPage/index.tsx | 26 + .../admin/notices/NoticeAdminPage/style.ts | 25 + .../NoticeEditPage/NoticeEditPage.stories.tsx | 14 + .../admin/notices/NoticeEditPage/index.tsx | 16 + .../NoticeWritePage.stories.tsx | 14 + .../admin/notices/NoticeWritePage/index.tsx | 38 + .../auth/LoginPage/MobileLogin/index.tsx | 4 +- .../pages/auth/LoginPage/MobileLogin/style.ts | 5 + .../NoticeDetailPage.stories.tsx | 14 + .../pages/notice/NoticeDetailPage/index.tsx | 24 + .../pages/notice/NoticeDetailPage/style.ts | 15 + .../NoticeListPage/NoticeListPage.stories.tsx | 14 + .../src/pages/notice/NoticeListPage/index.tsx | 24 + .../src/pages/notice/NoticeListPage/style.ts | 18 + .../src/pages/post/CreatePostPage/index.tsx | 43 +- .../post/EditPostPage/EditPost/index.tsx | 25 +- .../src/pages/post/EditPostPage/index.tsx | 25 +- frontend/src/pages/post/EditPostPage/style.ts | 23 - .../PostDetailPage/BottomButtonPart/index.tsx | 13 +- .../InnerHeaderPart.stories.tsx | 1 + .../PostDetailPage/InnerHeaderPart/index.tsx | 39 +- .../post/PostDetailPage/PostDetail/index.tsx | 92 +- .../PostDetailFallback/index.tsx | 13 - .../PostDetailFallback/style.ts | 27 - .../src/pages/post/PostDetailPage/index.tsx | 21 +- .../user/RegisterPersonalInfoPage/index.tsx | 35 +- frontend/src/routes/PrivateRoute.tsx | 28 +- frontend/src/routes/router.tsx | 84 +- frontend/src/styles/globalStyle.ts | 13 +- frontend/src/styles/reset.ts | 7 + frontend/src/styles/theme.ts | 3 +- frontend/src/types/alarm.ts | 1 + frontend/src/types/menu.ts | 19 +- frontend/src/types/notice.ts | 23 + frontend/src/types/report.ts | 25 +- frontend/src/types/time.ts | 12 +- frontend/src/types/user.ts | 2 + frontend/src/utils/cookie.ts | 2 +- frontend/src/utils/fetch.ts | 184 +- frontend/src/utils/login/silentLogin.ts | 2 +- frontend/src/utils/post/addTimeToDate.ts | 4 +- .../src/utils/post/convertTextToElement.tsx | 12 +- frontend/src/utils/post/convertTextToUrl.ts | 29 + 431 files changed, 34744 insertions(+), 23615 deletions(-) create mode 100644 backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandController.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandControllerDocs.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryController.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryControllerDocs.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/dto/event/PostAlarmEvent.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmDetailResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionAlarmResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/entity/Alarm.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/entity/ReportActionAlarm.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmActionType.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmType.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/exception/AlarmExceptionType.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/repository/AlarmRepository.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepository.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/service/AlarmCommandService.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/service/AlarmEventListener.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/service/AlarmQueryService.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategy.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategyProvider.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/service/strategy/ContentAlarmReadStrategy.java create mode 100644 backend/src/main/java/com/votogether/domain/alarm/service/strategy/ReportAlarmReadStrategy.java create mode 100644 backend/src/main/java/com/votogether/domain/category/exception/CategoryExceptionType.java create mode 100644 backend/src/main/java/com/votogether/domain/member/entity/MemberMetric.java create mode 100644 backend/src/main/java/com/votogether/domain/member/entity/vo/Roles.java create mode 100644 backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepository.java create mode 100644 backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepositoryImpl.java create mode 100644 backend/src/main/java/com/votogether/domain/member/repository/MemberMetricRepository.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandController.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandControllerDocs.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryController.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryControllerDocs.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/dto/request/NoticeRequest.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/dto/response/NoticePageResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/dto/response/NoticeResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/entity/Notice.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/entity/vo/BannerTitle.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/entity/vo/Detail.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/exception/NoticeExceptionType.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/repository/NoticeRepository.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/service/NoticeCommandService.java create mode 100644 backend/src/main/java/com/votogether/domain/notice/service/NoticeQueryService.java create mode 100644 backend/src/main/java/com/votogether/domain/post/repository/dto/PostCommentCountDto.java delete mode 100644 backend/src/main/java/com/votogether/domain/ranking/entity/PassionRankings.java delete mode 100644 backend/src/main/java/com/votogether/domain/ranking/entity/vo/PassionRecord.java rename backend/src/main/java/com/votogether/domain/report/controller/{ReportCommandCommandController.java => ReportCommandController.java} (70%) create mode 100644 backend/src/main/java/com/votogether/domain/report/controller/ReportQueryController.java create mode 100644 backend/src/main/java/com/votogether/domain/report/controller/ReportQueryControllerDocs.java create mode 100644 backend/src/main/java/com/votogether/domain/report/dto/ReportAggregateDto.java create mode 100644 backend/src/main/java/com/votogether/domain/report/dto/request/ReportActionRequest.java create mode 100644 backend/src/main/java/com/votogether/domain/report/dto/response/ReportPageResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/report/dto/response/ReportResponse.java create mode 100644 backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepository.java create mode 100644 backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepositoryImpl.java create mode 100644 backend/src/main/java/com/votogether/domain/report/service/ReportQueryService.java create mode 100644 backend/src/main/java/com/votogether/domain/report/service/strategy/ReportActionProvider.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/controller/AlarmCommandControllerTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/controller/AlarmQueryControllerTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/entity/AlarmTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/entity/ReportActionAlarmTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/entity/vo/AlarmActionTypeTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepositoryTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/service/AlarmCommandServiceTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/service/AlarmEventListenerTest.java create mode 100644 backend/src/test/java/com/votogether/domain/alarm/service/AlarmQueryServiceTest.java delete mode 100644 backend/src/test/java/com/votogether/domain/member/entity/PassionRankingsTest.java create mode 100644 backend/src/test/java/com/votogether/domain/notice/controller/NoticeCommandControllerTest.java create mode 100644 backend/src/test/java/com/votogether/domain/notice/controller/NoticeQueryControllerTest.java create mode 100644 backend/src/test/java/com/votogether/domain/notice/repository/NoticeRepositoryTest.java create mode 100644 backend/src/test/java/com/votogether/domain/notice/service/NoticeCommandServiceTest.java create mode 100644 backend/src/test/java/com/votogether/domain/notice/service/NoticeQueryServiceTest.java create mode 100644 backend/src/test/java/com/votogether/domain/report/controller/ReportQueryControllerTest.java create mode 100644 backend/src/test/java/com/votogether/domain/report/repository/ReportCustomRepositoryImplTest.java create mode 100644 backend/src/test/java/com/votogether/domain/report/service/ReportQueryServiceTest.java create mode 100644 backend/src/test/java/com/votogether/domain/vote/service/VoteServiceConcurrentTest.java create mode 100644 backend/src/test/java/com/votogether/domain/vote/service/VoteServiceTest.java create mode 100644 backend/src/test/java/com/votogether/test/persister/AlarmTestPersister.java create mode 100644 backend/src/test/java/com/votogether/test/persister/MemberMetricTestPersister.java create mode 100644 backend/src/test/java/com/votogether/test/persister/ReportActionAlarmTestPersister.java create mode 100644 backend/src/test/resources/truncate.sql create mode 100644 frontend/__test__/api/notice.test.ts create mode 100644 frontend/__test__/convertTextToUrl.test.ts create mode 100644 frontend/__test__/hooks/query/notice/useBannerNotice.test.tsx create mode 100644 frontend/__test__/hooks/query/notice/useCreateNotice.test.tsx create mode 100644 frontend/__test__/hooks/query/notice/useDeleteNotice.test.tsx create mode 100644 frontend/__test__/hooks/query/notice/useModifyNotice.test.tsx create mode 100644 frontend/__test__/hooks/query/notice/useNoticeDetail.test.tsx create mode 100644 frontend/__test__/hooks/query/notice/usePagedNoticeList.test.tsx create mode 100644 frontend/__test__/hooks/query/notice/useStackedNoticeList.test.tsx create mode 100644 frontend/__test__/hooks/usePagination.test.tsx create mode 100644 frontend/public/icons/og-image.png create mode 100644 frontend/src/api/alarm.ts create mode 100644 frontend/src/api/notice.ts create mode 100644 frontend/src/assets/bell.png create mode 100644 frontend/src/assets/dangseon-yo.png create mode 100644 frontend/src/assets/dangseon.png delete mode 100644 frontend/src/assets/first-rank.webp create mode 100644 frontend/src/assets/ranking-first.webp create mode 100644 frontend/src/assets/ranking-second.webp create mode 100644 frontend/src/assets/ranking-third.webp delete mode 100644 frontend/src/assets/second-rank.webp delete mode 100644 frontend/src/assets/third-rank.webp create mode 100644 frontend/src/components/AlarmContainer/AlarmContainer.stories.tsx create mode 100644 frontend/src/components/AlarmContainer/ContentAlarmList/index.tsx create mode 100644 frontend/src/components/AlarmContainer/ListStyle.ts create mode 100644 frontend/src/components/AlarmContainer/ReportAlarmList/index.tsx create mode 100644 frontend/src/components/AlarmContainer/constant.ts create mode 100644 frontend/src/components/AlarmContainer/index.tsx create mode 100644 frontend/src/components/AlarmContainer/style.ts create mode 100644 frontend/src/components/ReportModal/style.ts create mode 100644 frontend/src/components/ToastContainer/index.tsx create mode 100644 frontend/src/components/ToastContainer/style.ts delete mode 100644 frontend/src/components/comment/CommentList/CommentItem/CommentMenu/CommentMenu.stories.tsx delete mode 100644 frontend/src/components/comment/CommentList/CommentItem/CommentMenu/index.tsx delete mode 100644 frontend/src/components/comment/CommentList/CommentItem/CommentMenu/style.ts delete mode 100644 frontend/src/components/comment/CommentList/constants.ts delete mode 100644 frontend/src/components/comment/CommentList/types.ts create mode 100644 frontend/src/components/common/ActiveContainer/ActiveContainer.stories.tsx create mode 100644 frontend/src/components/common/ActiveContainer/index.tsx create mode 100644 frontend/src/components/common/ActiveContainer/style.ts create mode 100644 frontend/src/components/common/ErrorItem/ErrorItem.stories.tsx create mode 100644 frontend/src/components/common/ErrorItem/index.tsx create mode 100644 frontend/src/components/common/ErrorItem/style.ts delete mode 100644 frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx delete mode 100644 frontend/src/components/common/ErrorMessage/index.tsx delete mode 100644 frontend/src/components/common/ErrorMessage/style.ts create mode 100644 frontend/src/components/common/ImageZoomModal/ImageZoomModal.stories.tsx create mode 100644 frontend/src/components/common/ImageZoomModal/index.tsx create mode 100644 frontend/src/components/common/ImageZoomModal/style.ts create mode 100644 frontend/src/components/common/Menu/Menu.stories.tsx rename frontend/src/components/common/{PostMenu => Menu}/index.tsx (63%) rename frontend/src/components/common/{PostMenu => Menu}/style.ts (93%) create mode 100644 frontend/src/components/common/Menu/types.ts create mode 100644 frontend/src/components/common/MobileLayoutTemplate/index.tsx create mode 100644 frontend/src/components/common/MobileLayoutTemplate/style.ts delete mode 100644 frontend/src/components/common/PostMenu/PostMenu.stories.tsx create mode 100644 frontend/src/components/common/ToolTip/ToolTip.stories.tsx create mode 100644 frontend/src/components/common/ToolTip/index.tsx create mode 100644 frontend/src/components/common/ToolTip/style.ts delete mode 100644 frontend/src/components/common/TwoButtonModal/index.tsx delete mode 100644 frontend/src/components/common/TwoButtonModal/style.ts create mode 100644 frontend/src/components/notice/AdminNoticeEdit/AdminNoticeEdit.stories.tsx create mode 100644 frontend/src/components/notice/AdminNoticeEdit/index.tsx create mode 100644 frontend/src/components/notice/AdminNoticeTableFetcher/AdminNoticeTableFetcher.stories.tsx create mode 100644 frontend/src/components/notice/AdminNoticeTableFetcher/index.tsx create mode 100644 frontend/src/components/notice/AdminNoticeTableFetcher/style.ts create mode 100644 frontend/src/components/notice/BannerFetcher/index.tsx create mode 100644 frontend/src/components/notice/BannerSkeleton/index.tsx create mode 100644 frontend/src/components/notice/BannerSkeleton/style.ts create mode 100644 frontend/src/components/notice/NoticeDetail/NoticeDetail.stories.tsx create mode 100644 frontend/src/components/notice/NoticeDetail/index.tsx rename frontend/src/{pages/AnnouncementPage => components/notice/NoticeDetail}/style.ts (51%) create mode 100644 frontend/src/components/notice/NoticeDetailFetcher/index.tsx create mode 100644 frontend/src/components/notice/NoticeForm/constant.ts create mode 100644 frontend/src/components/notice/NoticeForm/index.tsx create mode 100644 frontend/src/components/notice/NoticeForm/style.ts create mode 100644 frontend/src/components/notice/NoticeList/NoticeItem/NoticeItem.stories.tsx create mode 100644 frontend/src/components/notice/NoticeList/NoticeItem/index.tsx create mode 100644 frontend/src/components/notice/NoticeList/NoticeItem/style.ts create mode 100644 frontend/src/components/notice/NoticeList/NoticeList.stories.tsx create mode 100644 frontend/src/components/notice/NoticeList/index.tsx create mode 100644 frontend/src/components/notice/NoticeList/style.ts create mode 100644 frontend/src/components/notice/NoticeListFetcher/index.tsx create mode 100644 frontend/src/components/notice/NoticeListFetcher/style.ts create mode 100644 frontend/src/constants/report.ts create mode 100644 frontend/src/hooks/context/toast.tsx create mode 100644 frontend/src/hooks/query/alarm/useContentAlarmList.ts create mode 100644 frontend/src/hooks/query/alarm/useReadAlarm.ts create mode 100644 frontend/src/hooks/query/alarm/useReportAlarmList.ts create mode 100644 frontend/src/hooks/query/notice/useBannerNotice.tsx create mode 100644 frontend/src/hooks/query/notice/useCreateNotice.tsx create mode 100644 frontend/src/hooks/query/notice/useDeleteNotice.tsx create mode 100644 frontend/src/hooks/query/notice/useModifyNotice.tsx create mode 100644 frontend/src/hooks/query/notice/useNoticeDetail.tsx create mode 100644 frontend/src/hooks/query/notice/usePagedNoticeList.tsx create mode 100644 frontend/src/hooks/query/notice/useStackedNoticeList.tsx create mode 100644 frontend/src/hooks/query/report/usePendingReportActionList.ts create mode 100644 frontend/src/hooks/query/report/useReportAction.ts create mode 100644 frontend/src/hooks/query/report/useReportContent.ts create mode 100644 frontend/src/hooks/query/useReportApproveResult.tsx create mode 100644 frontend/src/hooks/query/user/useReadLatestAlarm.ts create mode 100644 frontend/src/hooks/useBannerToggle.ts create mode 100644 frontend/src/hooks/useDialog.tsx create mode 100644 frontend/src/hooks/useImageZoomModal.ts create mode 100644 frontend/src/hooks/usePagination.ts delete mode 100644 frontend/src/hooks/useToast.ts create mode 100644 frontend/src/mocks/alarm.ts create mode 100644 frontend/src/mocks/mockData/alarm.ts create mode 100644 frontend/src/mocks/mockData/notice.ts create mode 100644 frontend/src/mocks/mockData/report.ts create mode 100644 frontend/src/mocks/mockData/reportApproveResult.ts create mode 100644 frontend/src/mocks/notice.ts create mode 100644 frontend/src/mocks/reportApproveResult.ts delete mode 100644 frontend/src/pages/AnnouncementPage/index.tsx create mode 100644 frontend/src/pages/ErrorBoundaryWithNarrowHeader.tsx create mode 100644 frontend/src/pages/EventMascot/index.tsx create mode 100644 frontend/src/pages/EventMascot/style.ts create mode 100644 frontend/src/pages/NoRenderErrorBoundary.tsx create mode 100644 frontend/src/pages/ReportAlarmPage/ReportApproveResult/ReportTargetPost/index.tsx create mode 100644 frontend/src/pages/ReportAlarmPage/ReportApproveResult/index.tsx create mode 100644 frontend/src/pages/ReportAlarmPage/ReportApproveResult/style.ts create mode 100644 frontend/src/pages/ReportAlarmPage/index.tsx create mode 100644 frontend/src/pages/ReportAlarmPage/style.ts create mode 100644 frontend/src/pages/admin/PendingReportPage/PendingReportPage.stories.tsx create mode 100644 frontend/src/pages/admin/PendingReportPage/index.tsx create mode 100644 frontend/src/pages/admin/PendingReportPage/stlye.ts create mode 100644 frontend/src/pages/admin/notices/NoticeAdminPage/NoticeAdminPage.stories.tsx create mode 100644 frontend/src/pages/admin/notices/NoticeAdminPage/index.tsx create mode 100644 frontend/src/pages/admin/notices/NoticeAdminPage/style.ts create mode 100644 frontend/src/pages/admin/notices/NoticeEditPage/NoticeEditPage.stories.tsx create mode 100644 frontend/src/pages/admin/notices/NoticeEditPage/index.tsx create mode 100644 frontend/src/pages/admin/notices/NoticeWritePage/NoticeWritePage.stories.tsx create mode 100644 frontend/src/pages/admin/notices/NoticeWritePage/index.tsx create mode 100644 frontend/src/pages/notice/NoticeDetailPage/NoticeDetailPage.stories.tsx create mode 100644 frontend/src/pages/notice/NoticeDetailPage/index.tsx create mode 100644 frontend/src/pages/notice/NoticeDetailPage/style.ts create mode 100644 frontend/src/pages/notice/NoticeListPage/NoticeListPage.stories.tsx create mode 100644 frontend/src/pages/notice/NoticeListPage/index.tsx create mode 100644 frontend/src/pages/notice/NoticeListPage/style.ts delete mode 100644 frontend/src/pages/post/EditPostPage/style.ts delete mode 100644 frontend/src/pages/post/PostDetailPage/PostDetailFallback/index.tsx delete mode 100644 frontend/src/pages/post/PostDetailPage/PostDetailFallback/style.ts create mode 100644 frontend/src/types/alarm.ts create mode 100644 frontend/src/types/notice.ts create mode 100644 frontend/src/utils/post/convertTextToUrl.ts diff --git a/backend/src/main/java/com/votogether/VotogetherApplication.java b/backend/src/main/java/com/votogether/VotogetherApplication.java index e2aa0e85d..c9ecef9fb 100644 --- a/backend/src/main/java/com/votogether/VotogetherApplication.java +++ b/backend/src/main/java/com/votogether/VotogetherApplication.java @@ -3,7 +3,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.scheduling.annotation.EnableAsync; +@EnableAsync @ConfigurationPropertiesScan @SpringBootApplication public class VotogetherApplication { diff --git a/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandController.java b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandController.java new file mode 100644 index 000000000..8b6b00e3e --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandController.java @@ -0,0 +1,35 @@ +package com.votogether.domain.alarm.controller; + +import com.votogether.domain.alarm.service.AlarmCommandService; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.jwt.Auth; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Positive; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Validated +@RequiredArgsConstructor +@RequestMapping("/alarms") +@RestController +public class AlarmCommandController implements AlarmCommandControllerDocs { + + private final AlarmCommandService alarmCommandService; + + @PatchMapping("/{id}") + public ResponseEntity readAlarm( + @PathVariable("id") @Positive(message = "알림 ID는 양수만 가능합니다.") final Long alarmId, + @RequestParam("type") @NotBlank(message = "알림 타입이 공백이거나 존재하지 않습니다.") final String type, + @Auth final Member loginMember + ) { + alarmCommandService.readAlarm(alarmId, type, loginMember); + return ResponseEntity.ok().build(); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandControllerDocs.java b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandControllerDocs.java new file mode 100644 index 000000000..434ebd874 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmCommandControllerDocs.java @@ -0,0 +1,51 @@ +package com.votogether.domain.alarm.controller; + +import com.votogether.domain.member.entity.Member; +import com.votogether.global.exception.ExceptionResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Positive; +import org.springframework.http.ResponseEntity; + +@Tag(name = "알림 커맨드", description = "알림 커맨드 API") +public interface AlarmCommandControllerDocs { + + @Operation( + summary = "알림 읽기", + description = "알림을 읽을 수 있는 대상이라면 알림을 읽습니다." + ) + @ApiResponses({ + @ApiResponse( + responseCode = "200", + description = "알림 읽기 성공" + ), + @ApiResponse( + responseCode = "400", + description = """ + 1.알림 ID가 양수가 아닌 경우 + + 2.알림을 읽을 수 있는 대상이 아닌 경우 + """, + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ), + @ApiResponse( + responseCode = "404", + description = "알림이 존재하지 않은 경우", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity readAlarm( + @Parameter(description = "알림 ID", example = "1") + @Positive(message = "알림 ID는 양수만 가능합니다.") final Long alarmId, + @Parameter(description = "알림 타입", example = "CONTENT") + @NotBlank(message = "알림 타입이 공백이거나 존재하지 않습니다.") final String alarmType, + final Member loginMember + ); + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryController.java b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryController.java new file mode 100644 index 000000000..2b5092e25 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryController.java @@ -0,0 +1,56 @@ +package com.votogether.domain.alarm.controller; + +import com.votogether.domain.alarm.dto.response.ReportActionAlarmResponse; +import com.votogether.domain.alarm.dto.response.ReportActionResponse; +import com.votogether.domain.alarm.dto.response.PostAlarmResponse; +import com.votogether.domain.alarm.service.AlarmQueryService; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.jwt.Auth; +import jakarta.validation.constraints.PositiveOrZero; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Validated +@RequiredArgsConstructor +@RequestMapping("/alarms") +@RestController +public class AlarmQueryController implements AlarmQueryControllerDocs { + + private final AlarmQueryService alarmQueryService; + + @GetMapping("/content") + public ResponseEntity> getPostAlarm( + @RequestParam @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page, + @Auth final Member loginMember + ) { + final List postAlarmResponses = alarmQueryService.getPostAlarm(loginMember, page); + return ResponseEntity.ok(postAlarmResponses); + } + + @GetMapping("/report") + public ResponseEntity> getReportActionAlarms( + @RequestParam @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page, + @Auth final Member member + ) { + final List response = alarmQueryService.getReportActionAlarms(member, page); + return ResponseEntity.ok(response); + } + + @GetMapping("/report/{id}") + public ResponseEntity getReportActionAlarm( + @PathVariable("id") final Long reportActionAlarmId, + @Auth final Member member + ) { + final ReportActionResponse response = + alarmQueryService.getReportActionAlarm(reportActionAlarmId, member); + return ResponseEntity.ok(response); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryControllerDocs.java b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryControllerDocs.java new file mode 100644 index 000000000..aa3516446 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/controller/AlarmQueryControllerDocs.java @@ -0,0 +1,77 @@ +package com.votogether.domain.alarm.controller; + +import com.votogether.domain.alarm.dto.response.ReportActionAlarmResponse; +import com.votogether.domain.alarm.dto.response.ReportActionResponse; +import com.votogether.domain.alarm.dto.response.PostAlarmResponse; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.exception.ExceptionResponse; +import com.votogether.global.jwt.Auth; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.constraints.PositiveOrZero; +import java.util.List; +import org.springframework.http.ResponseEntity; + +@Tag(name = "알림 조회", description = "알림 조회 API") +public interface AlarmQueryControllerDocs { + + @Operation( + summary = "게시글 내역 알림 조회", + description = "게시글 내역 알림을 조회한다." + ) + @ApiResponses({ + @ApiResponse( + responseCode = "200", + description = "게시글 내역 알림 조회 성공" + ), + @ApiResponse( + responseCode = "400", + description = "0 이상의 정수가 아닌 페이지", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity> getPostAlarm( + @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page, + @Auth final Member loginMember + ); + + @Operation( + summary = "신고조치알림 조회", + description = "신고조치알림목록을 조회한다." + ) + @ApiResponses({ + @ApiResponse( + responseCode = "201", + description = "신고조치알림 조회 성공" + ), + @ApiResponse( + responseCode = "400", + description = "페이지가 0이상 정수가 아닌 경우", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity> getReportActionAlarms( + @Parameter(description = "현재 페이지 위치", example = "0") + @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page, + final Member member + ); + + @Operation( + summary = "신고조치알림 상세 조회", + description = "신고조치알림를 상세 조회한다." + ) + @ApiResponse( + responseCode = "201", + description = "신고조치알림 상세 조회 성공" + ) + ResponseEntity getReportActionAlarm( + @Parameter(description = "신고조치알림 ID", example = "1") final Long reportActionAlarmId, + final Member member + ); + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/dto/event/PostAlarmEvent.java b/backend/src/main/java/com/votogether/domain/alarm/dto/event/PostAlarmEvent.java new file mode 100644 index 000000000..b9a26fc0a --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/dto/event/PostAlarmEvent.java @@ -0,0 +1,13 @@ +package com.votogether.domain.alarm.dto.event; + +import com.votogether.domain.alarm.entity.vo.AlarmType; +import com.votogether.domain.member.entity.Member; + +public record PostAlarmEvent( + Member member, + String commentWriterNickname, + Long targetId, + AlarmType alarmType, + String detail +) { +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmDetailResponse.java b/backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmDetailResponse.java new file mode 100644 index 000000000..1b3e10713 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmDetailResponse.java @@ -0,0 +1,26 @@ +package com.votogether.domain.alarm.dto.response; + +import com.votogether.domain.alarm.entity.Alarm; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "게시글 내역 세부 사항 응답") +public record PostAlarmDetailResponse( + @Schema(description = "게시글 ID", example = "1") + Long postId, + + @Schema(description = "게시글 제목", example = "제목입니다.") + String postTitle, + + @Schema(description = "댓글 작성자 닉네임", example = "저문") + String commentWriter +) { + + public static PostAlarmDetailResponse of(final Alarm alarm) { + return new PostAlarmDetailResponse( + alarm.getTargetId(), + alarm.getDetail(), + alarm.getCommentWriterNickname() + ); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmResponse.java b/backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmResponse.java new file mode 100644 index 000000000..3e503aec2 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/dto/response/PostAlarmResponse.java @@ -0,0 +1,33 @@ +package com.votogether.domain.alarm.dto.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.votogether.domain.alarm.entity.Alarm; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; + +@Schema(description = "게시글 내역 조회 응답") +public record PostAlarmResponse( + @Schema(description = "알림 ID", example = "1") + Long alarmId, + + @Schema(description = "알림 세부 사항") + PostAlarmDetailResponse detail, + + @Schema(description = "게시글 생성 시각", example = "2023-10-16 21:25") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + LocalDateTime createdAt, + + @Schema(description = "알림 확인 여부", example = "false") + boolean isChecked +) { + + public static PostAlarmResponse of(final Alarm alarm) { + return new PostAlarmResponse( + alarm.getId(), + PostAlarmDetailResponse.of(alarm), + alarm.getCreatedAt(), + alarm.isChecked() + ); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionAlarmResponse.java b/backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionAlarmResponse.java new file mode 100644 index 000000000..1e63b6709 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionAlarmResponse.java @@ -0,0 +1,28 @@ +package com.votogether.domain.alarm.dto.response; + +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "신고조치알림 응답") +public record ReportActionAlarmResponse( + @Schema(description = "알림 ID", example = "1") + Long alarmId, + + @Schema(description = "확인 여부", example = "false") + boolean isChecked, + + @Schema(description = "신고조치 세부정보") + ReportActionResponse detail +) { + + public static ReportActionAlarmResponse from( + final ReportActionAlarm reportActionAlarm + ) { + return new ReportActionAlarmResponse( + reportActionAlarm.getId(), + reportActionAlarm.isChecked(), + ReportActionResponse.from(reportActionAlarm) + ); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionResponse.java b/backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionResponse.java new file mode 100644 index 000000000..4c63c5540 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/dto/response/ReportActionResponse.java @@ -0,0 +1,44 @@ +package com.votogether.domain.alarm.dto.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.report.entity.vo.ReportType; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Schema(description = "신고조치 응답") +public record ReportActionResponse( + @Schema(description = "신고조치 ID", example = "1") + Long reportActionId, + + @Schema(description = "신고조치타입", example = "POST") + ReportType type, + + @Schema(description = "신고대상내용", example = "1") + String content, + + @Schema(description = "신고사유") + Set reasons, + + @Schema(description = "신고조치시간", example = "2023-08-01 13:56") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + LocalDateTime createdAt +) { + + public static ReportActionResponse from(final ReportActionAlarm reportActionAlarm) { + final Set reasons = Stream.of(reportActionAlarm.getReasons().split(",")) + .map(String::strip) + .collect(Collectors.toSet()); + + return new ReportActionResponse( + reportActionAlarm.getId(), + reportActionAlarm.getReportType(), + reportActionAlarm.getTarget(), + reasons, + reportActionAlarm.getCreatedAt() + ); + } +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/entity/Alarm.java b/backend/src/main/java/com/votogether/domain/alarm/entity/Alarm.java new file mode 100644 index 000000000..a1c663948 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/entity/Alarm.java @@ -0,0 +1,90 @@ +package com.votogether.domain.alarm.entity; + +import com.votogether.domain.alarm.entity.vo.AlarmType; +import com.votogether.domain.alarm.exception.AlarmExceptionType; +import com.votogether.domain.common.BaseEntity; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.exception.BadRequestException; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import java.time.LocalDateTime; +import java.util.Objects; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@EqualsAndHashCode(of = {"id"}, callSuper = false) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Alarm extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", nullable = false) + private Member member; + + @Enumerated(value = EnumType.STRING) + @Column(length = 20, nullable = false) + private AlarmType alarmType; + + @Column(length = 20, nullable = false) + private String commentWriterNickname; + + @Column(nullable = false) + private Long targetId; + + @Column(length = 100) + private String detail; + + @Column(nullable = false) + private boolean isChecked; + + @Builder + private Alarm( + final Member member, + final AlarmType alarmType, + final String commentWriterNickname, + final Long targetId, + final String detail, + final boolean isChecked + ) { + this.member = member; + this.alarmType = alarmType; + this.commentWriterNickname = commentWriterNickname; + this.targetId = targetId; + this.detail = detail; + this.isChecked = isChecked; + } + + public void read() { + this.isChecked = true; + } + + public void checkOwner(final Member member) { + if (!Objects.equals(this.member.getId(), member.getId())) { + throw new BadRequestException(AlarmExceptionType.NOT_OWNER); + } + } + + public LocalDateTime getLatestAlarmCreatedAt(final LocalDateTime reportActionAlarmCreatedAt) { + if (this.getCreatedAt().isAfter(reportActionAlarmCreatedAt)) { + return this.getCreatedAt(); + } + return reportActionAlarmCreatedAt; + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/entity/ReportActionAlarm.java b/backend/src/main/java/com/votogether/domain/alarm/entity/ReportActionAlarm.java new file mode 100644 index 000000000..2000928b3 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/entity/ReportActionAlarm.java @@ -0,0 +1,77 @@ +package com.votogether.domain.alarm.entity; + +import com.votogether.domain.alarm.exception.AlarmExceptionType; +import com.votogether.domain.common.BaseEntity; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.global.exception.BadRequestException; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import java.util.Objects; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@EqualsAndHashCode(of = {"id"}, callSuper = false) +public class ReportActionAlarm extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", nullable = false) + private Member member; + + @Enumerated(value = EnumType.STRING) + @Column(length = 20, nullable = false) + private ReportType reportType; + + @Column(length = 500, nullable = false) + private String target; + + @Column(length = 500, nullable = false) + private String reasons; + + @Column(nullable = false) + private boolean isChecked; + + @Builder + private ReportActionAlarm( + final Member member, + final ReportType reportType, + final String target, + final String reasons, + final boolean isChecked + ) { + this.member = member; + this.reportType = reportType; + this.target = target; + this.reasons = reasons; + this.isChecked = isChecked; + } + + public void read() { + this.isChecked = true; + } + + public void checkOwner(final Member member) { + if (!Objects.equals(this.member.getId(), member.getId())) { + throw new BadRequestException(AlarmExceptionType.NOT_OWNER); + } + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmActionType.java b/backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmActionType.java new file mode 100644 index 000000000..517c91fe9 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmActionType.java @@ -0,0 +1,20 @@ +package com.votogether.domain.alarm.entity.vo; + +import com.votogether.domain.alarm.exception.AlarmExceptionType; +import com.votogether.global.exception.BadRequestException; +import java.util.Arrays; + +public enum AlarmActionType { + + CONTENT, + REPORT, + ; + + public static AlarmActionType from(final String actionType) { + return Arrays.stream(AlarmActionType.values()) + .filter(alarmActionType -> alarmActionType.name().equals(actionType)) + .findFirst() + .orElseThrow(() -> new BadRequestException(AlarmExceptionType.NOT_FOUND_ACTION_TYPE)); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmType.java b/backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmType.java new file mode 100644 index 000000000..d39d3fbda --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/entity/vo/AlarmType.java @@ -0,0 +1,9 @@ +package com.votogether.domain.alarm.entity.vo; + +public enum AlarmType { + + COMMENT, + POST_DEADLINE, + ; + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/exception/AlarmExceptionType.java b/backend/src/main/java/com/votogether/domain/alarm/exception/AlarmExceptionType.java new file mode 100644 index 000000000..e28b62f49 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/exception/AlarmExceptionType.java @@ -0,0 +1,23 @@ +package com.votogether.domain.alarm.exception; + +import com.votogether.global.exception.ExceptionType; +import lombok.Getter; + +@Getter +public enum AlarmExceptionType implements ExceptionType { + + NOT_FOUND_ACTION(1300, "신고 조치 알림이 존재하지 않습니다."), + NOT_FOUND(1301, "알림이 존재하지 않습니다."), + NOT_OWNER(1302, "알림을 읽을 대상이 아닙니다."), + NOT_FOUND_ACTION_TYPE(1303, "등록되지 않은 알림 동작입니다."), + ; + + private final int code; + private final String message; + + AlarmExceptionType(final int code, final String message) { + this.code = code; + this.message = message; + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/repository/AlarmRepository.java b/backend/src/main/java/com/votogether/domain/alarm/repository/AlarmRepository.java new file mode 100644 index 000000000..acb87da9b --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/repository/AlarmRepository.java @@ -0,0 +1,19 @@ +package com.votogether.domain.alarm.repository; + +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.member.entity.Member; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface AlarmRepository extends JpaRepository { + + Slice findAllByMemberOrderByCreatedAtDesc(final Member member, final Pageable pageable); + + List findAllByMember(final Member member); + + Optional findTopByMemberOrderByIdDesc(final Member member); + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepository.java b/backend/src/main/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepository.java new file mode 100644 index 000000000..783982e8d --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepository.java @@ -0,0 +1,20 @@ +package com.votogether.domain.alarm.repository; + +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.member.entity.Member; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReportActionAlarmRepository extends JpaRepository { + + List findByMemberOrderByIdDesc(final Member member, final Pageable pageable); + + Optional findByIdAndMember(final Long Id, final Member member); + + Optional findTopByMemberOrderByIdDesc(final Member member); + + List findAllByMember(final Member member); + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/service/AlarmCommandService.java b/backend/src/main/java/com/votogether/domain/alarm/service/AlarmCommandService.java new file mode 100644 index 000000000..650aab2c5 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/service/AlarmCommandService.java @@ -0,0 +1,28 @@ +package com.votogether.domain.alarm.service; + +import com.votogether.domain.alarm.entity.vo.AlarmActionType; +import com.votogether.domain.alarm.service.strategy.AlarmReadStrategy; +import com.votogether.domain.alarm.service.strategy.AlarmReadStrategyProvider; +import com.votogether.domain.member.entity.Member; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional +@Service +public class AlarmCommandService { + + private final AlarmReadStrategyProvider alarmReadStrategyProvider; + + public void readAlarm( + final Long alarmId, + final String type, + final Member loginMember + ) { + final AlarmActionType alarmActionType = AlarmActionType.from(type); + final AlarmReadStrategy alarmReadStrategy = alarmReadStrategyProvider.getStrategy(alarmActionType); + alarmReadStrategy.read(alarmId, loginMember); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/service/AlarmEventListener.java b/backend/src/main/java/com/votogether/domain/alarm/service/AlarmEventListener.java new file mode 100644 index 000000000..8e7ec3fc6 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/service/AlarmEventListener.java @@ -0,0 +1,34 @@ +package com.votogether.domain.alarm.service; + +import com.votogether.domain.alarm.dto.event.PostAlarmEvent; +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.repository.AlarmRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionalEventListener; + +@RequiredArgsConstructor +@Component +public class AlarmEventListener { + + private final AlarmRepository alarmRepository; + + @Async + @TransactionalEventListener + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void handlePostAlarmEvent(final PostAlarmEvent postAlarmEvent) { + final Alarm alarm = Alarm.builder() + .member(postAlarmEvent.member()) + .alarmType(postAlarmEvent.alarmType()) + .commentWriterNickname(postAlarmEvent.commentWriterNickname()) + .targetId(postAlarmEvent.targetId()) + .detail(postAlarmEvent.detail()) + .isChecked(false) + .build(); + alarmRepository.save(alarm); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/service/AlarmQueryService.java b/backend/src/main/java/com/votogether/domain/alarm/service/AlarmQueryService.java new file mode 100644 index 000000000..a9fa1e109 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/service/AlarmQueryService.java @@ -0,0 +1,57 @@ +package com.votogether.domain.alarm.service; + +import com.votogether.domain.alarm.dto.response.PostAlarmResponse; +import com.votogether.domain.alarm.dto.response.ReportActionAlarmResponse; +import com.votogether.domain.alarm.dto.response.ReportActionResponse; +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.exception.AlarmExceptionType; +import com.votogether.domain.alarm.repository.AlarmRepository; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.exception.NotFoundException; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Slice; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional(readOnly = true) +@Service +public class AlarmQueryService { + + private static final int BASIC_PAGE_SIZE = 10; + + private final AlarmRepository alarmRepository; + private final ReportActionAlarmRepository reportActionAlarmRepository; + + public List getPostAlarm(final Member member, final int page) { + final PageRequest pageRequest = PageRequest.of(page, BASIC_PAGE_SIZE); + final Slice alarms = alarmRepository.findAllByMemberOrderByCreatedAtDesc(member, pageRequest); + + return alarms.stream() + .map(PostAlarmResponse::of) + .toList(); + } + + public List getReportActionAlarms(final Member member, final int page) { + final PageRequest pageRequest = PageRequest.of(page, BASIC_PAGE_SIZE); + final List reportActionAlarms = reportActionAlarmRepository + .findByMemberOrderByIdDesc(member, pageRequest); + + return reportActionAlarms.stream() + .map(ReportActionAlarmResponse::from) + .toList(); + } + + public ReportActionResponse getReportActionAlarm(final Long reportActionAlarmId, final Member member) { + final ReportActionAlarm reportActionAlarm = reportActionAlarmRepository + .findByIdAndMember(reportActionAlarmId, member) + .orElseThrow(() -> new NotFoundException(AlarmExceptionType.NOT_FOUND_ACTION)); + + return ReportActionResponse.from(reportActionAlarm); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategy.java b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategy.java new file mode 100644 index 000000000..13c78d1c9 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategy.java @@ -0,0 +1,9 @@ +package com.votogether.domain.alarm.service.strategy; + +import com.votogether.domain.member.entity.Member; + +public interface AlarmReadStrategy { + + void read(final Long id, final Member member); + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategyProvider.java b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategyProvider.java new file mode 100644 index 000000000..557e020ba --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/AlarmReadStrategyProvider.java @@ -0,0 +1,26 @@ +package com.votogether.domain.alarm.service.strategy; + +import com.votogether.domain.alarm.entity.vo.AlarmActionType; +import java.util.EnumMap; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class AlarmReadStrategyProvider { + + private final Map readStrategies; + + public AlarmReadStrategyProvider( + final ContentAlarmReadStrategy contentAlarmReadStrategy, + final ReportAlarmReadStrategy reportAlarmReadStrategy + ) { + readStrategies = new EnumMap<>(AlarmActionType.class); + readStrategies.put(AlarmActionType.CONTENT, contentAlarmReadStrategy); + readStrategies.put(AlarmActionType.REPORT, reportAlarmReadStrategy); + } + + public AlarmReadStrategy getStrategy(final AlarmActionType alarmActionType) { + return readStrategies.get(alarmActionType); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/service/strategy/ContentAlarmReadStrategy.java b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/ContentAlarmReadStrategy.java new file mode 100644 index 000000000..b692e30a0 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/ContentAlarmReadStrategy.java @@ -0,0 +1,26 @@ +package com.votogether.domain.alarm.service.strategy; + +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.exception.AlarmExceptionType; +import com.votogether.domain.alarm.repository.AlarmRepository; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.exception.NotFoundException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@RequiredArgsConstructor +@Component +public class ContentAlarmReadStrategy implements AlarmReadStrategy { + + private final AlarmRepository alarmRepository; + + @Override + public void read(final Long id, final Member member) { + final Alarm alarm = alarmRepository.findById(id) + .orElseThrow(() -> new NotFoundException(AlarmExceptionType.NOT_FOUND)); + + alarm.checkOwner(member); + alarm.read(); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/alarm/service/strategy/ReportAlarmReadStrategy.java b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/ReportAlarmReadStrategy.java new file mode 100644 index 000000000..df6a98e79 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/alarm/service/strategy/ReportAlarmReadStrategy.java @@ -0,0 +1,26 @@ +package com.votogether.domain.alarm.service.strategy; + +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.exception.AlarmExceptionType; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.exception.NotFoundException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@RequiredArgsConstructor +@Component +public class ReportAlarmReadStrategy implements AlarmReadStrategy { + + private final ReportActionAlarmRepository reportActionAlarmRepository; + + @Override + public void read(final Long id, final Member member) { + final ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findById(id) + .orElseThrow(() -> new NotFoundException(AlarmExceptionType.NOT_FOUND_ACTION)); + + reportActionAlarm.checkOwner(member); + reportActionAlarm.read(); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/auth/exception/AuthExceptionType.java b/backend/src/main/java/com/votogether/domain/auth/exception/AuthExceptionType.java index 37e1d584d..6e2cbd2ef 100644 --- a/backend/src/main/java/com/votogether/domain/auth/exception/AuthExceptionType.java +++ b/backend/src/main/java/com/votogether/domain/auth/exception/AuthExceptionType.java @@ -7,7 +7,13 @@ public enum AuthExceptionType implements ExceptionType { NONEXISTENT_REFRESH_TOKEN(300, "갱신 토큰이 존재하지 않습니다."), - UNMATCHED_INFORMATION_BETWEEN_TOKEN(301, "토큰 간의 정보가 일치하지 않습니다."); + UNMATCHED_INFORMATION_BETWEEN_TOKEN(301, "토큰 간의 정보가 일치하지 않습니다."), + INVALID_TOKEN(302, "올바르지 않은 토큰입니다."), + UNSUPPORTED_TOKEN(303, "지원하지 않는 JWT입니다."), + MALFORMED_TOKEN(304, "잘못된 JWT 서명입니다."), + SIGNATURE_TOKEN(305, "토큰의 서명 유효성 검사가 실패했습니다."), + EXPIRED_TOKEN(306, "토큰의 유효기간이 만료되었습니다."), + UNKNOWN_TOKEN(307, "알 수 없는 토큰 유효성 문제가 발생했습니다."); private final int code; private final String message; diff --git a/backend/src/main/java/com/votogether/domain/auth/service/AuthService.java b/backend/src/main/java/com/votogether/domain/auth/service/AuthService.java index 45c99caeb..83dcfad7f 100644 --- a/backend/src/main/java/com/votogether/domain/auth/service/AuthService.java +++ b/backend/src/main/java/com/votogether/domain/auth/service/AuthService.java @@ -39,7 +39,7 @@ public LoginTokenDto register(final String code) { final Member registeredMember = memberService.register(member); final String accessToken = tokenProcessor.generateAccessToken(registeredMember.getId()); final String refreshToken = tokenProcessor.generateRefreshToken(registeredMember.getId()); - redisTemplate.opsForValue().set(refreshToken, registeredMember.getId()); + redisTemplate.opsForValue().set(refreshToken, registeredMember.getId(), Duration.ofDays(14L)); return new LoginTokenDto(accessToken, refreshToken, registeredMember.hasEssentialInfo()); } diff --git a/backend/src/main/java/com/votogether/domain/category/exception/CategoryExceptionType.java b/backend/src/main/java/com/votogether/domain/category/exception/CategoryExceptionType.java new file mode 100644 index 000000000..c5fdb81fa --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/category/exception/CategoryExceptionType.java @@ -0,0 +1,21 @@ +package com.votogether.domain.category.exception; + +import com.votogether.global.exception.ExceptionType; +import lombok.Getter; + +@Getter +public enum CategoryExceptionType implements ExceptionType { + + NOT_FOUND(800, "해당 카테고리가 존재하지 않습니다."), + EXIST_LIKE_CATEGORY(801, "이미 선호 카테고리에 등록되어 있습니다."), + NOT_LIKE_CATEGORY(802, "해당 카테고리는 선호 카테고리가 아닙니다."); + + private final int code; + private final String message; + + CategoryExceptionType(final int code, final String message) { + this.code = code; + this.message = message; + } + +} diff --git a/backend/src/main/java/com/votogether/domain/category/service/CategoryService.java b/backend/src/main/java/com/votogether/domain/category/service/CategoryService.java index ed0b5a84d..99d633b58 100644 --- a/backend/src/main/java/com/votogether/domain/category/service/CategoryService.java +++ b/backend/src/main/java/com/votogether/domain/category/service/CategoryService.java @@ -2,10 +2,13 @@ import com.votogether.domain.category.dto.response.CategoryResponse; import com.votogether.domain.category.entity.Category; +import com.votogether.domain.category.exception.CategoryExceptionType; import com.votogether.domain.category.repository.CategoryRepository; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.MemberCategory; import com.votogether.domain.member.repository.MemberCategoryRepository; +import com.votogether.global.exception.BadRequestException; +import com.votogether.global.exception.NotFoundException; import java.util.Comparator; import java.util.List; import lombok.RequiredArgsConstructor; @@ -32,11 +35,11 @@ public List getAllCategories() { @Transactional public void addFavoriteCategory(final Member member, final Long categoryId) { final Category category = categoryRepository.findById(categoryId) - .orElseThrow(() -> new IllegalArgumentException("해당 카테고리가 존재하지 않습니다.")); + .orElseThrow(() -> new NotFoundException(CategoryExceptionType.NOT_FOUND)); memberCategoryRepository.findByMemberAndCategory(member, category) .ifPresent(ignore -> { - throw new IllegalStateException("이미 선호 카테고리에 등록되어 있습니다."); + throw new BadRequestException(CategoryExceptionType.EXIST_LIKE_CATEGORY); }); final MemberCategory memberCategory = MemberCategory.builder() @@ -50,9 +53,9 @@ public void addFavoriteCategory(final Member member, final Long categoryId) { @Transactional public void removeFavoriteCategory(final Member member, final Long categoryId) { final Category category = categoryRepository.findById(categoryId) - .orElseThrow(() -> new IllegalArgumentException("해당 카테고리가 존재하지 않습니다.")); + .orElseThrow(() -> new NotFoundException(CategoryExceptionType.NOT_FOUND)); final MemberCategory memberCategory = memberCategoryRepository.findByMemberAndCategory(member, category) - .orElseThrow(() -> new IllegalArgumentException("해당 카테고리는 선호 카테고리가 아닙니다.")); + .orElseThrow(() -> new BadRequestException(CategoryExceptionType.NOT_LIKE_CATEGORY)); memberCategoryRepository.delete(memberCategory); } diff --git a/backend/src/main/java/com/votogether/domain/member/controller/MemberController.java b/backend/src/main/java/com/votogether/domain/member/controller/MemberController.java index 86c84b39f..3cd32d3d6 100644 --- a/backend/src/main/java/com/votogether/domain/member/controller/MemberController.java +++ b/backend/src/main/java/com/votogether/domain/member/controller/MemberController.java @@ -46,6 +46,12 @@ public ResponseEntity updateDetails( return ResponseEntity.ok().build(); } + @PatchMapping("/me/check-alarm") + public ResponseEntity checkLatestAlarm(@Auth final Member member) { + memberService.checkLatestAlarm(member); + return ResponseEntity.ok().build(); + } + @DeleteMapping("/me/delete") public ResponseEntity deleteMember(@Auth final Member member) { memberService.deleteMember(member); diff --git a/backend/src/main/java/com/votogether/domain/member/controller/MemberControllerDocs.java b/backend/src/main/java/com/votogether/domain/member/controller/MemberControllerDocs.java index 082b424d0..58f09b1d9 100644 --- a/backend/src/main/java/com/votogether/domain/member/controller/MemberControllerDocs.java +++ b/backend/src/main/java/com/votogether/domain/member/controller/MemberControllerDocs.java @@ -5,6 +5,7 @@ import com.votogether.domain.member.dto.response.MemberInfoResponse; import com.votogether.domain.member.entity.Member; import com.votogether.global.exception.ExceptionResponse; +import com.votogether.global.jwt.Auth; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -17,7 +18,14 @@ public interface MemberControllerDocs { @Operation(summary = "회원 정보 조회", description = "회원 정보를 조회한다.") - @ApiResponse(responseCode = "200", description = "회원 정보 조회 성공") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "회원 정보 조회 성공"), + @ApiResponse( + responseCode = "400", + description = "회원에 해당하는 통계 정보가 없는 경우", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) ResponseEntity findMemberInfo(final Member member); @Operation(summary = "회원 닉네임 변경", description = "회원 닉네임을 변경한다.") @@ -48,6 +56,10 @@ ResponseEntity updateDetails( final Member member ); + @Operation(summary = "회원 최신 알림 확인", description = "회원의 최신 알림 읽은 시간을 수정한다.") + @ApiResponse(responseCode = "200", description = "최신 알림 읽기 성공") + ResponseEntity checkLatestAlarm(@Auth final Member member); + @Operation(summary = "회원 탈퇴", description = "회원 탈퇴한다.") @ApiResponse(responseCode = "200", description = "회원 탈퇴 성공") ResponseEntity deleteMember(final Member member); diff --git a/backend/src/main/java/com/votogether/domain/member/dto/response/MemberInfoResponse.java b/backend/src/main/java/com/votogether/domain/member/dto/response/MemberInfoResponse.java index 8c6247e70..c6363b01b 100644 --- a/backend/src/main/java/com/votogether/domain/member/dto/response/MemberInfoResponse.java +++ b/backend/src/main/java/com/votogether/domain/member/dto/response/MemberInfoResponse.java @@ -1,6 +1,7 @@ package com.votogether.domain.member.dto.response; import com.votogether.domain.member.entity.vo.Gender; +import com.votogether.domain.member.entity.vo.Roles; import io.swagger.v3.oas.annotations.media.Schema; @Schema(description = "회원 정보 응답") @@ -15,9 +16,15 @@ public record MemberInfoResponse( Integer birthYear, @Schema(description = "작성한 게시글 수", example = "5") - int postCount, + long postCount, @Schema(description = "투표한 수", example = "10") - int voteCount + long voteCount, + + @Schema(description = "권한", example = "MEMBER") + Roles role, + + @Schema(description = "최신 알림 존재 여부", example = "false") + boolean hasLatestAlarm ) { } diff --git a/backend/src/main/java/com/votogether/domain/member/entity/Member.java b/backend/src/main/java/com/votogether/domain/member/entity/Member.java index 6b322287b..a335ada2f 100644 --- a/backend/src/main/java/com/votogether/domain/member/entity/Member.java +++ b/backend/src/main/java/com/votogether/domain/member/entity/Member.java @@ -4,6 +4,7 @@ import com.votogether.domain.common.BaseEntity; import com.votogether.domain.member.entity.vo.Gender; import com.votogether.domain.member.entity.vo.Nickname; +import com.votogether.domain.member.entity.vo.Roles; import com.votogether.domain.member.entity.vo.SocialType; import com.votogether.domain.member.exception.MemberExceptionType; import com.votogether.global.exception.BadRequestException; @@ -41,32 +42,43 @@ public class Member extends BaseEntity { @Embedded private Nickname nickname; - @Enumerated(value = EnumType.STRING) + @Enumerated(EnumType.STRING) @Column(length = 20) private Gender gender; private Integer birthYear; - @Enumerated(value = EnumType.STRING) + @Enumerated(EnumType.STRING) @Column(length = 20, nullable = false) private SocialType socialType; @Column(nullable = false) private String socialId; + @Enumerated(EnumType.STRING) + @Column(length = 20, nullable = false) + private Roles roles; + + @Column(columnDefinition = "datetime(6)", nullable = false) + private LocalDateTime alarmCheckedAt; + @Builder private Member( final String nickname, final Gender gender, final Integer birthYear, final SocialType socialType, - final String socialId + final String socialId, + final Roles roles, + final LocalDateTime alarmCheckedAt ) { this.nickname = new Nickname(nickname); this.gender = gender; this.birthYear = birthYear; this.socialType = socialType; this.socialId = socialId; + this.roles = roles; + this.alarmCheckedAt = alarmCheckedAt; } public static Member from(final KakaoMemberResponse response) { @@ -74,6 +86,8 @@ public static Member from(final KakaoMemberResponse response) { .nickname(INITIAL_NICKNAME_PREFIX + RandomStringUtils.random(10, true, true)) .socialType(SocialType.KAKAO) .socialId(String.valueOf(response.id())) + .roles(Roles.MEMBER) + .alarmCheckedAt(LocalDateTime.now()) .build(); } @@ -109,6 +123,14 @@ public boolean hasEssentialInfo() { return (this.gender != null && this.birthYear != null); } + public boolean hasLatestAlarmCompareTo(final LocalDateTime latestAlarmCreatedAt) { + return alarmCheckedAt.isBefore(latestAlarmCreatedAt); + } + + public void checkAlarm() { + alarmCheckedAt = LocalDateTime.now(); + } + public String getNickname() { return this.nickname.getValue(); } diff --git a/backend/src/main/java/com/votogether/domain/member/entity/MemberMetric.java b/backend/src/main/java/com/votogether/domain/member/entity/MemberMetric.java new file mode 100644 index 000000000..8fd49485e --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/member/entity/MemberMetric.java @@ -0,0 +1,81 @@ +package com.votogether.domain.member.entity; + +import com.votogether.domain.common.BaseEntity; +import com.votogether.domain.member.exception.MemberExceptionType; +import com.votogether.global.exception.BadRequestException; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@EqualsAndHashCode(of = {"id"}, callSuper = false) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class MemberMetric extends BaseEntity { + + private static final int POST_SCORE = 5; + private static final int VOTE_SCORE = 1; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", nullable = false) + private Member member; + + @Column(nullable = false) + private long postCount; + + @Column(nullable = false) + private long voteCount; + + @Column(nullable = false) + private long score; + + @Builder + private MemberMetric( + final Member member, + final long postCount, + final long voteCount, + final long score + ) { + this.member = member; + this.postCount = postCount; + this.voteCount = voteCount; + this.score = score; + } + + public void increasePostCount() { + this.postCount += 1; + updateScore(); + } + + public void decreasePostCount() { + this.postCount -= 1; + updateScore(); + } + + public void updateVoteCount(final long voteCount) { + if (voteCount < 0) { + throw new BadRequestException(MemberExceptionType.INVALID_VOTE_COUNT); + } + this.voteCount = voteCount; + updateScore(); + } + + private void updateScore() { + this.score = (postCount * POST_SCORE) + (voteCount * VOTE_SCORE); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/member/entity/vo/Roles.java b/backend/src/main/java/com/votogether/domain/member/entity/vo/Roles.java new file mode 100644 index 000000000..cbd952b83 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/member/entity/vo/Roles.java @@ -0,0 +1,7 @@ +package com.votogether.domain.member.entity.vo; + +public enum Roles { + + ADMIN, MEMBER; + +} diff --git a/backend/src/main/java/com/votogether/domain/member/exception/MemberExceptionType.java b/backend/src/main/java/com/votogether/domain/member/exception/MemberExceptionType.java index 67546d872..b1fda1ff1 100644 --- a/backend/src/main/java/com/votogether/domain/member/exception/MemberExceptionType.java +++ b/backend/src/main/java/com/votogether/domain/member/exception/MemberExceptionType.java @@ -9,12 +9,14 @@ public enum MemberExceptionType implements ExceptionType { INVALID_NICKNAME_LENGTH(800, "닉네임의 길이가 올바르지 않습니다."), INVALID_NICKNAME_LETTER(801, "닉네임에 들어갈 수 없는 문자가 포함되어 있습니다."), ALREADY_EXISTENT_NICKNAME(802, "이미 중복된 닉네임이 존재합니다."), - NONEXISTENT_MEMBER(803, "해당 회원이 존재하지 않습니다."), + NON_EXISTENT_MEMBER(803, "해당 회원이 존재하지 않습니다."), INVALID_AGE(804, "존재할 수 없는 연령입니다."), ALREADY_ASSIGNED_GENDER(805, "이미 성별이 할당되어 있습니다."), ALREADY_ASSIGNED_BIRTH_YEAR(806, "이미 출생년도가 할당되어 있습니다."), NOT_PASSED_NICKNAME_CHANGING_CYCLE(807, "최소 닉네임 변경주기가 지나지 않았습니다."), NOT_ALLOWED_INITIAL_NICKNAME_PREFIX(808, "초기 닉네임에 포함된 접두어로 닉네임을 변경할 수 없습니다."), + INVALID_VOTE_COUNT(809, "수정 가능한 투표 수는 0이상이어야 합니다."), + NOT_FOUND_METRIC(810, "메트릭 정보가 존재하지 않습니다."), ; private final int code; diff --git a/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepository.java b/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepository.java new file mode 100644 index 000000000..36a0e6786 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepository.java @@ -0,0 +1,10 @@ +package com.votogether.domain.member.repository; + +import com.votogether.domain.member.entity.MemberMetric; +import java.util.List; + +public interface MemberMetricCustomRepository { + + List getTop10MemberMetrics(); + +} diff --git a/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepositoryImpl.java b/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepositoryImpl.java new file mode 100644 index 000000000..d110fd3b3 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricCustomRepositoryImpl.java @@ -0,0 +1,28 @@ +package com.votogether.domain.member.repository; + +import static com.votogether.domain.member.entity.QMember.member; +import static com.votogether.domain.member.entity.QMemberMetric.memberMetric; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.votogether.domain.member.entity.MemberMetric; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@RequiredArgsConstructor +@Repository +public class MemberMetricCustomRepositoryImpl implements MemberMetricCustomRepository { + + private final JPAQueryFactory jpaQueryFactory; + + @Override + public List getTop10MemberMetrics() { + return jpaQueryFactory.selectFrom(memberMetric) + .innerJoin(memberMetric.member, member).fetchJoin() + .orderBy(memberMetric.score.desc()) + .offset(0) + .limit(10) + .fetch(); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricRepository.java b/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricRepository.java new file mode 100644 index 000000000..bcde91430 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/member/repository/MemberMetricRepository.java @@ -0,0 +1,24 @@ +package com.votogether.domain.member.repository; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.entity.MemberMetric; +import jakarta.persistence.LockModeType; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +public interface MemberMetricRepository extends JpaRepository, MemberMetricCustomRepository { + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("SELECT mm FROM MemberMetric mm where mm.member.id = :memberId") + Optional findByMemberIdForUpdate(@Param("memberId") final Long memberId); + + Optional findByMember(final Member member); + + long countByScoreGreaterThan(final long score); + + void deleteByMember(final Member member); + +} diff --git a/backend/src/main/java/com/votogether/domain/member/service/MemberService.java b/backend/src/main/java/com/votogether/domain/member/service/MemberService.java index adc6bdb7f..7c5c1666e 100644 --- a/backend/src/main/java/com/votogether/domain/member/service/MemberService.java +++ b/backend/src/main/java/com/votogether/domain/member/service/MemberService.java @@ -1,13 +1,21 @@ package com.votogether.domain.member.service; +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.AlarmRepository; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.dto.request.MemberDetailRequest; import com.votogether.domain.member.dto.response.MemberInfoResponse; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.MemberCategory; +import com.votogether.domain.member.entity.MemberMetric; import com.votogether.domain.member.entity.vo.Nickname; import com.votogether.domain.member.exception.MemberExceptionType; import com.votogether.domain.member.repository.MemberCategoryRepository; +import com.votogether.domain.member.repository.MemberMetricRepository; import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.domain.notice.entity.Notice; +import com.votogether.domain.notice.repository.NoticeRepository; import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.entity.comment.Comment; import com.votogether.domain.post.repository.CommentRepository; @@ -19,6 +27,7 @@ import com.votogether.domain.vote.repository.VoteRepository; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; +import java.time.LocalDateTime; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -32,11 +41,15 @@ public class MemberService { private static final Long NICKNAME_CHANGING_CYCLE = 14L; private final MemberRepository memberRepository; + private final MemberMetricRepository memberMetricRepository; private final MemberCategoryRepository memberCategoryRepository; private final PostRepository postRepository; private final VoteRepository voteRepository; private final ReportRepository reportRepository; private final CommentRepository commentRepository; + private final AlarmRepository alarmRepository; + private final ReportActionAlarmRepository reportActionAlarmRepository; + private final NoticeRepository noticeRepository; @Transactional public Member register(final Member member) { @@ -44,29 +57,64 @@ public Member register(final Member member) { member.getSocialId(), member.getSocialType() ); - return maybeMember.orElseGet(() -> memberRepository.save(member)); + return maybeMember.orElseGet(() -> { + final Member savedMember = memberRepository.save(member); + final MemberMetric memberMetric = MemberMetric.builder() + .member(member) + .postCount(0) + .voteCount(0) + .score(0) + .build(); + memberMetricRepository.save(memberMetric); + return savedMember; + }); } @Transactional(readOnly = true) public Member findById(final Long memberId) { return memberRepository.findById(memberId) - .orElseThrow(() -> new NotFoundException(MemberExceptionType.NONEXISTENT_MEMBER)); + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NON_EXISTENT_MEMBER)); } @Transactional(readOnly = true) public MemberInfoResponse findMemberInfo(final Member member) { - final int numberOfPosts = postRepository.countByWriter(member); - final int numberOfVotes = voteRepository.countByMember(member); + final MemberMetric memberMetric = memberMetricRepository.findByMember(member) + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NOT_FOUND_METRIC)); + final boolean hasLatestAlarm = hasLatestAlarm(member); return new MemberInfoResponse( member.getNickname(), member.getGender(), member.getBirthYear(), - numberOfPosts, - numberOfVotes + memberMetric.getPostCount(), + memberMetric.getVoteCount(), + member.getRoles(), + hasLatestAlarm ); } + private boolean hasLatestAlarm(final Member member) { + final Optional maybeAlarm = alarmRepository.findTopByMemberOrderByIdDesc(member); + final Optional maybeReportActionAlarm = + reportActionAlarmRepository.findTopByMemberOrderByIdDesc(member); + final List> maybeCreatedAts = List.of( + maybeAlarm.map(Alarm::getCreatedAt), + maybeReportActionAlarm.map(ReportActionAlarm::getCreatedAt) + ); + + return getLatestAlarmCreatedAt(maybeCreatedAts, member); + } + + private boolean getLatestAlarmCreatedAt( + final List> maybeCreatedAts, + final Member member + ) { + return maybeCreatedAts.stream() + .filter(Optional::isPresent) + .map(Optional::get) + .anyMatch(member::hasLatestAlarmCompareTo); + } + @Transactional public void changeNickname(final Member member, final String nickname) { validateExistentNickname(nickname); @@ -95,6 +143,11 @@ private void validateExistentDetails(final Member member) { } } + @Transactional + public void checkLatestAlarm(final Member member) { + member.checkAlarm(); + } + @Transactional public void deleteMember(final Member member) { final List posts = deletePosts(member); @@ -102,7 +155,11 @@ public void deleteMember(final Member member) { deleteVotes(member); deleteMemberCategories(member); deleteReports(member, posts, comments); + deleteAlarms(member); + deleteReportActionAlarms(member); + deleteNotices(member); + memberMetricRepository.deleteByMember(member); memberRepository.delete(member); } @@ -188,4 +245,29 @@ private void deleteReportByMember(final Member member) { .toList(); reportRepository.deleteAllById(reportIdsByMember); } + + private void deleteAlarms(final Member member) { + final List alarmIds = alarmRepository.findAllByMember(member) + .stream() + .map(Alarm::getId) + .toList(); + alarmRepository.deleteAllById(alarmIds); + } + + private void deleteReportActionAlarms(final Member member) { + final List reportActionAlarmIds = reportActionAlarmRepository.findAllByMember(member) + .stream() + .map(ReportActionAlarm::getId) + .toList(); + reportActionAlarmRepository.deleteAllById(reportActionAlarmIds); + } + + private void deleteNotices(final Member member) { + final List noticeIds = noticeRepository.findAllByMember(member) + .stream() + .map(Notice::getId) + .toList(); + noticeRepository.deleteAllById(noticeIds); + } + } diff --git a/backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandController.java b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandController.java new file mode 100644 index 000000000..c6ab8a3c7 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandController.java @@ -0,0 +1,55 @@ +package com.votogether.domain.notice.controller; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.dto.request.NoticeRequest; +import com.votogether.domain.notice.service.NoticeCommandService; +import com.votogether.global.jwt.Auth; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Positive; +import java.net.URI; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Validated +@RequiredArgsConstructor +@RequestMapping("/notices") +@RestController +public class NoticeCommandController implements NoticeCommandControllerDocs { + + private final NoticeCommandService noticeCommandService; + + @PostMapping + public ResponseEntity createNotice( + @RequestBody @Valid final NoticeRequest noticeRequest, + @Auth final Member loginMember + ) { + final Long noticeId = noticeCommandService.createNotice(noticeRequest, loginMember); + return ResponseEntity.created(URI.create("/notices/" + noticeId)).build(); + } + + @PutMapping("/{id}") + public ResponseEntity updateNotice( + @PathVariable("id") @Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId, + @RequestBody @Valid final NoticeRequest noticeRequest + ) { + noticeCommandService.updateNotice(noticeId, noticeRequest); + return ResponseEntity.noContent().build(); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteNotice( + @PathVariable("id") @Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId + ) { + noticeCommandService.deleteNotice(noticeId); + return ResponseEntity.noContent().build(); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandControllerDocs.java b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandControllerDocs.java new file mode 100644 index 000000000..4cf948299 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeCommandControllerDocs.java @@ -0,0 +1,108 @@ +package com.votogether.domain.notice.controller; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.dto.request.NoticeRequest; +import com.votogether.global.exception.ExceptionResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Positive; +import org.springframework.http.ResponseEntity; + +@Tag(name = "공지사항 커맨드", description = "공지사항 커맨드 API") +public interface NoticeCommandControllerDocs { + + @Operation( + summary = "공지사항 생성", + description = "공지사항을 생성합니다." + ) + @ApiResponses({ + @ApiResponse( + responseCode = "201", + description = "공지사항 생성 성공" + ), + @ApiResponse( + responseCode = "400", + description = """ + 1.공지사항 제목이 존재하지 않거나 공백인 경우 + + 2.공지사항 내용이 존재하지 않거나 공백인 경우 + + 3.공지사항 배너 마감기한이 존재하지 않은 경우 + + 4.공지사항 제목 길이가 유효하지 않은 경우 + + 5.공지사항 내용 길이가 유효하지 않은 경우 + + 6.공지사항 배너 제목 길이가 유효하지 않은 경우 + + 7.공지사항 배너 부제목 길이가 유효하지 않은 경우 + """, + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity createNotice(@Valid final NoticeRequest noticeRequest, final Member loginMember); + + @Operation( + summary = "공지사항 수정", + description = "공지사항을 수정합니다." + ) + @ApiResponses({ + @ApiResponse( + responseCode = "204", + description = "공지사항 수정 성공" + ), + @ApiResponse( + responseCode = "400", + description = """ + 1.공지사항 ID가 양수가 아닌 경우 + + 2.공지사항 제목이 존재하지 않거나 공백인 경우 + + 3.공지사항 내용이 존재하지 않거나 공백인 경우 + + 4.공지사항 배너 마감기한이 존재하지 않은 경우 + + 5.공지사항 제목 길이가 유효하지 않은 경우 + + 6.공지사항 내용 길이가 유효하지 않은 경우 + + 7.공지사항 배너 제목 길이가 유효하지 않은 경우 + + 8.공지사항 배너 부제목 길이가 유효하지 않은 경우 + """, + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ), + @ApiResponse( + responseCode = "404", + description = "공지사항이 존재하지 않은 경우", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity updateNotice( + @Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId, + @Valid final NoticeRequest noticeRequest + ); + + @Operation( + summary = "공지사항 삭제", + description = "공지사항을 삭제합니다." + ) + @ApiResponses({ + @ApiResponse( + responseCode = "204", + description = "공지사항 삭제 성공" + ), + @ApiResponse( + responseCode = "400", + description = "공지사항 ID가 양수가 아닌 경우", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity deleteNotice(@Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId); + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryController.java b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryController.java new file mode 100644 index 000000000..30a6c448f --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryController.java @@ -0,0 +1,47 @@ +package com.votogether.domain.notice.controller; + +import com.votogether.domain.notice.dto.response.NoticePageResponse; +import com.votogether.domain.notice.dto.response.NoticeResponse; +import com.votogether.domain.notice.service.NoticeQueryService; +import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.PositiveOrZero; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Validated +@RequiredArgsConstructor +@RequestMapping("/notices") +@RestController +public class NoticeQueryController implements NoticeQueryControllerDocs { + + private final NoticeQueryService noticeQueryService; + + @GetMapping("/progress") + public ResponseEntity getProgressNotice() { + final NoticeResponse response = noticeQueryService.getProgressNotice(); + return ResponseEntity.ok(response); + } + + @GetMapping + public ResponseEntity getNotices( + @RequestParam @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page + ) { + final NoticePageResponse response = noticeQueryService.getNotices(page); + return ResponseEntity.ok(response); + } + + @GetMapping("/{id}") + public ResponseEntity getNotice( + @PathVariable("id") @Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId + ) { + final NoticeResponse response = noticeQueryService.getNotice(noticeId); + return ResponseEntity.ok(response); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryControllerDocs.java b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryControllerDocs.java new file mode 100644 index 000000000..1b6c1f19b --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/controller/NoticeQueryControllerDocs.java @@ -0,0 +1,61 @@ +package com.votogether.domain.notice.controller; + +import com.votogether.domain.notice.dto.response.NoticePageResponse; +import com.votogether.domain.notice.dto.response.NoticeResponse; +import com.votogether.global.exception.ExceptionResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.PositiveOrZero; +import org.springframework.http.ResponseEntity; + +@Tag(name = "공지사항 쿼리", description = "공지사항 쿼리 API") +public interface NoticeQueryControllerDocs { + + @Operation( + summary = "배너 공지사항 조회", + description = "배너 공지사항을 조회합니다." + ) + @ApiResponse( + responseCode = "200", + description = "배너 공지사항 조회 성공" + ) + ResponseEntity getProgressNotice(); + + @Operation( + summary = "공지사항 목록 조회", + description = "공지사항 목록을 조회합니다." + ) + @ApiResponse( + responseCode = "200", + description = "공지사항 목록 조회 성공" + ) + ResponseEntity getNotices(@PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page); + + @Operation( + summary = "공지사항 상세 조회", + description = "공지사항 상세 정보를 조회합니다." + ) + @ApiResponses({ + @ApiResponse( + responseCode = "200", + description = "공지사항 상세 조회 성공" + ), + @ApiResponse( + responseCode = "400", + description = "공지사항 ID가 양수가 아닌 경우", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ), + @ApiResponse( + responseCode = "404", + description = "공지사항이 존재하지 않은 경우", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity getNotice(@Positive(message = "공지사항 ID는 양수만 가능합니다.") final Long noticeId); + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/dto/request/NoticeRequest.java b/backend/src/main/java/com/votogether/domain/notice/dto/request/NoticeRequest.java new file mode 100644 index 000000000..0d06557cc --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/dto/request/NoticeRequest.java @@ -0,0 +1,31 @@ +package com.votogether.domain.notice.dto.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +@Schema(description = "공지사항 생성 요청") +public record NoticeRequest( + @Schema(description = "공지사항 제목", example = "제목") + @NotBlank(message = "공지사항 제목을 입력하지 않았습니다.") + String title, + + @Schema(description = "공지사항 배너 제목", example = "배너 제목") + String bannerTitle, + + @Schema(description = "공지사항 배너 부제목", example = "배너 부제목") + String bannerSubtitle, + + @Schema(description = "공지사항 내용", example = "내용") + @NotBlank(message = "공지사항 내용을 입력하지 않았습니다.") + String content, + + @Schema(description = "배너 노출 마감기한", example = "2023-12-25 23:59") + @NotNull(message = "배너 노출 마감기한을 입력하지 않았습니다.") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "Asia/Seoul") + LocalDateTime deadline +) { +} diff --git a/backend/src/main/java/com/votogether/domain/notice/dto/response/NoticePageResponse.java b/backend/src/main/java/com/votogether/domain/notice/dto/response/NoticePageResponse.java new file mode 100644 index 000000000..2c62ed7c8 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/dto/response/NoticePageResponse.java @@ -0,0 +1,29 @@ +package com.votogether.domain.notice.dto.response; + +import com.votogether.domain.notice.entity.Notice; +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + +@Schema(description = "공지사항 목록 페이징 응답") +public record NoticePageResponse( + @Schema(description = "전체 페이지 수", example = "10") + int totalPageNumber, + + @Schema(description = "현재 페이지", example = "1") + int currentPageNumber, + + @Schema(description = "공지사항 목록") + List notices +) { + + public static NoticePageResponse of(final int totalPage, final int page, final List notices) { + return new NoticePageResponse(totalPage, page, convertToResponses(notices)); + } + + private static List convertToResponses(final List notices) { + return notices.stream() + .map(NoticeResponse::from) + .toList(); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/dto/response/NoticeResponse.java b/backend/src/main/java/com/votogether/domain/notice/dto/response/NoticeResponse.java new file mode 100644 index 000000000..124ffd3a8 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/dto/response/NoticeResponse.java @@ -0,0 +1,50 @@ +package com.votogether.domain.notice.dto.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.votogether.domain.notice.entity.Notice; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; + +@Schema(description = "공지사항 응답") +public record NoticeResponse( + @Schema(description = "공지사항 ID", example = "1") + Long id, + + @Schema(description = "공지사항 제목", example = "제목") + String title, + + @Schema(description = "공지사항 배너 제목", example = "배너 제목") + String bannerTitle, + + @Schema(description = "공지사항 배너 부제목", example = "배너 부제목") + String bannerSubtitle, + + @Schema(description = "공지사항 내용", example = "내용") + String content, + + @Schema(description = "공지사항 배너 마감기한", example = "2023-12-25 23:59") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + LocalDateTime deadline, + + @Schema(description = "공지사항 생성시각", example = "2023-12-25 23:59") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + LocalDateTime createdAt +) { + + public static NoticeResponse empty() { + return new NoticeResponse(null, null, null, null, null, null, null); + } + + public static NoticeResponse from(final Notice notice) { + return new NoticeResponse( + notice.getId(), + notice.getTitle(), + notice.getBannerTitle(), + notice.getBannerSubtitle(), + notice.getContent(), + notice.getDeadline(), + notice.getCreatedAt() + ); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/entity/Notice.java b/backend/src/main/java/com/votogether/domain/notice/entity/Notice.java new file mode 100644 index 000000000..996e3d3ba --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/entity/Notice.java @@ -0,0 +1,89 @@ +package com.votogether.domain.notice.entity; + +import com.votogether.domain.common.BaseEntity; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.entity.vo.BannerTitle; +import com.votogether.domain.notice.entity.vo.Detail; +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Index; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import java.time.LocalDateTime; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@EqualsAndHashCode(of = {"id"}, callSuper = false) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(indexes = {@Index(name = "idx_created", columnList = "createdAt")}) +public class Notice extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id", nullable = false) + private Member member; + + @Embedded + private Detail detail; + + @Embedded + private BannerTitle bannerTitle; + + @Column(columnDefinition = "datetime(6)", nullable = false) + private LocalDateTime deadline; + + @Builder + private Notice( + final Member member, + final String title, + final String bannerTitle, + final String bannerSubtitle, + final String content, + final LocalDateTime deadline + ) { + this.member = member; + this.detail = new Detail(title, content); + this.bannerTitle = new BannerTitle(bannerTitle, bannerSubtitle); + this.deadline = deadline; + } + + public void update( + final Detail detail, + final BannerTitle bannerTitle, + final LocalDateTime deadline + ) { + this.detail = detail; + this.bannerTitle = bannerTitle; + this.deadline = deadline; + } + + public String getTitle() { + return this.detail.getTitle(); + } + + public String getContent() { + return this.detail.getContent(); + } + + public String getBannerTitle() { + return this.bannerTitle.getBannerTitle(); + } + + public String getBannerSubtitle() { + return this.bannerTitle.getBannerSubtitle(); + } +} diff --git a/backend/src/main/java/com/votogether/domain/notice/entity/vo/BannerTitle.java b/backend/src/main/java/com/votogether/domain/notice/entity/vo/BannerTitle.java new file mode 100644 index 000000000..d967bb50c --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/entity/vo/BannerTitle.java @@ -0,0 +1,43 @@ +package com.votogether.domain.notice.entity.vo; + +import com.votogether.domain.notice.exception.NoticeExceptionType; +import com.votogether.global.exception.BadRequestException; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Embeddable +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class BannerTitle { + + private static final int MAXIMUM_TITLE_LENGTH = 100; + + @Column(length = MAXIMUM_TITLE_LENGTH) + private String bannerTitle; + + @Column(length = MAXIMUM_TITLE_LENGTH) + private String bannerSubtitle; + + public BannerTitle(final String bannerTitle, final String bannerSubtitle) { + validate(bannerTitle); + validate(bannerSubtitle); + this.bannerTitle = bannerTitle; + this.bannerSubtitle = bannerSubtitle; + } + + private void validate(final String title) { + if (title == null) { + return; + } + if (title.isBlank()) { + throw new BadRequestException(NoticeExceptionType.EMPTY_BANNER_TITLE); + } + if (title.length() > MAXIMUM_TITLE_LENGTH) { + throw new BadRequestException(NoticeExceptionType.INVALID_BANNER_TITLE_LENGTH); + } + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/entity/vo/Detail.java b/backend/src/main/java/com/votogether/domain/notice/entity/vo/Detail.java new file mode 100644 index 000000000..a83068e68 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/entity/vo/Detail.java @@ -0,0 +1,50 @@ +package com.votogether.domain.notice.entity.vo; + +import com.votogether.domain.notice.exception.NoticeExceptionType; +import com.votogether.global.exception.BadRequestException; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Embeddable +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Detail { + + private static final int MAXIMUM_TITLE_LENGTH = 100; + private static final int MAXIMUM_CONTENT_LENGTH = 3000; + + @Column(nullable = false, length = MAXIMUM_TITLE_LENGTH) + private String title; + + @Column(nullable = false, length = MAXIMUM_CONTENT_LENGTH) + private String content; + + public Detail(final String title, final String content) { + validateTitle(title); + validateContent(content); + this.title = title; + this.content = content; + } + + private void validateTitle(final String title) { + if (title == null || title.isBlank()) { + throw new BadRequestException(NoticeExceptionType.EMPTY_TITLE); + } + if (title.length() > MAXIMUM_TITLE_LENGTH) { + throw new BadRequestException(NoticeExceptionType.INVALID_TITLE_LENGTH); + } + } + + private void validateContent(final String content) { + if (content == null || content.isBlank()) { + throw new BadRequestException(NoticeExceptionType.EMPTY_CONTENT); + } + if (content.length() > MAXIMUM_CONTENT_LENGTH) { + throw new BadRequestException(NoticeExceptionType.INVALID_CONTENT_LENGTH); + } + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/exception/NoticeExceptionType.java b/backend/src/main/java/com/votogether/domain/notice/exception/NoticeExceptionType.java new file mode 100644 index 000000000..808e7fe64 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/exception/NoticeExceptionType.java @@ -0,0 +1,26 @@ +package com.votogether.domain.notice.exception; + +import com.votogether.global.exception.ExceptionType; +import lombok.Getter; + +@Getter +public enum NoticeExceptionType implements ExceptionType { + + EMPTY_TITLE(1100, "공지사항 제목이 존재하지 않거나 공백입니다."), + EMPTY_CONTENT(1101, "공지사항 내용이 존재하지 않거나 공백입니다."), + INVALID_TITLE_LENGTH(1102, "공지사항 제목의 길이가 유효하지 않습니다."), + INVALID_CONTENT_LENGTH(1103, "공지사항 내용의 길이가 유효하지 않습니다."), + INVALID_BANNER_TITLE_LENGTH(1104, "공지사항 배너 제목의 길이가 유효하지 않습니다."), + NOT_FOUND(1105, "공지사항이 존재하지 않습니다."), + EMPTY_BANNER_TITLE(1106, "공지사항 배너 제목이 공백으로 이루어져 있습니다."), + ; + + private final int code; + private final String message; + + NoticeExceptionType(final int code, final String message) { + this.code = code; + this.message = message; + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/repository/NoticeRepository.java b/backend/src/main/java/com/votogether/domain/notice/repository/NoticeRepository.java new file mode 100644 index 000000000..7dcdc246c --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/repository/NoticeRepository.java @@ -0,0 +1,19 @@ +package com.votogether.domain.notice.repository; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.entity.Notice; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface NoticeRepository extends JpaRepository { + + Optional findFirstByDeadlineAfterOrderByIdDesc(final LocalDateTime now); + + List findAllByOrderByIdDesc(final Pageable pageable); + + List findAllByMember(final Member member); + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/service/NoticeCommandService.java b/backend/src/main/java/com/votogether/domain/notice/service/NoticeCommandService.java new file mode 100644 index 000000000..cae6e7852 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/service/NoticeCommandService.java @@ -0,0 +1,48 @@ +package com.votogether.domain.notice.service; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.dto.request.NoticeRequest; +import com.votogether.domain.notice.entity.Notice; +import com.votogether.domain.notice.entity.vo.BannerTitle; +import com.votogether.domain.notice.entity.vo.Detail; +import com.votogether.domain.notice.exception.NoticeExceptionType; +import com.votogether.domain.notice.repository.NoticeRepository; +import com.votogether.global.exception.NotFoundException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional +@Service +public class NoticeCommandService { + + private final NoticeRepository noticeRepository; + + public Long createNotice(final NoticeRequest noticeRequest, final Member loginMember) { + final Notice notice = Notice.builder() + .member(loginMember) + .title(noticeRequest.title()) + .bannerTitle(noticeRequest.bannerTitle()) + .bannerSubtitle(noticeRequest.bannerSubtitle()) + .content(noticeRequest.content()) + .deadline(noticeRequest.deadline()) + .build(); + return noticeRepository.save(notice).getId(); + } + + public void updateNotice(final Long noticeId, final NoticeRequest noticeRequest) { + final Notice notice = noticeRepository.findById(noticeId) + .orElseThrow(() -> new NotFoundException(NoticeExceptionType.NOT_FOUND)); + notice.update( + new Detail(noticeRequest.title(), noticeRequest.content()), + new BannerTitle(noticeRequest.bannerTitle(), noticeRequest.bannerSubtitle()), + noticeRequest.deadline() + ); + } + + public void deleteNotice(final Long noticeId) { + noticeRepository.deleteById(noticeId); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/notice/service/NoticeQueryService.java b/backend/src/main/java/com/votogether/domain/notice/service/NoticeQueryService.java new file mode 100644 index 000000000..5a4319146 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/notice/service/NoticeQueryService.java @@ -0,0 +1,50 @@ +package com.votogether.domain.notice.service; + +import com.votogether.domain.notice.dto.response.NoticePageResponse; +import com.votogether.domain.notice.dto.response.NoticeResponse; +import com.votogether.domain.notice.entity.Notice; +import com.votogether.domain.notice.exception.NoticeExceptionType; +import com.votogether.domain.notice.repository.NoticeRepository; +import com.votogether.global.exception.NotFoundException; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional(readOnly = true) +@Service +public class NoticeQueryService { + + private static final int DEFAULT_PAGE_SIZE = 10; + + private final NoticeRepository noticeRepository; + + public NoticeResponse getProgressNotice() { + final LocalDateTime now = LocalDateTime.now(); + final Optional notice = noticeRepository.findFirstByDeadlineAfterOrderByIdDesc(now); + if (notice.isPresent()) { + return NoticeResponse.from(notice.get()); + } + return NoticeResponse.empty(); + } + + public NoticePageResponse getNotices(final int page) { + final Pageable pageable = PageRequest.of(page, DEFAULT_PAGE_SIZE); + final List notices = noticeRepository.findAllByOrderByIdDesc(pageable); + final long noticeTotalCount = noticeRepository.count(); + final int totalPage = (int) Math.ceil((double) noticeTotalCount / DEFAULT_PAGE_SIZE); + return NoticePageResponse.of(totalPage, page, notices); + } + + public NoticeResponse getNotice(final Long noticeId) { + final Notice notice = noticeRepository.findById(noticeId) + .orElseThrow(() -> new NotFoundException(NoticeExceptionType.NOT_FOUND)); + return NoticeResponse.from(notice); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/post/controller/PostCommandController.java b/backend/src/main/java/com/votogether/domain/post/controller/PostCommandController.java index b34687516..dd5b530c4 100644 --- a/backend/src/main/java/com/votogether/domain/post/controller/PostCommandController.java +++ b/backend/src/main/java/com/votogether/domain/post/controller/PostCommandController.java @@ -25,7 +25,7 @@ @RequiredArgsConstructor @RequestMapping("/posts") @RestController -public class PostCommandController { +public class PostCommandController implements PostCommandControllerDocs { private final PostCommandService postCommandService; diff --git a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostOptionVoteResultResponse.java b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostOptionVoteResultResponse.java index 1801b6d44..2388a3c10 100644 --- a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostOptionVoteResultResponse.java +++ b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostOptionVoteResultResponse.java @@ -49,6 +49,9 @@ private static long countVotesForUser( final PostOption postOption, final boolean isVoted ) { + if (post.isHidden() && post.isWriter(user)) { + return HIDDEN_COUNT; + } if (post.isClosed() || post.isWriter(user) || isVoted) { return postOption.getVoteCount(); } diff --git a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostResponse.java b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostResponse.java index 9a81fb8ea..efea39b5f 100644 --- a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostResponse.java +++ b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostResponse.java @@ -61,7 +61,8 @@ public static PostResponse ofUser( final List postCategories, final PostContentImage postContentImage, final List postOptions, - final Optional vote + final Optional vote, + final long commentCount ) { postOptions.sort(Comparator.comparingInt(PostOption::getSequence)); return new PostResponse( @@ -74,7 +75,7 @@ public static PostResponse ofUser( post.getCreatedAt(), post.getDeadline(), calculateImageCount(postContentImage, postOptions), - post.getCommentCount(), + commentCount, PostVoteResultResponse.ofUser(user, post, postOptions, vote) ); } @@ -115,7 +116,8 @@ public static PostResponse ofGuest( final Post post, final List postCategories, final PostContentImage postContentImage, - final List postOptions + final List postOptions, + final long commentCount ) { postOptions.sort(Comparator.comparingInt(PostOption::getSequence)); return new PostResponse( @@ -128,7 +130,7 @@ public static PostResponse ofGuest( post.getCreatedAt(), post.getDeadline(), calculateImageCount(postContentImage, postOptions), - post.getCommentCount(), + commentCount, PostVoteResultResponse.ofGuest(post, postOptions) ); } diff --git a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostSummaryResponse.java b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostSummaryResponse.java index c4130adbe..504b4bb3e 100644 --- a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostSummaryResponse.java +++ b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostSummaryResponse.java @@ -1,7 +1,6 @@ package com.votogether.domain.post.dto.response.post; import com.votogether.domain.post.entity.Post; -import com.votogether.domain.post.entity.PostOption; import io.swagger.v3.oas.annotations.media.Schema; @Schema(description = "게시글 간략 정보 응답") @@ -24,15 +23,8 @@ public static PostSummaryResponse from(final Post post) { post.getId(), post.getWriter().getNickname(), post.getPostBody().getTitle(), - calculateTotalVoteCount(post) + post.getVoteCount() ); } - private static long calculateTotalVoteCount(final Post post) { - return post.getPostOptions() - .stream() - .mapToLong(PostOption::getVoteCount) - .sum(); - } - } diff --git a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostVoteResultResponse.java b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostVoteResultResponse.java index 1e18a67f3..3332f19a6 100644 --- a/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostVoteResultResponse.java +++ b/backend/src/main/java/com/votogether/domain/post/dto/response/post/PostVoteResultResponse.java @@ -29,7 +29,7 @@ public static PostVoteResultResponse ofUser( final List postOptions, final Optional vote ) { - final long totalVoteCount = countTotalVoteCount(postOptions); + final long totalVoteCount = post.getVoteCount(); return new PostVoteResultResponse( findSelectedOption(vote), countVotesForUser(user, post, vote.isPresent(), totalVoteCount), @@ -37,12 +37,6 @@ public static PostVoteResultResponse ofUser( ); } - private static long countTotalVoteCount(final List postOptions) { - return postOptions.stream() - .mapToLong(PostOption::getVoteCount) - .sum(); - } - private static Long findSelectedOption(final Optional vote) { if (vote.isEmpty()) { return NOT_SELECTED; @@ -56,6 +50,9 @@ private static long countVotesForUser( final boolean isVoted, final long totalVoteCount ) { + if (post.isHidden() && post.isWriter(user)) { + return HIDDEN_COUNT; + } if (post.isClosed() || post.isWriter(user) || isVoted) { return totalVoteCount; } @@ -75,7 +72,7 @@ private static List convertToUserResponses( } public static PostVoteResultResponse ofGuest(final Post post, final List postOptions) { - final long totalVoteCount = countTotalVoteCount(postOptions); + final long totalVoteCount = post.getVoteCount(); return new PostVoteResultResponse( NOT_SELECTED, countVotesForGuest(post, totalVoteCount), diff --git a/backend/src/main/java/com/votogether/domain/post/entity/Post.java b/backend/src/main/java/com/votogether/domain/post/entity/Post.java index 23db98174..b20a66b8d 100644 --- a/backend/src/main/java/com/votogether/domain/post/entity/Post.java +++ b/backend/src/main/java/com/votogether/domain/post/entity/Post.java @@ -17,9 +17,11 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.Index; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -29,12 +31,12 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; -import org.hibernate.annotations.Formula; @Getter @Entity @EqualsAndHashCode(of = {"id"}, callSuper = false) @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Table(indexes = {@Index(name = "idx_vote_count", columnList = "voteCount")}) public class Post extends BaseEntity { private static final int MAXIMUM_POST_OPTION_SIZE = 5; @@ -51,15 +53,15 @@ public class Post extends BaseEntity { @Embedded private PostBody postBody; + @Column(nullable = false) + private long voteCount; + @Embedded private PostDeadline postDeadline; @Column(nullable = false) private boolean isHidden; - @Formula("(select count(*) from comment c where c.post_id = id)") - private long commentCount; - @OneToMany(mappedBy = "post", cascade = CascadeType.PERSIST, orphanRemoval = true) private List postCategories = new ArrayList<>(); @@ -77,10 +79,12 @@ private Post( final Member writer, final String title, final String content, + final long voteCount, final LocalDateTime deadline ) { this.writer = writer; this.postBody = new PostBody(title, content); + this.voteCount = voteCount; this.postDeadline = new PostDeadline(deadline); this.isHidden = false; } @@ -124,6 +128,14 @@ public void update(final String title, final String content, final LocalDateTime this.postDeadline = new PostDeadline(deadline); } + public void increaseVoteCount() { + this.voteCount += 1; + } + + public void decreaseVoteCount() { + this.voteCount -= 1; + } + public void closeEarly() { this.postDeadline.close(); } @@ -205,10 +217,4 @@ public PostContentImage getFirstContentImage() { return postContentImages.get(0); } - public long getTotalVoteCount() { - return postOptions.stream() - .mapToLong(PostOption::getVoteCount) - .sum(); - } - } diff --git a/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java b/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java index d97a1cd91..502d219fa 100644 --- a/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java +++ b/backend/src/main/java/com/votogether/domain/post/entity/PostOption.java @@ -24,7 +24,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.hibernate.annotations.Formula; @Getter @Entity @@ -52,7 +51,7 @@ public class PostOption extends BaseEntity { @Column private String imageUrl; - @Formula("(select count(*) from vote v where v.post_option_id = id)") + @Column(nullable = false) private long voteCount; @OneToMany(mappedBy = "postOption", cascade = CascadeType.PERSIST, orphanRemoval = true) @@ -63,12 +62,14 @@ private PostOption( final Post post, final int sequence, final String content, - final String imageUrl + final String imageUrl, + final long voteCount ) { this.post = post; this.sequence = sequence; this.postOptionBody = new PostOptionBody(content); this.imageUrl = imageUrl; + this.voteCount = voteCount; } public void addVote(final Vote vote) { @@ -81,6 +82,14 @@ public void update(final String content, final String imageUrl) { this.imageUrl = imageUrl; } + public void increaseVoteCount() { + this.voteCount += 1; + } + + public void decreaseVoteCount() { + this.voteCount -= 1; + } + public boolean belongsTo(final Post post) { return Objects.equals(this.post.getId(), post.getId()); } diff --git a/backend/src/main/java/com/votogether/domain/post/repository/CommentRepository.java b/backend/src/main/java/com/votogether/domain/post/repository/CommentRepository.java index 2d28a9794..ed96c65d8 100644 --- a/backend/src/main/java/com/votogether/domain/post/repository/CommentRepository.java +++ b/backend/src/main/java/com/votogether/domain/post/repository/CommentRepository.java @@ -13,7 +13,7 @@ public interface CommentRepository extends JpaRepository { @EntityGraph(attributePaths = {"writer"}) - List findAllByPostAndIsHiddenFalseOrderByCreatedAtAsc(final Post post); + List findAllByPostAndIsHiddenFalseOrderByIdAsc(final Post post); List findAllByWriter(final Member writer); diff --git a/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepository.java b/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepository.java index 015230e29..ae3e823b5 100644 --- a/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepository.java +++ b/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepository.java @@ -4,11 +4,15 @@ import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.entity.vo.PostClosingType; import com.votogether.domain.post.entity.vo.PostSortType; +import com.votogether.domain.post.repository.dto.PostCommentCountDto; import java.util.List; +import java.util.Set; import org.springframework.data.domain.Pageable; public interface PostCustomRepository { + List getCommentCountsInPosts(final Set postIds); + List findPostsWithFilteringAndPaging( final PostClosingType postClosingType, final PostSortType postSortType, diff --git a/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepositoryImpl.java b/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepositoryImpl.java index d69c64a67..02191d7df 100644 --- a/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepositoryImpl.java +++ b/backend/src/main/java/com/votogether/domain/post/repository/PostCustomRepositoryImpl.java @@ -3,20 +3,22 @@ import static com.votogether.domain.post.entity.QPost.post; import static com.votogether.domain.post.entity.QPostCategory.postCategory; import static com.votogether.domain.post.entity.QPostOption.postOption; +import static com.votogether.domain.post.entity.comment.QComment.comment; import static com.votogether.domain.vote.entity.QVote.vote; -import com.querydsl.core.types.Order; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQueryFactory; import com.votogether.domain.member.entity.Member; import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.entity.vo.PostClosingType; import com.votogether.domain.post.entity.vo.PostSortType; +import com.votogether.domain.post.repository.dto.PostCommentCountDto; +import com.votogether.domain.post.repository.dto.QPostCommentCountDto; import com.votogether.global.persistence.OrderByNull; import java.time.LocalDateTime; import java.util.List; +import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; @@ -27,6 +29,21 @@ public class PostCustomRepositoryImpl implements PostCustomRepository { private final JPAQueryFactory jpaQueryFactory; + @Override + public List getCommentCountsInPosts(final Set postIds) { + return jpaQueryFactory.select( + new QPostCommentCountDto( + post.id, + comment.count() + ) + ) + .from(post) + .innerJoin(comment).on(comment.post.eq(post)) + .where(post.id.in(postIds)) + .groupBy(post.id) + .fetch(); + } + @Override public List findPostsWithFilteringAndPaging( final PostClosingType postClosingType, @@ -50,6 +67,10 @@ public List findPostsWithFilteringAndPaging( .fetch(); } + private BooleanExpression categoryIdEq(final Long categoryId) { + return categoryId == null ? null : postCategory.category.id.eq(categoryId); + } + @Override public List findPostsByWriterWithFilteringAndPaging( final Member writer, @@ -72,36 +93,6 @@ public List findPostsByWriterWithFilteringAndPaging( .fetch(); } - private BooleanExpression categoryIdEq(final Long categoryId) { - return categoryId == null ? null : postCategory.category.id.eq(categoryId); - } - - private BooleanExpression deadlineEq(final PostClosingType postClosingType) { - final LocalDateTime now = LocalDateTime.now(); - return switch (postClosingType) { - case PROGRESS -> post.postDeadline.deadline.after(now); - case CLOSED -> post.postDeadline.deadline.before(now); - default -> null; - }; - } - - private OrderSpecifier orderBy(final PostSortType postSortType) { - return switch (postSortType) { - case LATEST -> post.createdAt.desc(); - case HOT -> new OrderSpecifier<>( - Order.DESC, - JPAExpressions.select(vote.id.count()) - .from(vote) - .where(vote.postOption.id.in( - JPAExpressions.select(postOption.id) - .from(postOption) - .where(postOption.post.id.eq(post.id)) - )) - ); - default -> OrderByNull.DEFAULT; - }; - } - @Override public List findSearchPostsWithFilteringAndPaging( final String keyword, @@ -153,4 +144,21 @@ public List findPostsByVotedWithFilteringAndPaging( .fetch(); } + private BooleanExpression deadlineEq(final PostClosingType postClosingType) { + final LocalDateTime now = LocalDateTime.now(); + return switch (postClosingType) { + case PROGRESS -> post.postDeadline.deadline.after(now); + case CLOSED -> post.postDeadline.deadline.before(now); + default -> null; + }; + } + + private OrderSpecifier orderBy(final PostSortType postSortType) { + return switch (postSortType) { + case LATEST -> post.id.desc(); + case HOT -> post.voteCount.desc(); + default -> OrderByNull.DEFAULT; + }; + } + } diff --git a/backend/src/main/java/com/votogether/domain/post/repository/PostOptionRepository.java b/backend/src/main/java/com/votogether/domain/post/repository/PostOptionRepository.java index fc63abf05..a54c18a21 100644 --- a/backend/src/main/java/com/votogether/domain/post/repository/PostOptionRepository.java +++ b/backend/src/main/java/com/votogether/domain/post/repository/PostOptionRepository.java @@ -1,7 +1,10 @@ package com.votogether.domain.post.repository; import com.votogether.domain.post.entity.PostOption; +import jakarta.persistence.LockModeType; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -12,4 +15,7 @@ public interface PostOptionRepository extends JpaRepository { @Query("delete from PostOption p where p.post.id = :postId") void deleteAllWithPostIdInBatch(@Param("postId") final Long postId); + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("SELECT po FROM PostOption po where po.id = :postOptionId") + Optional findByIdForUpdate(@Param("postOptionId") final Long postOptionId); } diff --git a/backend/src/main/java/com/votogether/domain/post/repository/PostRepository.java b/backend/src/main/java/com/votogether/domain/post/repository/PostRepository.java index 09ef525fa..112acc18f 100644 --- a/backend/src/main/java/com/votogether/domain/post/repository/PostRepository.java +++ b/backend/src/main/java/com/votogether/domain/post/repository/PostRepository.java @@ -2,22 +2,20 @@ import com.votogether.domain.member.entity.Member; import com.votogether.domain.post.entity.Post; +import jakarta.persistence.LockModeType; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interface PostRepository extends JpaRepository, PostCustomRepository { - @Query("SELECT COUNT(p)" + - "FROM Member m " + - "LEFT JOIN Post p ON m.id = p.writer.id AND p.writer IN :members " + - "WHERE m IN :members " + - "GROUP BY m.id") - List findCountsByMembers(@Param("members") final List members); - List findAllByWriter(final Member member); - int countByWriter(final Member member); + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("SELECT p FROM Post p where p.id = :postId") + Optional findByIdForUpdate(@Param("postId") final Long postId); } diff --git a/backend/src/main/java/com/votogether/domain/post/repository/dto/PostCommentCountDto.java b/backend/src/main/java/com/votogether/domain/post/repository/dto/PostCommentCountDto.java new file mode 100644 index 000000000..cf03d02df --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/post/repository/dto/PostCommentCountDto.java @@ -0,0 +1,13 @@ +package com.votogether.domain.post.repository.dto; + +import com.querydsl.core.annotations.QueryProjection; + +public record PostCommentCountDto( + Long postId, + long commentCount +) { + + @QueryProjection + public PostCommentCountDto { + } +} diff --git a/backend/src/main/java/com/votogether/domain/post/service/PostCommandService.java b/backend/src/main/java/com/votogether/domain/post/service/PostCommandService.java index 8afd4b5fe..f30f89b73 100644 --- a/backend/src/main/java/com/votogether/domain/post/service/PostCommandService.java +++ b/backend/src/main/java/com/votogether/domain/post/service/PostCommandService.java @@ -1,7 +1,12 @@ package com.votogether.domain.post.service; +import com.votogether.domain.alarm.dto.event.PostAlarmEvent; +import com.votogether.domain.alarm.entity.vo.AlarmType; import com.votogether.domain.category.repository.CategoryRepository; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.entity.MemberMetric; +import com.votogether.domain.member.exception.MemberExceptionType; +import com.votogether.domain.member.repository.MemberMetricRepository; import com.votogether.domain.post.dto.request.post.PostCreateRequest; import com.votogether.domain.post.dto.request.post.PostOptionCreateRequest; import com.votogether.domain.post.dto.request.post.PostOptionUpdateRequest; @@ -31,6 +36,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -40,6 +46,8 @@ @Service public class PostCommandService { + private static final String NICKNAME_WHEN_POST_CLOSING = ""; + private final ImageUploader imageUploader; private final PostRepository postRepository; private final CategoryRepository categoryRepository; @@ -49,6 +57,8 @@ public class PostCommandService { private final VoteRepository voteRepository; private final CommentRepository commentRepository; private final ReportRepository reportRepository; + private final MemberMetricRepository memberMetricRepository; + private final ApplicationEventPublisher applicationEventPublisher; public Long createPost(final PostCreateRequest postCreate, final Member loginMember) { final Post post = Post.builder() @@ -62,6 +72,10 @@ public Long createPost(final PostCreateRequest postCreate, final Member loginMem addImage(post, postCreate.getImageFile()); addPostOptions(post, postCreate.getPostOptions()); + final MemberMetric memberMetric = memberMetricRepository.findByMemberIdForUpdate(loginMember.getId()) + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NOT_FOUND_METRIC)); + + memberMetric.increasePostCount(); return postRepository.save(post).getId(); } @@ -294,6 +308,19 @@ public void closePostEarly(final Long postId, final Member loginMember) { validateHiddenPost(post); validatePostWriter(post, loginMember); post.closeEarly(); + + publishAlarmEvent(postId, loginMember, post); + } + + private void publishAlarmEvent(final Long postId, final Member loginMember, final Post post) { + final PostAlarmEvent postAlarmEvent = new PostAlarmEvent( + loginMember, + NICKNAME_WHEN_POST_CLOSING, + postId, + AlarmType.POST_DEADLINE, + post.getTitle() + ); + applicationEventPublisher.publishEvent(postAlarmEvent); } public void deletePost(final Long postId, final Member loginMember) { @@ -309,6 +336,10 @@ public void deletePost(final Long postId, final Member loginMember) { .map(PostContentImage::getImageUrl) .toList(); + final MemberMetric memberMetric = memberMetricRepository.findByMemberIdForUpdate(loginMember.getId()) + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NOT_FOUND_METRIC)); + + memberMetric.decreasePostCount(); deleteVotes(postOptions); deletePostOptions(postId, postOptions); deleteComments(postId); diff --git a/backend/src/main/java/com/votogether/domain/post/service/PostCommentService.java b/backend/src/main/java/com/votogether/domain/post/service/PostCommentService.java index c01ea6024..2b17a2222 100644 --- a/backend/src/main/java/com/votogether/domain/post/service/PostCommentService.java +++ b/backend/src/main/java/com/votogether/domain/post/service/PostCommentService.java @@ -1,5 +1,7 @@ package com.votogether.domain.post.service; +import com.votogether.domain.alarm.dto.event.PostAlarmEvent; +import com.votogether.domain.alarm.entity.vo.AlarmType; import com.votogether.domain.member.entity.Member; import com.votogether.domain.post.dto.request.comment.CommentCreateRequest; import com.votogether.domain.post.dto.request.comment.CommentUpdateRequest; @@ -14,6 +16,7 @@ import com.votogether.global.exception.NotFoundException; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,6 +26,7 @@ public class PostCommentService { private final PostRepository postRepository; private final CommentRepository commentRepository; + private final ApplicationEventPublisher applicationEventPublisher; @Transactional(readOnly = true) public List getComments(final Long postId) { @@ -30,7 +34,7 @@ public List getComments(final Long postId) { .orElseThrow(() -> new NotFoundException(PostExceptionType.NOT_FOUND)); validateHiddenPost(post); - return commentRepository.findAllByPostAndIsHiddenFalseOrderByCreatedAtAsc(post) + return commentRepository.findAllByPostAndIsHiddenFalseOrderByIdAsc(post) .stream() .map(CommentResponse::from) .toList(); @@ -51,6 +55,22 @@ public void createComment( .content(commentCreateRequest.content()) .build(); post.addComment(comment); + + publishAlarmEvent(loginMember, post); + } + + private void publishAlarmEvent(final Member loginMember, final Post post) { + if (post.isWriter(loginMember)) { + return; + } + final PostAlarmEvent postAlarmEvent = new PostAlarmEvent( + post.getWriter(), + loginMember.getNickname(), + post.getId(), + AlarmType.COMMENT, + post.getTitle() + ); + applicationEventPublisher.publishEvent(postAlarmEvent); } @Transactional diff --git a/backend/src/main/java/com/votogether/domain/post/service/PostGuestService.java b/backend/src/main/java/com/votogether/domain/post/service/PostGuestService.java index 86edefe93..7e4d72b23 100644 --- a/backend/src/main/java/com/votogether/domain/post/service/PostGuestService.java +++ b/backend/src/main/java/com/votogether/domain/post/service/PostGuestService.java @@ -9,11 +9,14 @@ import com.votogether.domain.post.exception.PostExceptionType; import com.votogether.domain.post.repository.PostCategoryRepository; import com.votogether.domain.post.repository.PostRepository; +import com.votogether.domain.post.repository.dto.PostCommentCountDto; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -48,11 +51,13 @@ public PostResponse getPost(final Long postId) { .orElseThrow(() -> new NotFoundException(PostExceptionType.NOT_FOUND)); validateHiddenPost(post); + final Map postCommentCountMapper = generatePostCommentCountMapper(List.of(post)); return PostResponse.ofGuest( post, postCategoryRepository.findAllByPost(post), post.getFirstContentImage(), - post.getPostOptions() + post.getPostOptions(), + postCommentCountMapper.getOrDefault(post.getId(), 0L) ); } @@ -76,18 +81,32 @@ private void validateHiddenPost(final Post post) { } private List convertToResponses(final List posts) { + final Map postCommentCountMapper = generatePostCommentCountMapper(posts); return posts.stream() .map(post -> PostResponse.ofGuest( post, postCategoryRepository.findAllByPost(post), post.getFirstContentImage(), - post.getPostOptions() + post.getPostOptions(), + postCommentCountMapper.getOrDefault(post.getId(), 0L) ) ) .toList(); } + private Map generatePostCommentCountMapper(final List posts) { + final List postCommentCountDtos = + postRepository.getCommentCountsInPosts(posts.stream().map(Post::getId).collect(Collectors.toSet())); + return postCommentCountDtos.stream() + .collect(Collectors.toMap( + PostCommentCountDto::postId, + PostCommentCountDto::commentCount, + (exist, replace) -> replace, + HashMap::new + )); + } + @Transactional(readOnly = true) public List getRanking() { final Pageable pageable = PageRequest.of(0, BASIC_PAGE_SIZE); @@ -117,7 +136,7 @@ private Map calculateRanking(final List posts) { int previousRanking = -1; long previousVoteCount = -1; for (Post post : posts) { - final long currentVoteCount = post.getTotalVoteCount(); + final long currentVoteCount = post.getVoteCount(); final int ranking = (currentVoteCount == previousVoteCount) ? previousRanking : currentRanking; rankings.put(post, ranking); diff --git a/backend/src/main/java/com/votogether/domain/post/service/PostQueryService.java b/backend/src/main/java/com/votogether/domain/post/service/PostQueryService.java index 309594ecc..992507386 100644 --- a/backend/src/main/java/com/votogether/domain/post/service/PostQueryService.java +++ b/backend/src/main/java/com/votogether/domain/post/service/PostQueryService.java @@ -12,11 +12,15 @@ import com.votogether.domain.post.repository.PostCategoryRepository; import com.votogether.domain.post.repository.PostOptionRepository; import com.votogether.domain.post.repository.PostRepository; +import com.votogether.domain.post.repository.dto.PostCommentCountDto; import com.votogether.domain.vote.repository.VoteRepository; import com.votogether.domain.vote.repository.dto.VoteCountByAgeGroupAndGenderDto; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -51,16 +55,14 @@ public List getPosts( public PostResponse getPost(final Long postId, final Member loginMember) { final Post post = postRepository.findById(postId) .orElseThrow(() -> new NotFoundException(PostExceptionType.NOT_FOUND)); - validateHiddenPost(post); + final Map postCommentCountMapper = generatePostCommentCountMapper(List.of(post)); - return PostResponse.ofUser( - loginMember, - post, - postCategoryRepository.findAllByPost(post), - post.getFirstContentImage(), - post.getPostOptions(), - voteRepository.findByMemberAndPostOptionPost(loginMember, post) - ); + if (post.isWriter(loginMember) && post.isHidden()) { + return createPostResponse(loginMember, post, postCommentCountMapper.getOrDefault(post.getId(), 0L)); + } + + validateHiddenPost(post); + return createPostResponse(loginMember, post, postCommentCountMapper.getOrDefault(post.getId(), 0L)); } public List searchPosts( @@ -162,18 +164,35 @@ private void validatePostOptionBelongPost(final Post post, final PostOption post } private List convertToResponses(final List posts, final Member member) { + final Map postCommentCountMapper = generatePostCommentCountMapper(posts); return posts.stream() .map(post -> - PostResponse.ofUser( - member, - post, - postCategoryRepository.findAllByPost(post), - post.getFirstContentImage(), - post.getPostOptions(), - voteRepository.findByMemberAndPostOptionPost(member, post) - ) - ) + createPostResponse(member, post, postCommentCountMapper.getOrDefault(post.getId(), 0L))) .toList(); } + private Map generatePostCommentCountMapper(final List posts) { + final List postCommentCountDtos = + postRepository.getCommentCountsInPosts(posts.stream().map(Post::getId).collect(Collectors.toSet())); + return postCommentCountDtos.stream() + .collect(Collectors.toMap( + PostCommentCountDto::postId, + PostCommentCountDto::commentCount, + (exist, replace) -> replace, + HashMap::new + )); + } + + private PostResponse createPostResponse(Member loginMember, Post post, final long commentCount) { + return PostResponse.ofUser( + loginMember, + post, + postCategoryRepository.findAllByPost(post), + post.getFirstContentImage(), + post.getPostOptions(), + voteRepository.findByMemberAndPostOptionPost(loginMember, post), + commentCount + ); + } + } diff --git a/backend/src/main/java/com/votogether/domain/ranking/dto/response/RankingResponse.java b/backend/src/main/java/com/votogether/domain/ranking/dto/response/RankingResponse.java index a33a61f92..c4cd97578 100644 --- a/backend/src/main/java/com/votogether/domain/ranking/dto/response/RankingResponse.java +++ b/backend/src/main/java/com/votogether/domain/ranking/dto/response/RankingResponse.java @@ -1,34 +1,23 @@ package com.votogether.domain.ranking.dto.response; -import com.votogether.domain.member.entity.Member; -import com.votogether.domain.ranking.entity.PassionRankings; import io.swagger.v3.oas.annotations.media.Schema; @Schema(description = "랭킹 정보 응답") public record RankingResponse( @Schema(description = "랭킹", example = "2") - int ranking, + long ranking, @Schema(description = "닉네임", example = "유저") String nickname, @Schema(description = "게시글 수", example = "5") - int postCount, + long postCount, @Schema(description = "투표 수", example = "6") - int voteCount, + long voteCount, @Schema(description = "점수", example = "31") long score ) { - - public static RankingResponse of(final PassionRankings passionRankings, final Member member) { - return new RankingResponse( - passionRankings.getRanking(member), - member.getNickname(), - passionRankings.getPassionRecord(member).getPostCount(), - passionRankings.getPassionRecord(member).getVoteCount(), - passionRankings.getScore(member)); - } } diff --git a/backend/src/main/java/com/votogether/domain/ranking/entity/PassionRankings.java b/backend/src/main/java/com/votogether/domain/ranking/entity/PassionRankings.java deleted file mode 100644 index 823843e0b..000000000 --- a/backend/src/main/java/com/votogether/domain/ranking/entity/PassionRankings.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.votogether.domain.ranking.entity; - -import com.votogether.domain.member.entity.Member; -import com.votogether.domain.ranking.entity.vo.PassionRecord; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -public class PassionRankings { - - private final Map rankings = new LinkedHashMap<>(); - private final Map passionBoard; - - public PassionRankings(final Map passionBoard) { - this.passionBoard = passionBoard; - calculateRanking(); - } - - private void calculateRanking() { - final List members = passionBoard.entrySet().stream() - .sorted(Comparator.comparingLong(entry -> -entry.getValue().calculateScore())) - .map(Entry::getKey) - .toList(); - - int currentRanking = 1; - int previousRanking = -1; - long previousScore = -1; - for (final Member member : members) { - long currentScore = passionBoard.get(member).calculateScore(); - int ranking = (currentScore == previousScore) ? previousRanking : currentRanking; - - this.rankings.put(member, ranking); - - previousRanking = ranking; - previousScore = currentScore; - currentRanking++; - } - } - - public List getTop10Members() { - return new ArrayList<>(rankings.keySet()) - .subList(0, Math.min(10, rankings.size())); - } - - public long getScore(final Member member) { - return passionBoard.get(member).calculateScore(); - } - - public int getRanking(final Member member) { - return rankings.get(member); - } - - public PassionRecord getPassionRecord(final Member member) { - return passionBoard.get(member); - } -} diff --git a/backend/src/main/java/com/votogether/domain/ranking/entity/vo/PassionRecord.java b/backend/src/main/java/com/votogether/domain/ranking/entity/vo/PassionRecord.java deleted file mode 100644 index 64f9784c5..000000000 --- a/backend/src/main/java/com/votogether/domain/ranking/entity/vo/PassionRecord.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.votogether.domain.ranking.entity.vo; - -import lombok.Getter; - -@Getter -public class PassionRecord { - - private static final int POST_WEIGHT = 5; - private static final int VOTE_WEIGHT = 1; - - private final int postCount; - private final int voteCount; - - public PassionRecord(int postCount, int voteCount) { - this.postCount = postCount; - this.voteCount = voteCount; - } - - public long calculateScore() { - return postCount * POST_WEIGHT + voteCount * VOTE_WEIGHT; - } - -} diff --git a/backend/src/main/java/com/votogether/domain/ranking/service/RankingService.java b/backend/src/main/java/com/votogether/domain/ranking/service/RankingService.java index e811e6ede..5efbd20aa 100644 --- a/backend/src/main/java/com/votogether/domain/ranking/service/RankingService.java +++ b/backend/src/main/java/com/votogether/domain/ranking/service/RankingService.java @@ -1,15 +1,13 @@ package com.votogether.domain.ranking.service; import com.votogether.domain.member.entity.Member; -import com.votogether.domain.member.repository.MemberRepository; -import com.votogether.domain.post.repository.PostRepository; +import com.votogether.domain.member.entity.MemberMetric; +import com.votogether.domain.member.exception.MemberExceptionType; +import com.votogether.domain.member.repository.MemberMetricRepository; import com.votogether.domain.ranking.dto.response.RankingResponse; -import com.votogether.domain.ranking.entity.PassionRankings; -import com.votogether.domain.ranking.entity.vo.PassionRecord; -import com.votogether.domain.vote.repository.VoteRepository; -import java.util.LinkedHashMap; +import com.votogether.global.exception.NotFoundException; +import java.util.ArrayList; import java.util.List; -import java.util.Map; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -18,37 +16,50 @@ @Service public class RankingService { - private final MemberRepository memberRepository; - private final PostRepository postRepository; - private final VoteRepository voteRepository; + private final MemberMetricRepository memberMetricRepository; @Transactional(readOnly = true) public RankingResponse getPassionRanking(final Member member) { - final PassionRankings passionRankings = getPassionRankings(); - return RankingResponse.of(passionRankings, member); + final MemberMetric memberMetric = memberMetricRepository.findByMember(member) + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NOT_FOUND_METRIC)); + final long higherCount = memberMetricRepository.countByScoreGreaterThan(memberMetric.getScore()); + + return new RankingResponse( + higherCount + 1, + member.getNickname(), + memberMetric.getPostCount(), + memberMetric.getVoteCount(), + memberMetric.getScore() + ); } @Transactional(readOnly = true) public List getPassionRanking() { - final PassionRankings passionRankings = getPassionRankings(); - return passionRankings.getTop10Members() - .stream() - .map(member -> RankingResponse.of(passionRankings, member) - ).toList(); - } + final List memberMetrics = memberMetricRepository.getTop10MemberMetrics(); - private PassionRankings getPassionRankings() { - final List members = memberRepository.findAll(); - final List postCounts = postRepository.findCountsByMembers(members); - final List voteCounts = voteRepository.findCountsByMembers(members); + int currentRanking = 1; + int previousRanking = -1; + long previousScore = -1; - final Map passionBoard = new LinkedHashMap<>(); + final List result = new ArrayList<>(); + for (final MemberMetric memberMetric : memberMetrics) { + final long currentScore = memberMetric.getScore(); + final int ranking = (currentScore == previousScore) ? previousRanking : currentRanking; - for (int i = 0; i < members.size(); i++) { - passionBoard.put(members.get(i), new PassionRecord(postCounts.get(i), voteCounts.get(i))); - } + final RankingResponse rankingResponse = new RankingResponse( + ranking, + memberMetric.getMember().getNickname(), + memberMetric.getPostCount(), + memberMetric.getVoteCount(), + memberMetric.getScore() + ); + result.add(rankingResponse); - return new PassionRankings(passionBoard); + previousRanking = ranking; + previousScore = currentScore; + currentRanking++; + } + return result; } } diff --git a/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandCommandController.java b/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandController.java similarity index 70% rename from backend/src/main/java/com/votogether/domain/report/controller/ReportCommandCommandController.java rename to backend/src/main/java/com/votogether/domain/report/controller/ReportCommandController.java index 941ce0740..8265fc599 100644 --- a/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandCommandController.java +++ b/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandController.java @@ -1,6 +1,7 @@ package com.votogether.domain.report.controller; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.dto.request.ReportActionRequest; import com.votogether.domain.report.dto.request.ReportRequest; import com.votogether.domain.report.service.ReportCommandService; import com.votogether.global.jwt.Auth; @@ -13,7 +14,7 @@ @RequiredArgsConstructor @RestController -public class ReportCommandCommandController implements ReportCommandControllerDocs { +public class ReportCommandController implements ReportCommandControllerDocs { private final ReportCommandService reportCommandService; @@ -23,4 +24,10 @@ public ResponseEntity report(@Valid @RequestBody final ReportRequest reque return ResponseEntity.ok().build(); } + @PostMapping("/reports/action/admin") + public ResponseEntity reportAction(@Valid @RequestBody final ReportActionRequest request) { + reportCommandService.reportAction(request); + return ResponseEntity.ok().build(); + } + } diff --git a/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandControllerDocs.java b/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandControllerDocs.java index aab4566b5..41c844ce8 100644 --- a/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandControllerDocs.java +++ b/backend/src/main/java/com/votogether/domain/report/controller/ReportCommandControllerDocs.java @@ -1,6 +1,7 @@ package com.votogether.domain.report.controller; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.dto.request.ReportActionRequest; import com.votogether.domain.report.dto.request.ReportRequest; import com.votogether.global.exception.ExceptionResponse; import io.swagger.v3.oas.annotations.Operation; @@ -30,4 +31,27 @@ public interface ReportCommandControllerDocs { }) ResponseEntity report(final ReportRequest request, final Member member); + @Operation(summary = "신고 조치", description = "신고를 조치한다.") + @ApiResponses({ + @ApiResponse( + responseCode = "200", + description = "신고 조치 성공" + ), + @ApiResponse( + responseCode = "400", + description = """ + 1.신고 ID가 양의 정수가 아닌 경우 + + 2.신고 ID가 존재하지 않은 경우 + """, + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 신고", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity reportAction(final ReportActionRequest request); + } diff --git a/backend/src/main/java/com/votogether/domain/report/controller/ReportQueryController.java b/backend/src/main/java/com/votogether/domain/report/controller/ReportQueryController.java new file mode 100644 index 000000000..f92cdcd4e --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/controller/ReportQueryController.java @@ -0,0 +1,28 @@ +package com.votogether.domain.report.controller; + +import com.votogether.domain.report.dto.response.ReportPageResponse; +import com.votogether.domain.report.service.ReportQueryService; +import jakarta.validation.constraints.PositiveOrZero; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Validated +@RequiredArgsConstructor +@RestController +public class ReportQueryController implements ReportQueryControllerDocs { + + private final ReportQueryService reportQueryService; + + @GetMapping("/reports/admin") + public ResponseEntity getReports( + @RequestParam @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page + ) { + final ReportPageResponse reportPageResponse = reportQueryService.getReports(page); + return ResponseEntity.ok(reportPageResponse); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/report/controller/ReportQueryControllerDocs.java b/backend/src/main/java/com/votogether/domain/report/controller/ReportQueryControllerDocs.java new file mode 100644 index 000000000..2ec36a83c --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/controller/ReportQueryControllerDocs.java @@ -0,0 +1,33 @@ +package com.votogether.domain.report.controller; + +import com.votogether.domain.report.dto.response.ReportPageResponse; +import com.votogether.global.exception.ExceptionResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.constraints.PositiveOrZero; +import org.springframework.http.ResponseEntity; + +@Tag(name = "신고 조회", description = "신고 조회 API") +public interface ReportQueryControllerDocs { + + @Operation(summary = "신고 조치 예정 목록 조회", description = "신고 조치 예정 목록을 조회한다.") + @ApiResponses({ + @ApiResponse( + responseCode = "200", + description = "신고 조치 예정 목록 조회 성공" + ), + @ApiResponse( + responseCode = "400", + description = "0이상의 정수가 아닌 페이지", + content = @Content(schema = @Schema(implementation = ExceptionResponse.class)) + ) + }) + ResponseEntity getReports( + @PositiveOrZero(message = "페이지는 0이상 정수만 가능합니다.") final int page + ); + +} diff --git a/backend/src/main/java/com/votogether/domain/report/dto/ReportAggregateDto.java b/backend/src/main/java/com/votogether/domain/report/dto/ReportAggregateDto.java new file mode 100644 index 000000000..782e0f694 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/dto/ReportAggregateDto.java @@ -0,0 +1,13 @@ +package com.votogether.domain.report.dto; + +import com.votogether.domain.report.entity.vo.ReportType; +import java.time.LocalDateTime; + +public record ReportAggregateDto( + long reportMaxId, + ReportType reportType, + long targetId, + String reasons, + LocalDateTime createdAt +) { +} diff --git a/backend/src/main/java/com/votogether/domain/report/dto/request/ReportActionRequest.java b/backend/src/main/java/com/votogether/domain/report/dto/request/ReportActionRequest.java new file mode 100644 index 000000000..5d38b21e7 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/dto/request/ReportActionRequest.java @@ -0,0 +1,17 @@ +package com.votogether.domain.report.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; + +@Schema(description = "신고 조치 요청") +public record ReportActionRequest( + @Schema(description = "신고 ID", example = "1") + @NotNull(message = "신고 ID는 빈 값일 수 없습니다.") + @Positive(message = "신고 ID는 양의 정수만 가능합니다.") + Long id, + + @Schema(description = "신고 조치 여부", example = "true") + boolean hasAction +) { +} diff --git a/backend/src/main/java/com/votogether/domain/report/dto/response/ReportPageResponse.java b/backend/src/main/java/com/votogether/domain/report/dto/response/ReportPageResponse.java new file mode 100644 index 000000000..a9245b546 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/dto/response/ReportPageResponse.java @@ -0,0 +1,30 @@ +package com.votogether.domain.report.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + +@Schema(description = "신고 조치 예정 목록 응답") +public record ReportPageResponse( + @Schema(description = "신고 조치 예정 목록 전체 페이지 수", example = "20") + long totalPageNumber, + + @Schema(description = "신고 조치 예정 목록 중 현재 페이지", example = "3") + long currentPageNumber, + + @Schema(description = "신고 조치 예정 목록") + List reports +) { + + public static ReportPageResponse of( + final int totalPageNumber, + final int currentPageNumber, + final List reportResponses + ) { + return new ReportPageResponse( + totalPageNumber, + currentPageNumber, + reportResponses + ); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/report/dto/response/ReportResponse.java b/backend/src/main/java/com/votogether/domain/report/dto/response/ReportResponse.java new file mode 100644 index 000000000..b9c6da2a0 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/dto/response/ReportResponse.java @@ -0,0 +1,40 @@ +package com.votogether.domain.report.dto.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.votogether.domain.report.dto.ReportAggregateDto; +import com.votogether.domain.report.entity.vo.ReportType; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.List; + +@Schema(description = "신고 정보 응답") +public record ReportResponse( + @Schema(description = "신고 ID", example = "1") + long id, + + @Schema(description = "신고 유형", example = "POST") + ReportType type, + + @Schema(description = "신고 이유들") + List reasons, + + @Schema(description = "신고 당한 요소의 내용", example = "2") + String target, + + @Schema(description = "신고 생성시간", example = "2023-08-01 13:56") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + LocalDateTime createdAt +) { + + public static ReportResponse of(final ReportAggregateDto reportAggregateDto, final String target) { + return new ReportResponse( + reportAggregateDto.reportMaxId(), + reportAggregateDto.reportType(), + Arrays.stream(reportAggregateDto.reasons().split(",")).toList(), + target, + reportAggregateDto.createdAt() + ); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/report/exception/ReportExceptionType.java b/backend/src/main/java/com/votogether/domain/report/exception/ReportExceptionType.java index ea38d6342..75f6dd8a6 100644 --- a/backend/src/main/java/com/votogether/domain/report/exception/ReportExceptionType.java +++ b/backend/src/main/java/com/votogether/domain/report/exception/ReportExceptionType.java @@ -14,7 +14,8 @@ public enum ReportExceptionType implements ExceptionType { DUPLICATE_COMMENT_REPORT(1205, "하나의 댓글에 대해서 중복하여 신고할 수 없습니다."), REPORT_MY_NICKNAME(1206, "자신의 닉네임은 신고할 수 없습니다."), DUPLICATE_NICKNAME_REPORT(1207, "하나의 닉네임에 대해서 중복하여 신고할 수 없습니다."), - ; + NOT_FOUND(1208, "신고가 존재하지 않습니다."), + NOT_FOUND_REPORT_AGGREGATE(1209, "신고 집계가 존재하지 않습니다."); private final int code; private final String message; diff --git a/backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepository.java b/backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepository.java new file mode 100644 index 000000000..766b9cbca --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepository.java @@ -0,0 +1,18 @@ +package com.votogether.domain.report.repository; + +import com.votogether.domain.report.dto.ReportAggregateDto; +import com.votogether.domain.report.entity.vo.ReportType; +import java.util.List; +import java.util.Optional; +import org.springframework.data.domain.Pageable; + +public interface ReportCustomRepository { + + List findReportAggregateDtosByReportTypeAndTargetId(final Pageable pageable); + + Optional findReportAggregateDtoByReportTypeAndTargetId( + final ReportType reportType, + final Long targetId + ); + +} diff --git a/backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepositoryImpl.java b/backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepositoryImpl.java new file mode 100644 index 000000000..3ddfbb680 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/repository/ReportCustomRepositoryImpl.java @@ -0,0 +1,69 @@ +package com.votogether.domain.report.repository; + +import static com.votogether.domain.report.entity.QReport.report; + +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.votogether.domain.report.dto.ReportAggregateDto; +import com.votogether.domain.report.entity.vo.ReportType; +import java.util.List; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Repository; + +@RequiredArgsConstructor +@Repository +public class ReportCustomRepositoryImpl implements ReportCustomRepository { + + private final JPAQueryFactory jpaQueryFactory; + + @Override + public List findReportAggregateDtosByReportTypeAndTargetId(final Pageable pageable) { + return jpaQueryFactory.select( + Projections.constructor( + ReportAggregateDto.class, + report.id.max(), + report.reportType, + report.targetId, + Expressions.stringTemplate("group_concat({0})", report.reason), + report.createdAt.max() + ) + ) + .from(report) + .orderBy(report.id.max().desc()) + .groupBy(report.reportType, report.targetId) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + @Override + public Optional findReportAggregateDtoByReportTypeAndTargetId( + final ReportType reportType, + final Long targetId + ) { + final ReportAggregateDto result = jpaQueryFactory.select( + Projections.constructor( + ReportAggregateDto.class, + report.id.max(), + report.reportType, + report.targetId, + Expressions.stringTemplate("group_concat({0})", report.reason), + report.createdAt.max() + ) + ) + .from(report) + .where( + report.reportType.eq(reportType), + report.targetId.eq(targetId) + ) + .groupBy(report.reportType, report.targetId) + .fetchOne(); + + return Optional.ofNullable(result); + } + + +} diff --git a/backend/src/main/java/com/votogether/domain/report/repository/ReportRepository.java b/backend/src/main/java/com/votogether/domain/report/repository/ReportRepository.java index 85fc48e1a..82f0d7049 100644 --- a/backend/src/main/java/com/votogether/domain/report/repository/ReportRepository.java +++ b/backend/src/main/java/com/votogether/domain/report/repository/ReportRepository.java @@ -10,7 +10,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -public interface ReportRepository extends JpaRepository { +public interface ReportRepository extends JpaRepository, ReportCustomRepository { int countByReportTypeAndTargetId(final ReportType reportType, final Long targetId); @@ -27,7 +27,7 @@ Optional findByMemberAndReportTypeAndTargetId( @Modifying(flushAutomatically = true, clearAutomatically = true) @Query("delete from Report r where r.reportType = :reportType and r.targetId = :targetId") void deleteAllWithReportTypeAndTargetIdInBatch( - @Param("reportType") ReportType reportType, + @Param("reportType") final ReportType reportType, @Param("targetId") final Long targetId ); diff --git a/backend/src/main/java/com/votogether/domain/report/service/ReportCommandService.java b/backend/src/main/java/com/votogether/domain/report/service/ReportCommandService.java index c89e0d658..562b28bc9 100644 --- a/backend/src/main/java/com/votogether/domain/report/service/ReportCommandService.java +++ b/backend/src/main/java/com/votogether/domain/report/service/ReportCommandService.java @@ -1,37 +1,48 @@ package com.votogether.domain.report.service; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.dto.ReportAggregateDto; +import com.votogether.domain.report.dto.request.ReportActionRequest; import com.votogether.domain.report.dto.request.ReportRequest; -import com.votogether.domain.report.entity.vo.ReportType; -import com.votogether.domain.report.service.strategy.ReportCommentStrategy; -import com.votogether.domain.report.service.strategy.ReportNicknameStrategy; -import com.votogether.domain.report.service.strategy.ReportPostStrategy; +import com.votogether.domain.report.entity.Report; +import com.votogether.domain.report.exception.ReportExceptionType; +import com.votogether.domain.report.repository.ReportRepository; +import com.votogether.domain.report.service.strategy.ReportActionProvider; import com.votogether.domain.report.service.strategy.ReportStrategy; -import java.util.EnumMap; -import java.util.Map; +import com.votogether.global.exception.NotFoundException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +@RequiredArgsConstructor @Transactional @Service public class ReportCommandService { - private final Map reportActions; - - public ReportCommandService( - final ReportPostStrategy reportPostStrategy, - final ReportCommentStrategy reportCommentStrategy, - final ReportNicknameStrategy reportNicknameStrategy - ) { - this.reportActions = new EnumMap<>(ReportType.class); - this.reportActions.put(ReportType.POST, reportPostStrategy); - this.reportActions.put(ReportType.COMMENT, reportCommentStrategy); - this.reportActions.put(ReportType.NICKNAME, reportNicknameStrategy); - } + private final ReportActionProvider reportActionProvider; + private final ReportRepository reportRepository; public void report(final Member reporter, final ReportRequest request) { - final ReportStrategy reportStrategy = reportActions.get(request.type()); + final ReportStrategy reportStrategy = reportActionProvider.getStrategy(request.type()); reportStrategy.report(reporter, request); } + public void reportAction(final ReportActionRequest request) { + final Report report = reportRepository.findById(request.id()) + .orElseThrow(() -> new NotFoundException(ReportExceptionType.NOT_FOUND)); + + final ReportAggregateDto reportAggregateDto = reportRepository + .findReportAggregateDtoByReportTypeAndTargetId(report.getReportType(), report.getTargetId()) + .orElseThrow(() -> new NotFoundException(ReportExceptionType.NOT_FOUND_REPORT_AGGREGATE)); + + reportRepository.deleteAllWithReportTypeAndTargetIdInBatch(report.getReportType(), report.getTargetId()); + + if (!request.hasAction()) { + return; + } + + final ReportStrategy strategy = reportActionProvider.getStrategy(reportAggregateDto.reportType()); + strategy.reportAction(reportAggregateDto); + } + } diff --git a/backend/src/main/java/com/votogether/domain/report/service/ReportQueryService.java b/backend/src/main/java/com/votogether/domain/report/service/ReportQueryService.java new file mode 100644 index 000000000..f1d04ad74 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/service/ReportQueryService.java @@ -0,0 +1,50 @@ +package com.votogether.domain.report.service; + +import com.votogether.domain.report.dto.ReportAggregateDto; +import com.votogether.domain.report.dto.response.ReportPageResponse; +import com.votogether.domain.report.dto.response.ReportResponse; +import com.votogether.domain.report.repository.ReportRepository; +import com.votogether.domain.report.service.strategy.ReportActionProvider; +import com.votogether.domain.report.service.strategy.ReportStrategy; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional(readOnly = true) +@Service +public class ReportQueryService { + + private static final int BASIC_PAGE_SIZE = 20; + + private final ReportRepository reportRepository; + private final ReportActionProvider reportActionProvider; + + public ReportPageResponse getReports(final int page) { + final long totalCount = reportRepository.count(); + final int totalPageNumber = (int) Math.ceil((double) totalCount / BASIC_PAGE_SIZE); + + final Pageable pageable = PageRequest.of(page, BASIC_PAGE_SIZE); + final List reportAggregateDtos = reportRepository + .findReportAggregateDtosByReportTypeAndTargetId(pageable); + final List reportResponses = parseReportResponses(reportAggregateDtos); + + return ReportPageResponse.of(totalPageNumber, page, reportResponses); + } + + private List parseReportResponses(final List reportAggregateDtos) { + return reportAggregateDtos.stream() + .map(this::parseReportResponse) + .toList(); + } + + private ReportResponse parseReportResponse(final ReportAggregateDto reportAggregateDto) { + final ReportStrategy strategy = reportActionProvider.getStrategy(reportAggregateDto.reportType()); + return ReportResponse.of(reportAggregateDto, strategy.parseTarget(reportAggregateDto.targetId())); + } + +} + diff --git a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportActionProvider.java b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportActionProvider.java new file mode 100644 index 000000000..a45e23737 --- /dev/null +++ b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportActionProvider.java @@ -0,0 +1,28 @@ +package com.votogether.domain.report.service.strategy; + +import com.votogether.domain.report.entity.vo.ReportType; +import java.util.EnumMap; +import java.util.Map; +import org.springframework.stereotype.Component; + +@Component +public class ReportActionProvider { + + private final Map reportActions; + + public ReportActionProvider( + final ReportPostStrategy reportPostStrategy, + final ReportCommentStrategy reportCommentStrategy, + final ReportNicknameStrategy reportNicknameStrategy + ) { + this.reportActions = new EnumMap<>(ReportType.class); + this.reportActions.put(ReportType.POST, reportPostStrategy); + this.reportActions.put(ReportType.COMMENT, reportCommentStrategy); + this.reportActions.put(ReportType.NICKNAME, reportNicknameStrategy); + } + + public ReportStrategy getStrategy(ReportType type) { + return reportActions.get(type); + } + +} diff --git a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportCommentStrategy.java b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportCommentStrategy.java index 302f84626..b630a5e87 100644 --- a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportCommentStrategy.java +++ b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportCommentStrategy.java @@ -1,9 +1,12 @@ package com.votogether.domain.report.service.strategy; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; import com.votogether.domain.post.entity.comment.Comment; import com.votogether.domain.post.exception.CommentExceptionType; import com.votogether.domain.post.repository.CommentRepository; +import com.votogether.domain.report.dto.ReportAggregateDto; import com.votogether.domain.report.dto.request.ReportRequest; import com.votogether.domain.report.exception.ReportExceptionType; import com.votogether.domain.report.repository.ReportRepository; @@ -16,10 +19,9 @@ @Component public class ReportCommentStrategy implements ReportStrategy { - private static final int NUMBER_OF_COMMENT_BLIND_BASED_REPORTS = 5; - private final CommentRepository commentRepository; private final ReportRepository reportRepository; + private final ReportActionAlarmRepository reportActionAlarmRepository; @Override public void report(final Member reporter, final ReportRequest request) { @@ -28,7 +30,6 @@ public void report(final Member reporter, final ReportRequest request) { validateComment(reporter, request, reportedComment); saveReport(reporter, request, reportRepository); - blindComment(request, reportedComment); } private void validateComment( @@ -46,13 +47,6 @@ private void validateComment( ); } - private void blindComment(final ReportRequest request, final Comment reportedComment) { - final int reportCount = reportRepository.countByReportTypeAndTargetId(request.type(), request.id()); - if (reportCount >= NUMBER_OF_COMMENT_BLIND_BASED_REPORTS) { - reportedComment.blind(); - } - } - private void validateHiddenComment(final Comment comment) { if (comment.isHidden()) { throw new BadRequestException(CommentExceptionType.IS_HIDDEN); @@ -65,4 +59,28 @@ private void validateCommentMine(final Comment comment, final Member member) { } } + @Override + public String parseTarget(final Long targetId) { + final Comment reportedComment = commentRepository.findById(targetId) + .orElseThrow(() -> new NotFoundException(CommentExceptionType.NOT_FOUND)); + return reportedComment.getContent(); + } + + @Override + public void reportAction(final ReportAggregateDto reportAggregateDto) { + final Comment comment = commentRepository.findById(reportAggregateDto.targetId()) + .orElseThrow(() -> new NotFoundException(CommentExceptionType.NOT_FOUND)); + + final ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .member(comment.getWriter()) + .reportType(reportAggregateDto.reportType()) + .target(comment.getContent()) + .reasons(reportAggregateDto.reasons()) + .isChecked(false) + .build(); + + reportActionAlarmRepository.save(reportActionAlarm); + comment.blind(); + } + } diff --git a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategy.java b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategy.java index c8714a42f..5483e4a99 100644 --- a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategy.java +++ b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategy.java @@ -1,15 +1,18 @@ package com.votogether.domain.report.service.strategy; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.exception.MemberExceptionType; import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.domain.report.dto.ReportAggregateDto; import com.votogether.domain.report.dto.request.ReportRequest; -import com.votogether.domain.report.entity.vo.ReportType; import com.votogether.domain.report.exception.ReportExceptionType; import com.votogether.domain.report.repository.ReportRepository; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; import java.util.Objects; +import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -17,19 +20,22 @@ @Component public class ReportNicknameStrategy implements ReportStrategy { - private static final int NUMBER_OF_NICKNAME_CHANGE_REPORTS = 3; - private final MemberRepository memberRepository; private final ReportRepository reportRepository; + private final ReportActionAlarmRepository reportActionAlarmRepository; @Override public void report(final Member reporter, final ReportRequest request) { - final Member reportedMember = memberRepository.findById(request.id()) - .orElseThrow(() -> new NotFoundException(MemberExceptionType.NONEXISTENT_MEMBER)); + validateMemberExistence(request); validateNickname(reporter, request); - saveReport(reporter, request, reportRepository); - changeNicknameByReport(reportedMember, request); + } + + private void validateMemberExistence(final ReportRequest request) { + final Optional memberById = memberRepository.findById(request.id()); + if (memberById.isEmpty()) { + throw new NotFoundException(MemberExceptionType.NON_EXISTENT_MEMBER); + } } private void validateNickname(final Member reporter, final ReportRequest request) { @@ -48,12 +54,28 @@ private void validateMyNickname(final Member reporter, final ReportRequest reque } } - private void changeNicknameByReport(final Member reportedMember, final ReportRequest request) { - final int reportCount = reportRepository.countByReportTypeAndTargetId(request.type(), reportedMember.getId()); - if (reportCount >= NUMBER_OF_NICKNAME_CHANGE_REPORTS) { - reportedMember.changeNicknameByReport(); - reportRepository.deleteAllWithReportTypeAndTargetIdInBatch(ReportType.NICKNAME, request.id()); - } + @Override + public String parseTarget(final Long targetId) { + final Member reportedMember = memberRepository.findById(targetId) + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NON_EXISTENT_MEMBER)); + return reportedMember.getNickname(); + } + + @Override + public void reportAction(final ReportAggregateDto reportAggregateDto) { + final Member reportedMember = memberRepository.findById(reportAggregateDto.targetId()) + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NON_EXISTENT_MEMBER)); + + final ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .member(reportedMember) + .reportType(reportAggregateDto.reportType()) + .target(reportedMember.getNickname()) + .reasons(reportAggregateDto.reasons()) + .isChecked(false) + .build(); + + reportActionAlarmRepository.save(reportActionAlarm); + reportedMember.changeNicknameByReport(); } } diff --git a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportPostStrategy.java b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportPostStrategy.java index 5ebc55d23..573f68ff6 100644 --- a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportPostStrategy.java +++ b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportPostStrategy.java @@ -1,9 +1,12 @@ package com.votogether.domain.report.service.strategy; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.exception.PostExceptionType; import com.votogether.domain.post.repository.PostRepository; +import com.votogether.domain.report.dto.ReportAggregateDto; import com.votogether.domain.report.dto.request.ReportRequest; import com.votogether.domain.report.exception.ReportExceptionType; import com.votogether.domain.report.repository.ReportRepository; @@ -16,10 +19,9 @@ @Component public class ReportPostStrategy implements ReportStrategy { - private static final int NUMBER_OF_POST_BLIND_BASED_REPORTS = 5; - private final PostRepository postRepository; private final ReportRepository reportRepository; + private final ReportActionAlarmRepository reportActionAlarmRepository; @Override public void report(final Member reporter, final ReportRequest request) { @@ -28,7 +30,6 @@ public void report(final Member reporter, final ReportRequest request) { validatePost(reporter, reportedPost, request); saveReport(reporter, request, reportRepository); - blindPost(request, reportedPost); } private void validatePost( @@ -46,13 +47,6 @@ private void validatePost( ); } - private void blindPost(final ReportRequest request, final Post reportedPost) { - final int reportCount = reportRepository.countByReportTypeAndTargetId(request.type(), request.id()); - if (reportCount >= NUMBER_OF_POST_BLIND_BASED_REPORTS) { - reportedPost.blind(); - } - } - private void validateHiddenPost(final Post post) { if (post.isHidden()) { throw new BadRequestException(PostExceptionType.IS_HIDDEN); @@ -65,4 +59,26 @@ private void validatePostMine(final Post post, final Member member) { } } + @Override + public String parseTarget(final Long targetId) { + return targetId.toString(); + } + + @Override + public void reportAction(final ReportAggregateDto reportAggregateDto) { + final Post reportedPost = postRepository.findById(reportAggregateDto.targetId()) + .orElseThrow(() -> new NotFoundException(PostExceptionType.NOT_FOUND)); + + final ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .member(reportedPost.getWriter()) + .reportType(reportAggregateDto.reportType()) + .target(reportedPost.getId().toString()) + .reasons(reportAggregateDto.reasons()) + .isChecked(false) + .build(); + + reportActionAlarmRepository.save(reportActionAlarm); + reportedPost.blind(); + } + } diff --git a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportStrategy.java b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportStrategy.java index 33b58a44e..f9fcad6ba 100644 --- a/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportStrategy.java +++ b/backend/src/main/java/com/votogether/domain/report/service/strategy/ReportStrategy.java @@ -1,17 +1,21 @@ package com.votogether.domain.report.service.strategy; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.dto.ReportAggregateDto; import com.votogether.domain.report.dto.request.ReportRequest; import com.votogether.domain.report.entity.Report; import com.votogether.domain.report.exception.ReportExceptionType; import com.votogether.domain.report.repository.ReportRepository; import com.votogether.global.exception.BadRequestException; -@FunctionalInterface public interface ReportStrategy { void report(final Member reporter, final ReportRequest request); + String parseTarget(final Long targetId); + + void reportAction(final ReportAggregateDto reportAggregateDto); + default void validateDuplicatedReport( final Member reporter, final ReportRequest request, diff --git a/backend/src/main/java/com/votogether/domain/vote/repository/VoteRepository.java b/backend/src/main/java/com/votogether/domain/vote/repository/VoteRepository.java index 7a3697b71..ad87e89a7 100644 --- a/backend/src/main/java/com/votogether/domain/vote/repository/VoteRepository.java +++ b/backend/src/main/java/com/votogether/domain/vote/repository/VoteRepository.java @@ -14,62 +14,57 @@ public interface VoteRepository extends JpaRepository { - @Query(value = "select" + - " case" + - " when YEAR(CURRENT_DATE) - m.birth_year < 10 then 0" + - " when YEAR(CURRENT_DATE) - m.birth_year < 20 then 1" + - " when YEAR(CURRENT_DATE) - m.birth_year < 30 then 2" + - " when YEAR(CURRENT_DATE) - m.birth_year < 40 then 3" + - " when YEAR(CURRENT_DATE) - m.birth_year < 50 then 4" + - " when YEAR(CURRENT_DATE) - m.birth_year < 60 then 5" + - " else 6 end as ageGroup," + - " m.gender as gender," + - " count(m.id) as voteCount" + - " from vote as v" + - " left join member as m on v.member_id = m.id" + - " left join post_option as p on v.post_option_id = p.id" + - " where p.post_id = :post_id" + - " group by" + - " ageGroup, m.gender" + - " order by" + - " ageGroup, m.gender desc", - nativeQuery = true + @Query( + nativeQuery = true, + value = "select" + + " case" + + " when YEAR(CURRENT_DATE) - m.birth_year < 10 then 0" + + " when YEAR(CURRENT_DATE) - m.birth_year < 20 then 1" + + " when YEAR(CURRENT_DATE) - m.birth_year < 30 then 2" + + " when YEAR(CURRENT_DATE) - m.birth_year < 40 then 3" + + " when YEAR(CURRENT_DATE) - m.birth_year < 50 then 4" + + " when YEAR(CURRENT_DATE) - m.birth_year < 60 then 5" + + " else 6 end as ageGroup," + + " m.gender as gender," + + " count(m.id) as voteCount" + + " from vote as v" + + " left join member as m on v.member_id = m.id" + + " left join post_option as p on v.post_option_id = p.id" + + " where p.post_id = :post_id" + + " group by" + + " ageGroup, m.gender" + + " order by" + + " ageGroup, m.gender desc" ) List findPostVoteCountByAgeGroupAndGender( @Param("post_id") final Long postId ); - @Query(value = "select" + - " case" + - " when YEAR(CURRENT_DATE) - m.birth_year < 10 then 0" + - " when YEAR(CURRENT_DATE) - m.birth_year < 20 then 1" + - " when YEAR(CURRENT_DATE) - m.birth_year < 30 then 2" + - " when YEAR(CURRENT_DATE) - m.birth_year < 40 then 3" + - " when YEAR(CURRENT_DATE) - m.birth_year < 50 then 4" + - " when YEAR(CURRENT_DATE) - m.birth_year < 60 then 5" + - " else 6 end as ageGroup," + - " m.gender as gender," + - " count(m.id) as voteCount" + - " from vote as v" + - " left join member as m on v.member_id = m.id" + - " where v.post_option_id = :post_option_id" + - " group by" + - " ageGroup, m.gender" + - " order by" + - " ageGroup, m.gender desc", - nativeQuery = true + @Query( + nativeQuery = true, + value = "select" + + " case" + + " when YEAR(CURRENT_DATE) - m.birth_year < 10 then 0" + + " when YEAR(CURRENT_DATE) - m.birth_year < 20 then 1" + + " when YEAR(CURRENT_DATE) - m.birth_year < 30 then 2" + + " when YEAR(CURRENT_DATE) - m.birth_year < 40 then 3" + + " when YEAR(CURRENT_DATE) - m.birth_year < 50 then 4" + + " when YEAR(CURRENT_DATE) - m.birth_year < 60 then 5" + + " else 6 end as ageGroup," + + " m.gender as gender," + + " count(m.id) as voteCount" + + " from vote as v" + + " left join member as m on v.member_id = m.id" + + " where v.post_option_id = :post_option_id" + + " group by" + + " ageGroup, m.gender" + + " order by" + + " ageGroup, m.gender desc" ) List findPostOptionVoteCountByAgeGroupAndGender( @Param("post_option_id") final Long postOptionId ); - @Query("SELECT COUNT(v)" + - "FROM Member m " + - "LEFT JOIN Vote v ON m.id = v.member.id AND v.member IN :members " + - "WHERE m IN :members " + - "GROUP BY m.id") - List findCountsByMembers(@Param("members") final List members); - Optional findByMemberAndPostOptionPost(final Member member, final Post post); Optional findByMemberAndPostOption(final Member member, final PostOption postOption); diff --git a/backend/src/main/java/com/votogether/domain/vote/service/VoteService.java b/backend/src/main/java/com/votogether/domain/vote/service/VoteService.java index 706c49c63..0d571ca06 100644 --- a/backend/src/main/java/com/votogether/domain/vote/service/VoteService.java +++ b/backend/src/main/java/com/votogether/domain/vote/service/VoteService.java @@ -1,6 +1,9 @@ package com.votogether.domain.vote.service; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.entity.MemberMetric; +import com.votogether.domain.member.exception.MemberExceptionType; +import com.votogether.domain.member.repository.MemberMetricRepository; import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.entity.PostOption; import com.votogether.domain.post.exception.PostExceptionType; @@ -13,6 +16,8 @@ import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,25 +30,31 @@ public class VoteService { private final VoteRepository voteRepository; private final PostRepository postRepository; private final PostOptionRepository postOptionRepository; + private final MemberMetricRepository memberMetricRepository; public void vote( final Member member, final Long postId, final Long postOptionId ) { - final Post post = postRepository.findById(postId) + final Post post = postRepository.findByIdForUpdate(postId) .orElseThrow(() -> new NotFoundException(PostExceptionType.NOT_FOUND)); validateAlreadyVoted(member, post); - final PostOption postOption = postOptionRepository.findById(postOptionId) + final PostOption postOption = postOptionRepository.findByIdForUpdate(postOptionId) .orElseThrow(() -> new NotFoundException(PostOptionExceptionType.NOT_FOUND)); + final MemberMetric memberMetric = memberMetricRepository.findByMemberIdForUpdate(member.getId()) + .orElseThrow(() -> new NotFoundException(MemberExceptionType.NOT_FOUND_METRIC)); + final int voteCount = voteRepository.countByMember(member); final Vote vote = post.makeVote(member, postOption); voteRepository.save(vote); + memberMetric.updateVoteCount(voteCount + 1); + post.increaseVoteCount(); + postOption.increaseVoteCount(); } - private void validateAlreadyVoted(final Member member, final Post post) { final List postOptions = post.getPostOptions(); final List alreadyVoted = @@ -62,18 +73,31 @@ public void changeVote( final Post post = postRepository.findById(postId) .orElseThrow(() -> new NotFoundException(PostExceptionType.NOT_FOUND)); - final PostOption originPostOption = postOptionRepository.findById(originPostOptionId) - .orElseThrow(() -> new NotFoundException(PostOptionExceptionType.NOT_FOUND)); + final List postOptions = Stream.of(originPostOptionId, newPostOptionId) + .sorted() + .map(postOptionRepository::findByIdForUpdate) + .map(postOption -> postOption.orElseThrow( + () -> new NotFoundException(PostOptionExceptionType.NOT_FOUND))) + .toList(); + + final PostOption originPostOption = getPostOptionById(postOptions, originPostOptionId); + final PostOption newPostOption = getPostOptionById(postOptions, newPostOptionId); final Vote originVote = voteRepository.findByMemberAndPostOption(member, originPostOption) .orElseThrow(() -> new NotFoundException(VoteExceptionType.NOT_FOUND)); - final PostOption newPostOption = postOptionRepository.findById(newPostOptionId) - .orElseThrow(() -> new NotFoundException(PostOptionExceptionType.NOT_FOUND)); - voteRepository.delete(originVote); final Vote vote = post.makeVote(member, newPostOption); voteRepository.save(vote); + originPostOption.decreaseVoteCount(); + newPostOption.increaseVoteCount(); + } + + private PostOption getPostOptionById(final List postOptions, final Long id) { + return postOptions.stream() + .filter(postOption -> Objects.equals(postOption.getId(), id)) + .findAny() + .orElseThrow(() -> new NotFoundException(PostOptionExceptionType.NOT_FOUND)); } } diff --git a/backend/src/main/java/com/votogether/global/config/WebMvcConfig.java b/backend/src/main/java/com/votogether/global/config/WebMvcConfig.java index c03bdc5ca..059ce3154 100644 --- a/backend/src/main/java/com/votogether/global/config/WebMvcConfig.java +++ b/backend/src/main/java/com/votogether/global/config/WebMvcConfig.java @@ -25,6 +25,10 @@ public class WebMvcConfig implements WebMvcConfigurer { private static final String LOCALHOST_FRONTEND = "http://localhost:3000"; private static final String HTTPS_LOCALHOST_FRONTEND = "https://localhost:3000"; + private static final String HTTPS_JERO = "https://jero-votogether-next.vercel.app/"; + private static final String HTTPS_WUS = "https://wus-votogether-next-app.vercel.app/"; + private static final String HTTPS_CHSUA = "https://chsua-votogether-next-app.vercel.app/"; + private static final String DEV_SERVER = "https://dev.votogether.com"; private static final String PROD_SERVER = "https://votogether.com"; @@ -41,6 +45,9 @@ public FilterRegistrationBean corsFilterRegistrationBean() { config.addAllowedOrigin(HTTPS_LOCALHOST_FRONTEND); config.addAllowedOrigin(DEV_SERVER); config.addAllowedOrigin(PROD_SERVER); + config.addAllowedOrigin(HTTPS_JERO); + config.addAllowedOrigin(HTTPS_WUS); + config.addAllowedOrigin(HTTPS_CHSUA); config.addAllowedHeader("*"); config.addAllowedMethod("*"); config.addExposedHeader(HttpHeaders.LOCATION); diff --git a/backend/src/main/java/com/votogether/global/jwt/JwtAuthenticationFilter.java b/backend/src/main/java/com/votogether/global/jwt/JwtAuthenticationFilter.java index 892d5fb09..315a4d1aa 100644 --- a/backend/src/main/java/com/votogether/global/jwt/JwtAuthenticationFilter.java +++ b/backend/src/main/java/com/votogether/global/jwt/JwtAuthenticationFilter.java @@ -38,7 +38,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { private static final Map MATCH_URI_METHOD = new HashMap<>( Map.ofEntries( - Map.entry("^/posts/.+/comments$", "GET") + Map.entry("^/posts/.+/comments$", "GET"), + Map.entry("^/notices.*$", "GET") ) ); diff --git a/backend/src/main/java/com/votogether/global/jwt/TokenProcessor.java b/backend/src/main/java/com/votogether/global/jwt/TokenProcessor.java index 8ab5e69a6..1a3579863 100644 --- a/backend/src/main/java/com/votogether/global/jwt/TokenProcessor.java +++ b/backend/src/main/java/com/votogether/global/jwt/TokenProcessor.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.votogether.domain.auth.exception.AuthExceptionType; +import com.votogether.global.exception.BadRequestException; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Header; import io.jsonwebtoken.Jwts; @@ -70,7 +72,7 @@ public String resolveToken(final String token) { if (StringUtils.hasText(token) && token.startsWith(BEARER_TOKEN_PREFIX)) { return token.split(BLANK)[1]; } - throw new IllegalArgumentException("올바르지 않은 토큰입니다."); + throw new BadRequestException(AuthExceptionType.INVALID_TOKEN); } public TokenPayload parseToken(final String token) throws JsonProcessingException { @@ -87,22 +89,19 @@ public void validateToken(final String token) { .parseClaimsJws(token); } catch (final UnsupportedJwtException e) { log.info("지원하지 않는 JWT입니다."); - throw new IllegalArgumentException("지원하지 않는 JWT입니다."); + throw new BadRequestException(AuthExceptionType.UNSUPPORTED_TOKEN); } catch (final MalformedJwtException e) { log.info("잘못된 JWT 서명입니다."); - throw new IllegalArgumentException("잘못된 JWT 서명입니다."); + throw new BadRequestException(AuthExceptionType.MALFORMED_TOKEN); } catch (final SignatureException e) { log.info("토큰의 서명 유효성 검사가 실패했습니다."); - throw new IllegalArgumentException("토큰의 서명 유효성 검사가 실패했습니다."); + throw new BadRequestException(AuthExceptionType.SIGNATURE_TOKEN); } catch (final ExpiredJwtException e) { log.info("토큰의 유효기간이 만료되었습니다."); - throw new IllegalArgumentException("토큰의 유효기간이 만료되었습니다."); - } catch (final IllegalArgumentException e) { - log.info("토큰의 내용이 비어있습니다."); - throw new IllegalArgumentException("토큰의 내용이 비어있습니다."); + throw new BadRequestException(AuthExceptionType.EXPIRED_TOKEN); } catch (final Exception e) { log.info("알 수 없는 토큰 유효성 문제가 발생했습니다."); - throw new IllegalArgumentException("알 수 없는 토큰 유효성 문제가 발생했습니다."); + throw new BadRequestException(AuthExceptionType.UNKNOWN_TOKEN); } } diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 1cd6a6613..e87e9a6d1 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -4,6 +4,10 @@ spring: url: ${DATASOURCE_URL} username: ${DATASOURCE_USERNAME} password: ${DATASOURCE_PASSWORD} + hikari: + maximumPoolSize: ${MAXIMUM_POOL_SIZE} + connectionTimeout: ${CONNECTION_TIMEOUT} + maxLifetime: ${MAX_LIFETIME} jpa: database-platform: org.hibernate.dialect.MySQLDialect diff --git a/backend/src/test/java/com/votogether/domain/alarm/controller/AlarmCommandControllerTest.java b/backend/src/test/java/com/votogether/domain/alarm/controller/AlarmCommandControllerTest.java new file mode 100644 index 000000000..983147264 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/controller/AlarmCommandControllerTest.java @@ -0,0 +1,104 @@ +package com.votogether.domain.alarm.controller; + +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.BDDMockito.any; +import static org.mockito.BDDMockito.anyLong; +import static org.mockito.BDDMockito.willDoNothing; + +import com.votogether.domain.alarm.service.AlarmCommandService; +import com.votogether.domain.member.entity.Member; +import com.votogether.test.ControllerTest; +import io.restassured.module.mockmvc.RestAssuredMockMvc; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(AlarmCommandController.class) +class AlarmCommandControllerTest extends ControllerTest { + + @Autowired + MockMvc mockMvc; + + @MockBean + AlarmCommandService alarmCommandService; + + @BeforeEach + void setUp() { + RestAssuredMockMvc.mockMvc(mockMvc); + } + + @Nested + @DisplayName("알림을 읽을 시") + class ReadAlarm { + + @Test + @DisplayName("정상적인 요청이라면 200 응답을 반환한다.") + void readAlarm() throws Exception { + // given + mockingAuthArgumentResolver(); + willDoNothing().given(alarmCommandService).readAlarm(anyLong(), anyString(), any(Member.class)); + + // when, then + RestAssuredMockMvc + .given().log().all() + .headers(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .param("type", "CONTENT") + .when().patch("/alarms/{id}", 1L) + .then().log().all() + .status(HttpStatus.OK); + } + + @ParameterizedTest + @ValueSource(longs = {-1, 0}) + @DisplayName("알림ID가 양수가 아니라면 400 응답을 반환한다.") + void negativeAlarmId(Long alarmId) throws Exception { + // given + mockingAuthArgumentResolver(); + willDoNothing().given(alarmCommandService).readAlarm(anyLong(), anyString(), any(Member.class)); + + // when, then + RestAssuredMockMvc + .given().log().all() + .headers(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .param("type", "CONTENT") + .when().patch("/alarms/{id}", alarmId) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(201)) + .body("message", containsString("알림 ID는 양수만 가능합니다.")); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + @DisplayName("알림 타입이 공백이거나 존재하지 않으면 400 응답을 반환한다.") + void emptyAlarmType(String alarmType) throws Exception { + // given + mockingAuthArgumentResolver(); + willDoNothing().given(alarmCommandService).readAlarm(anyLong(), anyString(), any(Member.class)); + + // when, then + RestAssuredMockMvc + .given().log().all() + .headers(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .param("type", alarmType) + .when().patch("/alarms/{id}", 1L) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(201)) + .body("message", containsString("알림 타입이 공백이거나 존재하지 않습니다.")); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/controller/AlarmQueryControllerTest.java b/backend/src/test/java/com/votogether/domain/alarm/controller/AlarmQueryControllerTest.java new file mode 100644 index 000000000..94b14f341 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/controller/AlarmQueryControllerTest.java @@ -0,0 +1,132 @@ +package com.votogether.domain.alarm.controller; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.SoftAssertions.assertSoftly; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.BDDMockito.given; + +import com.votogether.domain.alarm.dto.response.ReportActionAlarmResponse; +import com.votogether.domain.alarm.dto.response.ReportActionResponse; +import com.votogether.domain.alarm.dto.response.PostAlarmDetailResponse; +import com.votogether.domain.alarm.dto.response.PostAlarmResponse; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.service.AlarmQueryService; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.test.ControllerTest; +import io.restassured.common.mapper.TypeRef; +import io.restassured.module.mockmvc.RestAssuredMockMvc; +import java.time.LocalDateTime; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; + +@WebMvcTest(AlarmQueryController.class) +class AlarmQueryControllerTest extends ControllerTest { + + @MockBean + AlarmQueryService alarmQueryService; + + @BeforeEach + void setUp() { + RestAssuredMockMvc.standaloneSetup(new AlarmQueryController(alarmQueryService)); + } + + @Test + @DisplayName("게시글 내역 목록을 조회한다.") + void getPostAlarm() throws Exception { + // given + mockingAuthArgumentResolver(); + + PostAlarmDetailResponse postAlarmDetailResponse = new PostAlarmDetailResponse(1L, "title", "저문"); + PostAlarmResponse postAlarmResponse = new PostAlarmResponse(1L, postAlarmDetailResponse, + LocalDateTime.now(), false); + + given(alarmQueryService.getPostAlarm(any(Member.class), anyInt())).willReturn(List.of(postAlarmResponse)); + + // when + List postAlarmResponses = RestAssuredMockMvc + .given().log().all() + .headers(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .queryParam("page", 0) + .when().get("/alarms/content") + .then().log().all() + .extract() + .as(new TypeRef<>() { + }); + + // then + PostAlarmResponse actualPostAlarmResponse = postAlarmResponses.get(0); + PostAlarmDetailResponse actualPostAlarmDetailResponse = actualPostAlarmResponse.detail(); + assertSoftly(softly -> { + softly.assertThat(postAlarmResponses).hasSize(1); + softly.assertThat(actualPostAlarmResponse.isChecked()).isEqualTo(false); + softly.assertThat(actualPostAlarmDetailResponse.postTitle()).isEqualTo("title"); + softly.assertThat(actualPostAlarmDetailResponse.commentWriter()).isEqualTo("저문"); + }); + } + + @Test + @DisplayName("신고조치알림목록을 가져온다.") + void getReportAlarmActions() { + // given + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .reportType(ReportType.POST) + .isChecked(false) + .reasons("광고성, 부적합성") + .target("1") + .build(); + ReportActionAlarmResponse response = ReportActionAlarmResponse.from(reportActionAlarm); + given(alarmQueryService.getReportActionAlarms(any(Member.class), anyInt())) + .willReturn(List.of(response)); + + // when + List results = RestAssuredMockMvc + .given().log().all() + .queryParam("page", 0) + .when().get("/alarms/report?page=0") + .then().log().all() + .status(HttpStatus.OK) + .extract() + .as(new TypeRef<>() { + }); + + // then + assertThat(results.get(0)).isEqualTo(response); + } + + @Test + @DisplayName("신고조치알림을 상세조회한다.") + void getReportAlarmAction() { + // given + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .reportType(ReportType.POST) + .isChecked(false) + .target("1") + .reasons("광고성, 부적합성") + .build(); + ReportActionResponse response = ReportActionResponse.from(reportActionAlarm); + given(alarmQueryService.getReportActionAlarm(anyLong(), any(Member.class))) + .willReturn(response); + + // when + ReportActionResponse result = RestAssuredMockMvc + .given().log().all() + .when().get("/alarms/report/{id}", 1) + .then().log().all() + .status(HttpStatus.OK) + .extract() + .as(ReportActionResponse.class); + + // then + assertThat(result).isEqualTo(response); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/entity/AlarmTest.java b/backend/src/test/java/com/votogether/domain/alarm/entity/AlarmTest.java new file mode 100644 index 000000000..6a6668d7c --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/entity/AlarmTest.java @@ -0,0 +1,80 @@ +package com.votogether.domain.alarm.entity; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.votogether.domain.alarm.entity.vo.AlarmType; +import com.votogether.domain.member.entity.Member; +import com.votogether.global.exception.BadRequestException; +import com.votogether.test.fixtures.MemberFixtures; +import java.time.LocalDateTime; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; + +class AlarmTest { + + @Test + @DisplayName("알림을 읽으면 읽음 여부가 TRUE로 수정된다.") + void readAlarm() { + // given + Member member = MemberFixtures.MALE_30.get(); + Alarm alarm = Alarm.builder() + .member(member) + .alarmType(AlarmType.COMMENT) + .targetId(1L) + .detail("detail") + .isChecked(false) + .build(); + + // when + alarm.read(); + + // then + assertThat(alarm.isChecked()).isTrue(); + } + + @Test + @DisplayName("알림 읽을 대상이 아니라면 예외를 던진다.") + void checkOwner() { + // given + Member member = MemberFixtures.MALE_30.get(); + ReflectionTestUtils.setField(member, "id", 1L); + Alarm alarm = Alarm.builder() + .member(member) + .alarmType(AlarmType.COMMENT) + .targetId(1L) + .detail("detail") + .isChecked(false) + .build(); + Member other = MemberFixtures.MALE_20.get(); + + // when, then + assertThatThrownBy(() -> alarm.checkOwner(other)) + .isInstanceOf(BadRequestException.class) + .hasMessage("알림을 읽을 대상이 아닙니다."); + } + + @Test + @DisplayName("알림이 생성된 시각과 인자로 받은 시각을 비교하여 최신 시각을 반환한다.") + void getLatestAlarmCreatedAt() { + // given + Member member = MemberFixtures.MALE_30.get(); + Alarm alarm = Alarm.builder() + .member(member) + .alarmType(AlarmType.COMMENT) + .targetId(1L) + .detail("detail") + .isChecked(false) + .build(); + ReflectionTestUtils.setField(alarm, "createdAt", LocalDateTime.of(2010, 10, 18, 12, 0)); + LocalDateTime now = LocalDateTime.now(); + + // when + LocalDateTime latestAlarmCreatedAt = alarm.getLatestAlarmCreatedAt(now); + + // then + assertThat(latestAlarmCreatedAt).isEqualTo(now); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/entity/ReportActionAlarmTest.java b/backend/src/test/java/com/votogether/domain/alarm/entity/ReportActionAlarmTest.java new file mode 100644 index 000000000..e215d59a9 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/entity/ReportActionAlarmTest.java @@ -0,0 +1,57 @@ +package com.votogether.domain.alarm.entity; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.global.exception.BadRequestException; +import com.votogether.test.fixtures.MemberFixtures; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; + +class ReportActionAlarmTest { + + @Test + @DisplayName("알림을 읽으면 읽음 여부가 TRUE로 수정된다.") + void readAlarm() { + // given + Member member = MemberFixtures.MALE_30.get(); + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .member(member) + .reportType(ReportType.POST) + .target("target") + .reasons("reasons") + .isChecked(false) + .build(); + + // when + reportActionAlarm.read(); + + // then + assertThat(reportActionAlarm.isChecked()).isTrue(); + } + + @Test + @DisplayName("알림 읽을 대상이 아니라면 예외를 던진다.") + void checkOwner() { + // given + Member member = MemberFixtures.MALE_30.get(); + ReflectionTestUtils.setField(member, "id", 1L); + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .member(member) + .reportType(ReportType.POST) + .target("target") + .reasons("reasons") + .isChecked(false) + .build(); + Member other = MemberFixtures.MALE_20.get(); + + // when, then + assertThatThrownBy(() -> reportActionAlarm.checkOwner(other)) + .isInstanceOf(BadRequestException.class) + .hasMessage("알림을 읽을 대상이 아닙니다."); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/entity/vo/AlarmActionTypeTest.java b/backend/src/test/java/com/votogether/domain/alarm/entity/vo/AlarmActionTypeTest.java new file mode 100644 index 000000000..d88cabc9a --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/entity/vo/AlarmActionTypeTest.java @@ -0,0 +1,44 @@ +package com.votogether.domain.alarm.entity.vo; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.votogether.global.exception.BadRequestException; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class AlarmActionTypeTest { + + @Nested + @DisplayName("타입으로 부터 알림 액션 타입을 생성할 때") + class From { + + @ParameterizedTest + @ValueSource(strings = {"CONTENT", "REPORT"}) + @DisplayName("존재하는 타입이라면 액션 타입을 반환한다.") + void existType(String type) { + // given, when + AlarmActionType alarmActionType = AlarmActionType.from(type); + + // then + assertThat(alarmActionType).isEqualTo(AlarmActionType.valueOf(type)); + } + + @Test + @DisplayName("존재하지 않은 타입이라면 예외를 던진다.") + void notExistType() { + // given + String type = "HELLO"; + + // when, then + assertThatThrownBy(() -> AlarmActionType.from(type)) + .isInstanceOf(BadRequestException.class) + .hasMessage("등록되지 않은 알림 동작입니다."); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepositoryTest.java b/backend/src/test/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepositoryTest.java new file mode 100644 index 000000000..cc2cf6d8b --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/repository/ReportActionAlarmRepositoryTest.java @@ -0,0 +1,105 @@ +package com.votogether.domain.alarm.repository; + +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.test.RepositoryTest; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; + +class ReportActionAlarmRepositoryTest extends RepositoryTest { + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + + @Test + @DisplayName("신고조치알림을 최신순으로 가져온다") + void getInLatestOrder() { + // given + Member member = memberTestPersister.builder().save(); + + ReportActionAlarm reportActionAlarmA = ReportActionAlarm.builder() + .reportType(ReportType.POST) + .member(member) + .isChecked(false) + .target("1") + .reasons("광고성, 부적합성") + .build(); + + ReportActionAlarm reportActionAlarmB = ReportActionAlarm.builder() + .reportType(ReportType.NICKNAME) + .member(member) + .isChecked(false) + .target("닉네임") + .reasons("광고성, 부적합성") + .build(); + + ReportActionAlarm reportActionAlarmC = ReportActionAlarm.builder() + .reportType(ReportType.COMMENT) + .member(member) + .isChecked(false) + .target("댓글내용") + .reasons("광고성, 부적합성") + .build(); + + reportActionAlarmRepository.save(reportActionAlarmA); + reportActionAlarmRepository.save(reportActionAlarmB); + reportActionAlarmRepository.save(reportActionAlarmC); + + // when + PageRequest pageRequest = PageRequest.of(0, 10); + List reportActionAlarms = reportActionAlarmRepository + .findByMemberOrderByIdDesc(member, pageRequest); + + // then + assertSoftly(softly -> { + softly.assertThat(reportActionAlarms).hasSize(3); + softly.assertThat(reportActionAlarms.get(0).getReportType()).isEqualTo( + reportActionAlarmC.getReportType()); + softly.assertThat(reportActionAlarms.get(1).getReportType()).isEqualTo( + reportActionAlarmB.getReportType()); + softly.assertThat(reportActionAlarms.get(2).getReportType()).isEqualTo( + reportActionAlarmA.getReportType()); + }); + } + + @Test + @DisplayName("신고조치알림을 10개씩 가져온다.") + void getWithTen() { + // given + Member member = memberTestPersister.builder().save(); + + for (int i = 0; i < 11; i++) { + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .reportType(ReportType.POST) + .member(member) + .isChecked(false) + .target(String.valueOf(i)) + .reasons("광고성, 부적합성") + .build(); + reportActionAlarmRepository.save(reportActionAlarm); + } + + // when + PageRequest pageRequestA = PageRequest.of(0, 10); + List reportActionAlarmsA = reportActionAlarmRepository + .findByMemberOrderByIdDesc(member, pageRequestA); + + PageRequest pageRequestB = PageRequest.of(1, 10); + List reportActionAlarmsB = reportActionAlarmRepository + .findByMemberOrderByIdDesc(member, pageRequestB); + + // then + assertSoftly(softly -> { + softly.assertThat(reportActionAlarmsA).hasSize(10); + softly.assertThat(reportActionAlarmsB).hasSize(1); + } + ); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/service/AlarmCommandServiceTest.java b/backend/src/test/java/com/votogether/domain/alarm/service/AlarmCommandServiceTest.java new file mode 100644 index 000000000..bc9a253ef --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/service/AlarmCommandServiceTest.java @@ -0,0 +1,92 @@ +package com.votogether.domain.alarm.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.entity.vo.AlarmType; +import com.votogether.domain.alarm.repository.AlarmRepository; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.global.exception.NotFoundException; +import com.votogether.test.ServiceTest; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class AlarmCommandServiceTest extends ServiceTest { + + @Autowired + AlarmCommandService alarmCommandService; + + @Autowired + AlarmRepository alarmRepository; + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + + @Nested + @DisplayName("알림을 읽을 시") + class ReadAlarm { + + @Test + @DisplayName("정상적인 요청이라면 알림을 읽는다.") + void readAlarm() { + // given + Member member = memberTestPersister.builder().save(); + Alarm alarm = Alarm.builder() + .member(member) + .alarmType(AlarmType.COMMENT) + .commentWriterNickname("nickname") + .targetId(1L) + .detail("detail") + .isChecked(false) + .build(); + alarmRepository.save(alarm); + String type = "CONTENT"; + + // when + alarmCommandService.readAlarm(alarm.getId(), type, member); + + // then + assertThat(alarm.isChecked()).isTrue(); + } + + @Test + @DisplayName("정상적인 요청이라면 신고 알림을 읽는다.") + void readReportAlarm() { + // given + Member member = memberTestPersister.builder().save(); + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .member(member) + .reportType(ReportType.POST) + .target("target") + .reasons("reasons") + .isChecked(false) + .build(); + reportActionAlarmRepository.save(reportActionAlarm); + String type = "REPORT"; + + // when + alarmCommandService.readAlarm(reportActionAlarm.getId(), type, member); + } + + @Test + @DisplayName("알림이 존재하지 않으면 예외를 던진다.") + void notExistAlarm() { + // given + Member member = memberTestPersister.builder().save(); + String type = "CONTENT"; + + // when, then + assertThatThrownBy(() -> alarmCommandService.readAlarm(-1L, type, member)) + .isInstanceOf(NotFoundException.class) + .hasMessage("알림이 존재하지 않습니다."); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/service/AlarmEventListenerTest.java b/backend/src/test/java/com/votogether/domain/alarm/service/AlarmEventListenerTest.java new file mode 100644 index 000000000..36221b918 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/service/AlarmEventListenerTest.java @@ -0,0 +1,56 @@ +package com.votogether.domain.alarm.service; + +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.alarm.dto.event.PostAlarmEvent; +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.entity.vo.AlarmType; +import com.votogether.domain.alarm.repository.AlarmRepository; +import com.votogether.domain.member.entity.Member; +import com.votogether.test.ServiceTest; +import java.util.List; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.jdbc.Sql.ExecutionPhase; +import org.springframework.test.context.transaction.TestTransaction; + +@Sql(scripts = "classpath:truncate.sql", executionPhase = ExecutionPhase.AFTER_TEST_METHOD) +class AlarmEventListenerTest extends ServiceTest { + + @Autowired + AlarmEventListener alarmEventListener; + + @Autowired + AlarmRepository alarmRepository; + + @Disabled + @Test + @DisplayName("게시글 관련 알림 이벤트를 수신한다.") + void handlePostAlarmEvent() throws Exception { + // given + Member member = memberTestPersister.builder().save(); + PostAlarmEvent postAlarmEvent = new PostAlarmEvent(member, "nickname", 1L, AlarmType.COMMENT, "title"); + + // when + alarmEventListener.handlePostAlarmEvent(postAlarmEvent); + + TestTransaction.flagForCommit(); + TestTransaction.end(); + + Thread.sleep(2000); + + // then + List alarms = alarmRepository.findAll(); + Alarm alarm = alarms.get(0); + assertSoftly(softly -> { + softly.assertThat(alarms).hasSize(1); + softly.assertThat(alarm.getTargetId()).isEqualTo(1L); + softly.assertThat(alarm.getAlarmType()).isEqualTo(AlarmType.COMMENT); + softly.assertThat(alarm.getDetail()).isEqualTo("title"); + }); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/alarm/service/AlarmQueryServiceTest.java b/backend/src/test/java/com/votogether/domain/alarm/service/AlarmQueryServiceTest.java new file mode 100644 index 000000000..a9c92b23f --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/alarm/service/AlarmQueryServiceTest.java @@ -0,0 +1,178 @@ +package com.votogether.domain.alarm.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.alarm.dto.response.ReportActionAlarmResponse; +import com.votogether.domain.alarm.dto.response.ReportActionResponse; +import com.votogether.domain.alarm.dto.response.PostAlarmDetailResponse; +import com.votogether.domain.alarm.dto.response.PostAlarmResponse; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.post.dto.request.comment.CommentCreateRequest; +import com.votogether.domain.post.entity.Post; +import com.votogether.domain.post.service.PostCommandService; +import com.votogether.domain.post.service.PostCommentService; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.test.ServiceTest; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.jdbc.Sql; +import org.springframework.test.context.jdbc.Sql.ExecutionPhase; +import org.springframework.test.context.transaction.TestTransaction; + +@Sql(scripts = "classpath:truncate.sql", executionPhase = ExecutionPhase.AFTER_TEST_METHOD) +class AlarmQueryServiceTest extends ServiceTest { + + @Autowired + AlarmQueryService alarmQueryService; + + @Autowired + PostCommentService postCommentService; + + @Autowired + PostCommandService postCommandService; + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + + @Nested + @DisplayName("알림 조회는 ") + class GetPostAlarm { + + @Test + @DisplayName("댓글을 생성할 때 가능하다.") + void whenCreateComment() throws Exception { + // given + Member commentWriter = memberTestPersister.builder().save(); + Post post = postTestPersister.postBuilder().save(); + CommentCreateRequest commentCreateRequest = new CommentCreateRequest("댓글입니다."); + + postCommentService.createComment(post.getId(), commentCreateRequest, commentWriter); + + TestTransaction.flagForCommit(); + TestTransaction.end(); + + Thread.sleep(1000); + + // when + List postAlarmResponses = alarmQueryService.getPostAlarm(post.getWriter(), 0); + + // then + PostAlarmResponse postAlarmResponse = postAlarmResponses.get(0); + PostAlarmDetailResponse postAlarmDetailResponse = postAlarmResponse.detail(); + assertSoftly(softly -> { + softly.assertThat(postAlarmResponses).hasSize(1); + softly.assertThat(postAlarmResponse.isChecked()).isEqualTo(false); + softly.assertThat(postAlarmDetailResponse.postTitle()).isEqualTo("title"); + }); + } + + @Test + @DisplayName("게시글이 마감완료가 되었을 때 가능하다.") + void whenPostClosed() throws Exception { + // given + Member member = memberTestPersister.builder().save(); + Post post = postTestPersister.postBuilder().writer(member).save(); + + postCommandService.closePostEarly(post.getId(), member); + + TestTransaction.flagForCommit(); + TestTransaction.end(); + + Thread.sleep(1000); + + // when + List postAlarmResponses = alarmQueryService.getPostAlarm(member, 0); + + // then + PostAlarmResponse postAlarmResponse = postAlarmResponses.get(0); + PostAlarmDetailResponse postAlarmDetailResponse = postAlarmResponse.detail(); + assertSoftly(softly -> { + softly.assertThat(postAlarmResponses).hasSize(1); + softly.assertThat(postAlarmResponse.isChecked()).isEqualTo(false); + softly.assertThat(postAlarmDetailResponse.postTitle()).isEqualTo("title"); + }); + } + + @Test + @DisplayName("어떠한 이벤트도 발생하지 않았다면 빈 리스트가 조회된다.") + void getEmptyListWhenNoEventOccurs() { + // given + Member member = memberTestPersister.builder().save(); + + // when + List postAlarmResponses = alarmQueryService.getPostAlarm(member, 0); + + // then + assertThat(postAlarmResponses).hasSize(0); + } + + } + + @Test + @DisplayName("신고조치알림 목록을 조회한다.") + void getReportActionAlarms() { + // given + Member member = memberTestPersister.builder().save(); + + ReportActionAlarm reportActionAlarmA = ReportActionAlarm.builder() + .reportType(ReportType.POST) + .member(member) + .isChecked(false) + .reasons("광고성, 부적합성") + .target("1") + .build(); + + reportActionAlarmRepository.save(reportActionAlarmA); + + // when + List reportActionAlarms = alarmQueryService.getReportActionAlarms(member, 0); + + // then + ReportActionAlarmResponse result = reportActionAlarms.get(0); + assertSoftly(softly -> { + softly.assertThat(reportActionAlarms).hasSize(1); + softly.assertThat(result.alarmId()).isNotNull(); + softly.assertThat(result.isChecked()).isFalse(); + softly.assertThat(result.detail().reportActionId()).isNotNull(); + softly.assertThat(result.detail().content()).isEqualTo("1"); + softly.assertThat(result.detail().reasons()).containsAll(Set.of("광고성", "부적합성")); + softly.assertThat(result.detail().type()).isEqualTo(ReportType.POST); + }); + } + + @Test + @DisplayName("신고 조치 알림을 상세 조회한다.") + void getReportActionAlarm() { + // given + Member member = memberTestPersister.builder().save(); + + ReportActionAlarm reportActionAlarmA = ReportActionAlarm.builder() + .reportType(ReportType.POST) + .member(member) + .isChecked(false) + .reasons("광고성, 부적합성") + .target("1") + .build(); + + ReportActionAlarm savedReportActionAlarm = reportActionAlarmRepository.save(reportActionAlarmA); + + // when + ReportActionResponse response = alarmQueryService.getReportActionAlarm(savedReportActionAlarm.getId(), member); + + // then + assertSoftly(softly -> { + softly.assertThat(response.reportActionId()).isEqualTo(savedReportActionAlarm.getId()); + softly.assertThat(response.type()).isEqualTo(ReportType.POST); + softly.assertThat(response.content()).isEqualTo("1"); + softly.assertThat(response.reasons()).containsAll(Set.of("광고성", "부적합성")); + }); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java b/backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java index 4eb97e5fa..09e12793d 100644 --- a/backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java +++ b/backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java @@ -11,6 +11,7 @@ import com.votogether.domain.member.entity.MemberCategory; import com.votogether.domain.member.repository.MemberCategoryRepository; import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.global.exception.BadRequestException; import com.votogether.test.ServiceTest; import com.votogether.test.fixtures.CategoryFixtures; import com.votogether.test.fixtures.MemberFixtures; @@ -106,7 +107,7 @@ void removeFavoriteCategoryException() { // when, then assertThatThrownBy(() -> categoryService.removeFavoriteCategory(member, category.getId())) - .isInstanceOf(IllegalArgumentException.class) + .isInstanceOf(BadRequestException.class) .hasMessage("해당 카테고리는 선호 카테고리가 아닙니다."); } diff --git a/backend/src/test/java/com/votogether/domain/member/controller/MemberControllerTest.java b/backend/src/test/java/com/votogether/domain/member/controller/MemberControllerTest.java index 281238f56..1372b8a18 100644 --- a/backend/src/test/java/com/votogether/domain/member/controller/MemberControllerTest.java +++ b/backend/src/test/java/com/votogether/domain/member/controller/MemberControllerTest.java @@ -13,6 +13,7 @@ import com.votogether.domain.member.dto.response.MemberInfoResponse; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.vo.Gender; +import com.votogether.domain.member.entity.vo.Roles; import com.votogether.domain.member.entity.vo.SocialType; import com.votogether.global.jwt.TokenPayload; import com.votogether.test.ControllerTest; @@ -55,7 +56,9 @@ void findMemberInfo() throws Exception { Gender.MALE, 1988, 0, - 0 + 0, + Roles.MEMBER, + false ); given(tokenProcessor.resolveToken(anyString())).willReturn("token"); @@ -75,8 +78,8 @@ void findMemberInfo() throws Exception { // then assertAll( () -> assertThat(response.nickname()).isEqualTo("저문"), - () -> assertThat(response.postCount()).isEqualTo(0), - () -> assertThat(response.voteCount()).isEqualTo(0) + () -> assertThat(response.postCount()).isZero(), + () -> assertThat(response.voteCount()).isZero() ); } @@ -217,6 +220,26 @@ void invalidNullOfBirthYear(Integer birthYear) throws Exception { } + @Test + @DisplayName("최신 알림 읽기에 성공하면 200을 반환한다.") + void checkLatestAlarm() throws Exception { + // given + TokenPayload tokenPayload = new TokenPayload(1L, 1L, 1L); + given(tokenProcessor.resolveToken(anyString())).willReturn("token"); + given(tokenProcessor.parseToken(anyString())).willReturn(tokenPayload); + given(memberService.findById(anyLong())).willReturn(MemberFixtures.FEMALE_20.get()); + + willDoNothing().given(memberService).checkLatestAlarm(any(Member.class)); + + // when, then + RestAssuredMockMvc + .given().log().all() + .headers(HttpHeaders.AUTHORIZATION, "Bearer token") + .when().patch("/members/me/check-alarm") + .then().log().all() + .statusCode(HttpStatus.OK.value()); + } + @Test @DisplayName("회원 탈퇴에 성공하면 204를 반환한다.") void deleteMember() throws Exception { diff --git a/backend/src/test/java/com/votogether/domain/member/entity/MemberTest.java b/backend/src/test/java/com/votogether/domain/member/entity/MemberTest.java index b3eb1f33a..0cdba4e65 100644 --- a/backend/src/test/java/com/votogether/domain/member/entity/MemberTest.java +++ b/backend/src/test/java/com/votogether/domain/member/entity/MemberTest.java @@ -6,6 +6,7 @@ import com.votogether.domain.member.entity.vo.Gender; import com.votogether.domain.member.entity.vo.SocialType; import com.votogether.global.exception.BadRequestException; +import com.votogether.test.fixtures.MemberFixtures; import java.time.LocalDateTime; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -15,7 +16,7 @@ class MemberTest { @Nested - @DisplayName("닉네임을 주기에 따라 변경하는 경우") + @DisplayName("닉네임을 주기에 따라 변경하는 경우 ") class ChangeNicknameByCycle { @Test @@ -112,4 +113,53 @@ void notAllowedChangeToInitialNicknamePrefix() { } + @Test + @DisplayName("회원은 알림을 확인하면 이전에 저장되어있던 시간 이후의 시간으로 변경된다.") + void checkAlarm() { + // given + Member member = MemberFixtures.MALE_20.get(); + ReflectionTestUtils.setField(member, "createdAt", LocalDateTime.of(2001, 10, 10, 12, 0)); + LocalDateTime beforeAlarmCheckedAt = member.getAlarmCheckedAt(); + + // when + member.checkAlarm(); + + // then + LocalDateTime afterAlarmCheckedAt = member.getAlarmCheckedAt(); + assertThat(afterAlarmCheckedAt).isAfter(beforeAlarmCheckedAt); + } + + @Nested + @DisplayName("회원의 최신 알림 읽은 시각이 인자로 받은 시각보다") + class HasLatestAlarmCompareTo { + + @Test + @DisplayName("이전이면 true를 반환한다.") + void returnsTrue() { + // given + Member member = MemberFixtures.MALE_20.get(); + + // when + boolean hasLatestAlarm = member.hasLatestAlarmCompareTo(LocalDateTime.now()); + + // then + assertThat(hasLatestAlarm).isTrue(); + } + + @Test + @DisplayName("이후이면 false를 반환한다.") + void returnsFalse() { + // given + Member member = MemberFixtures.MALE_20.get(); + LocalDateTime beforeTime = LocalDateTime.of(2010, 10, 18, 12, 0); + + // when + boolean hasLatestAlarm = member.hasLatestAlarmCompareTo(beforeTime); + + // then + assertThat(hasLatestAlarm).isFalse(); + } + + } + } diff --git a/backend/src/test/java/com/votogether/domain/member/entity/PassionRankingsTest.java b/backend/src/test/java/com/votogether/domain/member/entity/PassionRankingsTest.java deleted file mode 100644 index 8bd2ef013..000000000 --- a/backend/src/test/java/com/votogether/domain/member/entity/PassionRankingsTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.votogether.domain.member.entity; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; - -import com.votogether.domain.ranking.entity.PassionRankings; -import com.votogether.domain.ranking.entity.vo.PassionRecord; -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.test.util.ReflectionTestUtils; - -class PassionRankingsTest { - - @Nested - @DisplayName("랭킹") - class Ranking { - - @Test - @DisplayName("랭킹 순위와 점수를 계산한다.") - void calculateRank() { - //given - Member memberA = Member.builder().nickname("00").build(); - Member memberB = Member.builder().nickname("11").build(); - Member memberC = Member.builder().nickname("22").build(); - ReflectionTestUtils.setField(memberA, "id", 1L); - ReflectionTestUtils.setField(memberB, "id", 2L); - ReflectionTestUtils.setField(memberC, "id", 3L); - - Map board = new HashMap<>(); - board.put(memberA, new PassionRecord(1, 1)); - board.put(memberB, new PassionRecord(1, 2)); - board.put(memberC, new PassionRecord(1, 3)); - - PassionRankings passionRankings = new PassionRankings(board); - - //when, then - assertAll( - () -> assertThat(passionRankings.getScore(memberA)).isEqualTo(6), - () -> assertThat(passionRankings.getScore(memberB)).isEqualTo(7), - () -> assertThat(passionRankings.getScore(memberC)).isEqualTo(8), - () -> assertThat(passionRankings.getRanking(memberA)).isEqualTo(3), - () -> assertThat(passionRankings.getRanking(memberB)).isEqualTo(2), - () -> assertThat(passionRankings.getRanking(memberC)).isEqualTo(1) - ); - } - - @Test - @DisplayName("동순위가 존재하는 랭킹 순위와 점수를 계산한다.") - void calculateRank1() { - //given - Member memberA = Member.builder().nickname("00").build(); - Member memberB = Member.builder().nickname("11").build(); - Member memberC = Member.builder().nickname("22").build(); - Member memberD = Member.builder().nickname("33").build(); - ReflectionTestUtils.setField(memberA, "id", 1L); - ReflectionTestUtils.setField(memberB, "id", 2L); - ReflectionTestUtils.setField(memberC, "id", 3L); - ReflectionTestUtils.setField(memberD, "id", 4L); - - Map board = new HashMap<>(); - board.put(memberA, new PassionRecord(1, 1)); - board.put(memberB, new PassionRecord(1, 3)); - board.put(memberC, new PassionRecord(1, 3)); - board.put(memberD, new PassionRecord(1, 3)); - - PassionRankings passionRankings = new PassionRankings(board); - - //when, then - assertAll( - () -> assertThat(passionRankings.getScore(memberA)).isEqualTo(6), - () -> assertThat(passionRankings.getScore(memberB)).isEqualTo(8), - () -> assertThat(passionRankings.getScore(memberC)).isEqualTo(8), - () -> assertThat(passionRankings.getRanking(memberA)).isEqualTo(4), - () -> assertThat(passionRankings.getRanking(memberB)).isEqualTo(1), - () -> assertThat(passionRankings.getRanking(memberC)).isEqualTo(1), - () -> assertThat(passionRankings.getRanking(memberD)).isEqualTo(1) - ); - } - - } - -} diff --git a/backend/src/test/java/com/votogether/domain/member/service/MemberServiceTest.java b/backend/src/test/java/com/votogether/domain/member/service/MemberServiceTest.java index 5271048b3..3634b3666 100644 --- a/backend/src/test/java/com/votogether/domain/member/service/MemberServiceTest.java +++ b/backend/src/test/java/com/votogether/domain/member/service/MemberServiceTest.java @@ -2,17 +2,26 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.SoftAssertions.assertSoftly; import static org.junit.jupiter.api.Assertions.assertAll; +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.category.entity.Category; import com.votogether.domain.category.repository.CategoryRepository; import com.votogether.domain.member.dto.request.MemberDetailRequest; +import com.votogether.domain.member.dto.response.MemberInfoResponse; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.MemberCategory; import com.votogether.domain.member.entity.vo.Gender; +import com.votogether.domain.member.entity.vo.Roles; import com.votogether.domain.member.entity.vo.SocialType; import com.votogether.domain.member.repository.MemberCategoryRepository; +import com.votogether.domain.member.repository.MemberMetricRepository; import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.domain.notice.entity.Notice; +import com.votogether.domain.notice.repository.NoticeRepository; import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.entity.comment.Comment; import com.votogether.domain.post.repository.CommentRepository; @@ -21,9 +30,12 @@ import com.votogether.domain.report.entity.vo.ReportType; import com.votogether.domain.report.repository.ReportRepository; import com.votogether.global.exception.BadRequestException; +import com.votogether.global.exception.NotFoundException; import com.votogether.test.ServiceTest; import com.votogether.test.fixtures.MemberFixtures; +import com.votogether.test.persister.AlarmTestPersister; import com.votogether.test.persister.PostTestPersister; +import com.votogether.test.persister.ReportActionAlarmTestPersister; import jakarta.persistence.EntityManager; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; @@ -34,6 +46,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.util.ReflectionTestUtils; class MemberServiceTest extends ServiceTest { @@ -43,6 +56,9 @@ class MemberServiceTest extends ServiceTest { @Autowired MemberRepository memberRepository; + @Autowired + MemberMetricRepository memberMetricRepository; + @Autowired PostRepository postRepository; @@ -61,6 +77,18 @@ class MemberServiceTest extends ServiceTest { @Autowired PostTestPersister postTestPersister; + @Autowired + AlarmTestPersister alarmTestPersister; + + @Autowired + ReportActionAlarmTestPersister reportActionAlarmTestPersister; + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + + @Autowired + NoticeRepository noticeRepository; + @Autowired EntityManager em; @@ -74,7 +102,10 @@ void register() { Member registeredMember = memberService.register(member); // then - assertThat(registeredMember.getId()).isNotNull(); + assertSoftly(softly -> { + softly.assertThat(registeredMember.getId()).isNotNull(); + softly.assertThat(memberMetricRepository.findByMember(member)).isPresent(); + }); } @Nested @@ -91,6 +122,8 @@ void changeNickname() { .birthYear(1966) .socialId("abc123") .socialType(SocialType.KAKAO) + .roles(Roles.MEMBER) + .alarmCheckedAt(LocalDateTime.now()) .build(); String newNickname = "jeomxon"; Member savedMember = memberRepository.save(member); @@ -151,6 +184,8 @@ void changeNicknameThrowsExceptionNotPassedChangingCycle() { .birthYear(1966) .socialId("abc123") .socialType(SocialType.KAKAO) + .roles(Roles.MEMBER) + .alarmCheckedAt(LocalDateTime.now()) .build(); Member savedMember = memberRepository.save(member); @@ -176,6 +211,8 @@ void updateDetailsSuccess() { .nickname("저문") .socialType(SocialType.KAKAO) .socialId("123123123") + .roles(Roles.MEMBER) + .alarmCheckedAt(LocalDateTime.now()) .build(); Member member = memberRepository.save(unsavedMember); MemberDetailRequest request = new MemberDetailRequest(Gender.FEMALE, 2000); @@ -194,13 +231,7 @@ void updateDetailsSuccess() { @DisplayName("기존 성별이 지정되어 있으면 예외가 발생한다.") void updateDetailsSameGender() { // given - Member unsavedMember = Member.builder() - .nickname("저문") - .gender(Gender.MALE) - .socialType(SocialType.KAKAO) - .socialId("123123123") - .build(); - Member member = memberRepository.save(unsavedMember); + Member member = memberRepository.save(MemberFixtures.MALE_30.get()); MemberDetailRequest request = new MemberDetailRequest(Gender.FEMALE, 2000); // when, then @@ -215,11 +246,14 @@ void updateDetailsSameBirthYear() { // given Member unsavedMember = Member.builder() .nickname("저문") - .birthYear(2000) + .birthYear(1993) .socialType(SocialType.KAKAO) .socialId("123123123") + .roles(Roles.MEMBER) + .alarmCheckedAt(LocalDateTime.now()) .build(); Member member = memberRepository.save(unsavedMember); + MemberDetailRequest request = new MemberDetailRequest(Gender.MALE, 1995); // when, then @@ -230,6 +264,177 @@ void updateDetailsSameBirthYear() { } + @Nested + @DisplayName("내 정보 조회를 할 때") + class FindMemberInfo { + + @Test + @DisplayName("정상적으로 조회가 된다.") + void success() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertSoftly(softly -> { + softly.assertThat(memberInfoResponse.gender()).isEqualTo(Gender.MALE); + softly.assertThat(memberInfoResponse.birthYear()).isEqualTo(1995); + softly.assertThat(memberInfoResponse.postCount()).isZero(); + softly.assertThat(memberInfoResponse.voteCount()).isZero(); + softly.assertThat(memberInfoResponse.hasLatestAlarm()).isFalse(); + }); + } + + @Test + @DisplayName("메트릭 정보가 없는 경우 예외가 발생한다.") + void throwsExceptionWhenNoMetrics() { + // given + Member member = memberTestPersister.builder().save(); + + // when, then + assertThatThrownBy(() -> memberService.findMemberInfo(member)) + .isInstanceOf(NotFoundException.class) + .hasMessage("메트릭 정보가 존재하지 않습니다."); + } + + @Test + @DisplayName("모든 알림이 존재하지 않는 경우 false가 반환된다.") + void returnsFalseWhenNoAlarmExists() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertThat(memberInfoResponse.hasLatestAlarm()).isFalse(); + } + + @Test + @DisplayName("게시글 내역 알림이 존재한다면 회원의 최신 알림 확인 시각과 비교하여 게시글 알림이 더 최신인 경우 true를 반환한다.") + void returnsTrueWhenPostAlarmIsLatest() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + alarmTestPersister.builder().member(member).save(); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertThat(memberInfoResponse.hasLatestAlarm()).isTrue(); + } + + @Test + @DisplayName("신고 조치 내역 알림이 존재한다면 회원의 최신 알림 확인 시각과 비교하여 신고 조치 내역 알림이 더 최신인 경우 true를 반환한다.") + void returnsTrueWhenReportActionAlarmIsLatest() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + reportActionAlarmTestPersister.builder().member(member).save(); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertThat(memberInfoResponse.hasLatestAlarm()).isTrue(); + } + + @Test + @DisplayName("신고 조치 내역 알림과 게시글 내역 알림이 모두 존재한다면 회원의 최신 알림 확인 시각과 비교하여 알림들이 더 최신인 경우 true를 반환한다.") + void returnsTrueWhenReportActionAlarmOrPostAlarmIsLatest() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + alarmTestPersister.builder().member(member).save(); + reportActionAlarmTestPersister.builder().member(member).save(); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertThat(memberInfoResponse.hasLatestAlarm()).isTrue(); + } + + @Test + @DisplayName("게시글 내역 알림과 신고 조치 내역 알림 모두 존재하고, 게시글 내역 알림이 가장 최신인 경우 true를 반환한다.") + void returnsTrueWhenPostAlarmIsLatestAndReportActionAlarmIsNotLatest() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Alarm alarm = alarmTestPersister.builder().member(member).save(); + ReportActionAlarm reportActionAlarm = reportActionAlarmTestPersister.builder().member(member).save(); + + ReflectionTestUtils.setField(member, "alarmCheckedAt", LocalDateTime.now().minusDays(1)); + ReflectionTestUtils.setField(alarm, "createdAt", LocalDateTime.now()); + ReflectionTestUtils.setField(reportActionAlarm, "createdAt", LocalDateTime.now().minusDays(1)); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertThat(memberInfoResponse.hasLatestAlarm()).isTrue(); + } + + @Test + @DisplayName("게시글 내역 알림과 신고 조치 내역 알림 모두 존재하고, 신고 조치 내역 알림이 가장 최신인 경우 true를 반환한다.") + void returnsTrueWhenPostAlarmIsNotLatestAndReportActionAlarmIsLatest() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Alarm alarm = alarmTestPersister.builder().member(member).save(); + ReportActionAlarm reportActionAlarm = reportActionAlarmTestPersister.builder().member(member).save(); + + ReflectionTestUtils.setField(member, "alarmCheckedAt", LocalDateTime.now().minusDays(1)); + ReflectionTestUtils.setField(alarm, "createdAt", LocalDateTime.now().minusDays(1)); + ReflectionTestUtils.setField(reportActionAlarm, "createdAt", LocalDateTime.now()); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertThat(memberInfoResponse.hasLatestAlarm()).isTrue(); + } + + @Test + @DisplayName("신고 조치 내역 알림이 존재하지만, 회원의 최신 알림 확인 시각이 더 최신인 경우 false를 반환한다.") + void returnsFalseWhenReportActionAlarmOrPostAlarmIsNotLatest() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Alarm alarm = alarmTestPersister.builder().member(member).save(); + ReportActionAlarm reportActionAlarm = reportActionAlarmTestPersister.builder().member(member).save(); + + ReflectionTestUtils.setField(alarm, "createdAt", LocalDateTime.now().minusDays(1)); + ReflectionTestUtils.setField(reportActionAlarm, "createdAt", LocalDateTime.now().minusDays(1)); + + // when + MemberInfoResponse memberInfoResponse = memberService.findMemberInfo(member); + + // then + assertThat(memberInfoResponse.hasLatestAlarm()).isFalse(); + } + + } + + @Test + @DisplayName("최신 알림을 확인한다.") + void checkLatestAlarm() { + // given + Member member = memberTestPersister.builder().save(); + LocalDateTime beforeTime = member.getCreatedAt(); + + // when + memberService.checkLatestAlarm(member); + + // then + assertThat(member.getAlarmCheckedAt()).isNotEqualTo(beforeTime); + } + @Nested @DisplayName("회원 탈퇴를 할 때") class DeleteMember { @@ -247,6 +452,20 @@ void success() { assertThat(memberRepository.findAll()).isEmpty(); } + @Test + @DisplayName("멤버 통계 정보도 함께 삭제한다.") + void deleteWithMetric() { + // given + Member member = MemberFixtures.FEMALE_20.get(); + Member registeredMember = memberService.register(member); + + // when + memberService.deleteMember(registeredMember); + + // then + assertThat(memberMetricRepository.findAll()).isEmpty(); + } + @Test @DisplayName("회원과 게시글이 존재하는 경우 정상적으로 성공한다.") void successWithPost() { @@ -459,6 +678,55 @@ void deleteWithReportedNickname() { ); } + @Test + @DisplayName("회원과 신고조치알림 모두 삭제된다.") + void deleteWithReportActionAlarms() { + // given + Member member = memberRepository.save(MemberFixtures.MALE_20.get()); + + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .reportType(ReportType.POST) + .member(member) + .isChecked(false) + .target("1") + .reasons("광고성, 부적합성") + .build(); + reportActionAlarmRepository.save(reportActionAlarm); + + // when + memberService.deleteMember(member); + + // then + assertAll( + () -> assertThat(memberRepository.findAll()).isEmpty(), + () -> assertThat(reportActionAlarmRepository.findAll()).isEmpty() + ); + } + + @Test + @DisplayName("회원과 작성한 공지사항 모두 삭제된다.") + void deleteWithNotices() { + // given + Member member = memberRepository.save(MemberFixtures.MALE_20.get()); + + Notice notice = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().plusDays(1)) + .build(); + noticeRepository.save(notice); + + // when + memberService.deleteMember(member); + + // then + assertAll( + () -> assertThat(memberRepository.findAll()).isEmpty(), + () -> assertThat(noticeRepository.findAll()).isEmpty() + ); + } + } } diff --git a/backend/src/test/java/com/votogether/domain/notice/controller/NoticeCommandControllerTest.java b/backend/src/test/java/com/votogether/domain/notice/controller/NoticeCommandControllerTest.java new file mode 100644 index 000000000..af21373b4 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/notice/controller/NoticeCommandControllerTest.java @@ -0,0 +1,337 @@ +package com.votogether.domain.notice.controller; + +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willDoNothing; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.dto.request.NoticeRequest; +import com.votogether.domain.notice.service.NoticeCommandService; +import com.votogether.test.ControllerTest; +import io.restassured.http.ContentType; +import io.restassured.module.mockmvc.RestAssuredMockMvc; +import java.time.LocalDateTime; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(NoticeCommandController.class) +class NoticeCommandControllerTest extends ControllerTest { + + @Autowired + MockMvc mockMvc; + + @MockBean + NoticeCommandService noticeCommandService; + + @BeforeEach + void setUp() { + RestAssuredMockMvc.mockMvc(mockMvc); + } + + @Nested + @DisplayName("공지사항 생성 시") + class CreateNotice { + + @Test + @DisplayName("정상적인 요청이라면 200 응답을 반환한다.") + void createNotice() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + "content", + LocalDateTime.now() + ); + given(noticeCommandService.createNotice(any(NoticeRequest.class), any(Member.class))).willReturn(1L); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().post("/notices") + .then().log().all() + .status(HttpStatus.CREATED) + .header("Location", "/notices/1"); + } + + @ParameterizedTest + @NullAndEmptySource + @DisplayName("공지사항 제목이 존재하지 않거나 공백이라면 400 응답을 반환한다.") + void nullAndEmptyTitle(String title) throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + title, + null, + null, + "content", + LocalDateTime.now() + ); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().post("/notices") + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(200)) + .body("message", containsString("공지사항 제목을 입력하지 않았습니다.")); + } + + @ParameterizedTest + @NullAndEmptySource + @DisplayName("공지사항 내용이 존재하지 않거나 공백이라면 400 응답을 반환한다.") + void nullAndEmptyContent(String content) throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + content, + LocalDateTime.now() + ); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().post("/notices") + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(200)) + .body("message", containsString("공지사항 내용을 입력하지 않았습니다.")); + } + + @Test + @DisplayName("공지사항 배너 마감기한이 존재하지 않으면 400 응답을 반환한다.") + void nullDeadline() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + "content", + null + ); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().post("/notices") + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(200)) + .body("message", containsString("배너 노출 마감기한을 입력하지 않았습니다.")); + } + + } + + @Nested + @DisplayName("공지사항 수정 시") + class UpdateNotice { + + @Test + @DisplayName("정상적인 요청이라면 204 응답을 반환한다.") + void updateNotice() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + "content", + LocalDateTime.now() + ); + willDoNothing().given(noticeCommandService).updateNotice(anyLong(), any(NoticeRequest.class)); + + // when + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().put("/notices/{id}", 1L) + .then().log().all() + .status(HttpStatus.NO_CONTENT); + } + + @ParameterizedTest + @ValueSource(longs = {-1, 0}) + @DisplayName("공지사항 ID가 양수가 아니라면 400 응답을 반환한다.") + void notPositiveNoticeId(Long noticeId) throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + "content", + LocalDateTime.now() + ); + willDoNothing().given(noticeCommandService).updateNotice(anyLong(), any(NoticeRequest.class)); + + // when + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().put("/notices/{id}", noticeId) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(201)) + .body("message", containsString("공지사항 ID는 양수만 가능합니다.")); + } + + @ParameterizedTest + @NullAndEmptySource + @DisplayName("공지사항 제목이 존재하지 않거나 공백이라면 400 응답을 반환한다.") + void nullAndEmptyTitle(String title) throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + title, + null, + null, + "content", + LocalDateTime.now() + ); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().put("/notices/{id}", 1L) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(200)) + .body("message", containsString("공지사항 제목을 입력하지 않았습니다.")); + } + + @ParameterizedTest + @NullAndEmptySource + @DisplayName("공지사항 내용이 존재하지 않거나 공백이라면 400 응답을 반환한다.") + void nullAndEmptyContent(String content) throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + content, + LocalDateTime.now() + ); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().put("/notices/{id}", 1L) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(200)) + .body("message", containsString("공지사항 내용을 입력하지 않았습니다.")); + } + + @Test + @DisplayName("공지사항 배너 마감기한이 존재하지 않으면 400 응답을 반환한다.") + void nullDeadline() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + "content", + null + ); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .contentType(ContentType.JSON) + .body(noticeRequest) + .when().put("/notices/{id}", 1L) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(200)) + .body("message", containsString("배너 노출 마감기한을 입력하지 않았습니다.")); + } + + } + + @Nested + @DisplayName("공지사항 삭제 시") + class DeleteNotice { + + @Test + @DisplayName("정상적인 요청이라면 200 응답 반환한다.") + void deleteNotice() throws Exception { + // given + mockingAuthArgumentResolver(); + willDoNothing().given(noticeCommandService).deleteNotice(anyLong()); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .when().delete("/notices/{id}", 1L) + .then().log().all() + .status(HttpStatus.NO_CONTENT); + } + + @ParameterizedTest + @ValueSource(longs = {-1, 0}) + @DisplayName("공지사항 ID가 양수가 아니라면 400 응답을 반환한다.") + void notPositiveNoticeId(Long noticeId) throws Exception { + // given + mockingAuthArgumentResolver(); + willDoNothing().given(noticeCommandService).deleteNotice(anyLong()); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .when().delete("/notices/{id}", noticeId) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(201)) + .body("message", containsString("공지사항 ID는 양수만 가능합니다.")); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/notice/controller/NoticeQueryControllerTest.java b/backend/src/test/java/com/votogether/domain/notice/controller/NoticeQueryControllerTest.java new file mode 100644 index 000000000..729340a80 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/notice/controller/NoticeQueryControllerTest.java @@ -0,0 +1,196 @@ +package com.votogether.domain.notice.controller; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.BDDMockito.given; + +import com.votogether.domain.notice.dto.response.NoticePageResponse; +import com.votogether.domain.notice.dto.response.NoticeResponse; +import com.votogether.domain.notice.service.NoticeQueryService; +import com.votogether.test.ControllerTest; +import io.restassured.module.mockmvc.RestAssuredMockMvc; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(NoticeQueryController.class) +class NoticeQueryControllerTest extends ControllerTest { + + @Autowired + MockMvc mockMvc; + + @MockBean + NoticeQueryService noticeQueryService; + + @BeforeEach + void setUp() { + RestAssuredMockMvc.mockMvc(mockMvc); + } + + @Test + @DisplayName("배너 공지사항 조회에 성공하면 200 응답을 반환한다.") + void getProgressNotice() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeResponse expected = new NoticeResponse( + 1L, + "title", + "bannerTitle", + "bannerSubtitle", + "content", + LocalDateTime.now().plusDays(1).truncatedTo(ChronoUnit.MINUTES), + LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES) + ); + given(noticeQueryService.getProgressNotice()).willReturn(expected); + + // when + NoticeResponse result = RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .when().get("/notices/progress") + .then().log().all() + .status(HttpStatus.OK) + .extract() + .as(NoticeResponse.class); + + // then + assertThat(result).usingRecursiveComparison().isEqualTo(expected); + } + + @Nested + @DisplayName("공지사항 목록 조회 시") + class GetNotices { + + @Test + @DisplayName("정상적인 요청이라면 200 응답을 반환한다.") + void getNotices() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeResponse noticeResponse = new NoticeResponse( + 1L, + "title", + "bannerTitle", + "bannerSubtitle", + "content", + LocalDateTime.now().plusDays(1).truncatedTo(ChronoUnit.MINUTES), + LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES) + ); + NoticePageResponse expected = new NoticePageResponse(1, 0, List.of(noticeResponse)); + given(noticeQueryService.getNotices(anyInt())).willReturn(expected); + + // when + NoticePageResponse result = RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .param("page", 0) + .when().get("/notices") + .then().log().all() + .status(HttpStatus.OK) + .extract() + .as(NoticePageResponse.class); + + // then + assertThat(result).usingRecursiveComparison().isEqualTo(expected); + } + + @Test + @DisplayName("페이지가 음수라면 400 응답을 반환한다.") + void negativePage() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeResponse noticeResponse = new NoticeResponse( + 1L, + "title", + "bannerTitle", + "bannerSubtitle", + "content", + LocalDateTime.now().plusDays(1), + LocalDateTime.now() + ); + NoticePageResponse expected = new NoticePageResponse(1, 0, List.of(noticeResponse)); + given(noticeQueryService.getNotices(anyInt())).willReturn(expected); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .param("page", -1) + .when().get("/notices") + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(201)) + .body("message", containsString("페이지는 0이상 정수만 가능합니다.")); + } + + } + + @Nested + @DisplayName("공지사항 상세 조회 시") + class GetNotice { + + @Test + @DisplayName("정상적인 요청이라면 200 응답을 반환한다.") + void getNotice() throws Exception { + // given + mockingAuthArgumentResolver(); + NoticeResponse expected = new NoticeResponse( + 1L, + "title", + "bannerTitle", + "bannerSubtitle", + "content", + LocalDateTime.now().plusDays(1).truncatedTo(ChronoUnit.MINUTES), + LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES) + ); + given(noticeQueryService.getNotice(anyLong())).willReturn(expected); + + // when + NoticeResponse result = RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .when().get("/notices/{id}", 1L) + .then().log().all() + .status(HttpStatus.OK) + .extract() + .as(NoticeResponse.class); + + // then + assertThat(result).usingRecursiveComparison().isEqualTo(expected); + } + + @ParameterizedTest + @ValueSource(longs = {-1, 0}) + @DisplayName("공지사항 ID가 양수가 아니라면 400 응답을 반환한다.") + void notPositiveNoticeId(Long noticeId) throws Exception { + // given + mockingAuthArgumentResolver(); + + // when, then + RestAssuredMockMvc + .given().log().all() + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .when().get("/notices/{id}", noticeId) + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(201)) + .body("message", containsString("공지사항 ID는 양수만 가능합니다.")); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/notice/repository/NoticeRepositoryTest.java b/backend/src/test/java/com/votogether/domain/notice/repository/NoticeRepositoryTest.java new file mode 100644 index 000000000..218b5f253 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/notice/repository/NoticeRepositoryTest.java @@ -0,0 +1,172 @@ +package com.votogether.domain.notice.repository; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.entity.Notice; +import com.votogether.test.RepositoryTest; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; + +class NoticeRepositoryTest extends RepositoryTest { + + @Autowired + NoticeRepository noticeRepository; + + @Nested + @DisplayName("가장 최근의 마감기한이 지나지 않은 공지사항 조회 시") + class FindFirstByDeadlineAfterOrderByCreatedAtDesc { + + @Test + @DisplayName("가장 최근의 공지사항을 조회한다.") + void findFirst() { + // given + Member member = memberTestPersister.builder().save(); + Notice noticeA = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().plusDays(1)) + .build(); + Notice noticeB = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().plusDays(1)) + .build(); + Notice savedNoticeA = noticeRepository.save(noticeA); + Notice savedNoticeB = noticeRepository.save(noticeB); + + // when + Optional notice = noticeRepository.findFirstByDeadlineAfterOrderByIdDesc(LocalDateTime.now()); + + // then + assertSoftly(softly -> { + softly.assertThat(notice).isPresent(); + softly.assertThat(notice.get()).isEqualTo(savedNoticeB); + }); + } + + @Test + @DisplayName("마감기한이 지나지 않은 공지사항을 조회한다.") + void findDeadlineAfterNow() { + // given + Member member = memberTestPersister.builder().save(); + Notice noticeA = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().plusDays(1)) + .build(); + Notice noticeB = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().minusDays(1)) + .build(); + Notice savedNoticeA = noticeRepository.save(noticeA); + Notice savedNoticeB = noticeRepository.save(noticeB); + + // when + Optional notice = noticeRepository.findFirstByDeadlineAfterOrderByIdDesc(LocalDateTime.now()); + + // then + assertSoftly(softly -> { + softly.assertThat(notice).isPresent(); + softly.assertThat(notice.get()).isEqualTo(savedNoticeA); + }); + } + + @Test + @DisplayName("마감기한이 지나지 않은 공지사항이 없으면 빈 값을 조회한다.") + void emptyNotice() { + // given + Member member = memberTestPersister.builder().save(); + Notice notice = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().minusDays(1)) + .build(); + noticeRepository.save(notice); + + // when + Optional foundNotice = noticeRepository.findFirstByDeadlineAfterOrderByIdDesc(LocalDateTime.now()); + + // then + assertThat(foundNotice).isNotPresent(); + } + + } + + @Nested + @DisplayName("공지사항 목록 최근순으로 페이징 조회 시") + class FindAllByOrderByCreatedAtDesc { + + @Test + @DisplayName("생성시각 내림차순으로 공지사항 목록을 조회한다.") + void findAllByOrderByCreatedAtDesc() { + // given + Member member = memberTestPersister.builder().save(); + Notice noticeA = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice noticeB = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice savedNoticeA = noticeRepository.save(noticeA); + Notice savedNoticeB = noticeRepository.save(noticeB); + + // when + Pageable pageable = PageRequest.of(0, 2); + List notices = noticeRepository.findAllByOrderByIdDesc(pageable); + + // then + assertThat(notices).containsExactly(savedNoticeB, savedNoticeA); + } + + @Test + @DisplayName("페이지 크기만큼 공지사항 목록을 조회한다.") + void findByPage() { + // given + Member member = memberTestPersister.builder().save(); + Notice noticeA = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice noticeB = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice savedNoticeA = noticeRepository.save(noticeA); + Notice savedNoticeB = noticeRepository.save(noticeB); + + // when + Pageable pageable = PageRequest.of(0, 1); + List notices = noticeRepository.findAllByOrderByIdDesc(pageable); + + // then + assertThat(notices).containsExactly(savedNoticeB); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/notice/service/NoticeCommandServiceTest.java b/backend/src/test/java/com/votogether/domain/notice/service/NoticeCommandServiceTest.java new file mode 100644 index 000000000..05f19f136 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/notice/service/NoticeCommandServiceTest.java @@ -0,0 +1,290 @@ +package com.votogether.domain.notice.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.dto.request.NoticeRequest; +import com.votogether.domain.notice.entity.Notice; +import com.votogether.domain.notice.repository.NoticeRepository; +import com.votogether.global.exception.BadRequestException; +import com.votogether.global.exception.NotFoundException; +import com.votogether.test.ServiceTest; +import java.time.LocalDateTime; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; + +class NoticeCommandServiceTest extends ServiceTest { + + @Autowired + NoticeCommandService noticeCommandService; + + @Autowired + NoticeRepository noticeRepository; + + @Nested + @DisplayName("공지사항 생성 시") + class CreateNotice { + + @Test + @DisplayName("정상적인 요청이라면 공지사항을 생성한다.") + void createNotice() { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + "content", + LocalDateTime.now() + ); + + // when + Long noticeId = noticeCommandService.createNotice(noticeRequest, member); + + // then + assertThat(noticeRepository.findById(noticeId)).isPresent(); + } + + @ParameterizedTest + @NullAndEmptySource + @DisplayName("공지사항 제목이 존재하지 않거나 공백이라면 예외를 던진다.") + void nullAndEmptyTitle(String title) { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + title, + null, + null, + "content", + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 제목이 존재하지 않거나 공백입니다."); + } + + @Test + @DisplayName("공지사항 제목의 길이가 유효하지 않으면 예외를 던진다.") + void invalidLengthTitle() { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "a".repeat(101), + null, + null, + "content", + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 제목의 길이가 유효하지 않습니다."); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + @DisplayName("공지사항 배너 제목이 공백이라면 예외를 던진다.") + void emptyBannerTitle(String bannerTitle) { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + bannerTitle, + null, + "content", + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 배너 제목이 공백으로 이루어져 있습니다."); + } + + @ParameterizedTest + @ValueSource(strings = {"", " "}) + @DisplayName("공지사항 배너 부제목이 공백이라면 예외를 던진다.") + void emptyBannerSubtitle(String bannerSubtitle) { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + bannerSubtitle, + "content", + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 배너 제목이 공백으로 이루어져 있습니다."); + } + + @ParameterizedTest + @NullAndEmptySource + @DisplayName("공지사항 내용이 존재하지 않거나 공백이라면 예외를 던진다.") + void nullAndEmptyContent(String content) { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + content, + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 내용이 존재하지 않거나 공백입니다."); + } + + @Test + @DisplayName("공지사항 내용의 길이가 유효하지 않으면 예외를 던진다.") + void invalidLengthContent() { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + null, + "a".repeat(3001), + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 내용의 길이가 유효하지 않습니다."); + } + + @Test + @DisplayName("공지사항 배너 제목의 길이가 유효하지 않으면 예외를 던진다.") + void invalidLengthBannerTitle() { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + "a".repeat(101), + null, + "content", + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 배너 제목의 길이가 유효하지 않습니다."); + } + + @Test + @DisplayName("공지자항 배너 부제목의 길이가 유효하지 않으면 예외를 던진다.") + void invalidLengthBannerSubtitle() { + // given + Member member = memberTestPersister.builder().save(); + NoticeRequest noticeRequest = new NoticeRequest( + "title", + null, + "a".repeat(101), + "content", + LocalDateTime.now() + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.createNotice(noticeRequest, member)) + .isInstanceOf(BadRequestException.class) + .hasMessage("공지사항 배너 제목의 길이가 유효하지 않습니다."); + } + + } + + @Nested + @DisplayName("공지사항 수정 시") + class UpdateNotice { + + @Test + @DisplayName("정상적인 요청이라면 공지사항을 수정한다.") + void updateNotice() { + // given + Member member = memberTestPersister.builder().save(); + Notice notice = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice savedNotice = noticeRepository.save(notice); + NoticeRequest noticeRequest = new NoticeRequest( + "updateTitle", + "updateBannerTitle", + "updateBannerSubtitle", + "updateContent", + LocalDateTime.now().plusDays(1) + ); + + // when + noticeCommandService.updateNotice(savedNotice.getId(), noticeRequest); + + // then + assertSoftly(softly -> { + softly.assertThat(savedNotice.getTitle()).isEqualTo(noticeRequest.title()); + softly.assertThat(savedNotice.getBannerTitle()).isEqualTo(noticeRequest.bannerTitle()); + softly.assertThat(savedNotice.getBannerSubtitle()).isEqualTo(noticeRequest.bannerSubtitle()); + softly.assertThat(savedNotice.getContent()).isEqualTo(noticeRequest.content()); + softly.assertThat(savedNotice.getDeadline()).isEqualTo(noticeRequest.deadline()); + }); + } + + @Test + @DisplayName("공지사항이 존재하지 않으면 예외를 던진다.") + void notFoundNotice() { + // given + NoticeRequest noticeRequest = new NoticeRequest( + "updateTitle", + "updateBannerTitle", + "updateBannerSubtitle", + "updateContent", + LocalDateTime.now().plusDays(1) + ); + + // when, then + assertThatThrownBy(() -> noticeCommandService.updateNotice(-1L, noticeRequest)) + .isInstanceOf(NotFoundException.class) + .hasMessage("공지사항이 존재하지 않습니다."); + } + + } + + @Test + @DisplayName("공지사항을 삭제한다.") + void deleteNotice() { + // given + Member member = memberTestPersister.builder().save(); + Notice notice = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice savedNotice = noticeRepository.save(notice); + + // when + noticeCommandService.deleteNotice(savedNotice.getId()); + + // then + assertThat(noticeRepository.findById(savedNotice.getId())).isNotPresent(); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/notice/service/NoticeQueryServiceTest.java b/backend/src/test/java/com/votogether/domain/notice/service/NoticeQueryServiceTest.java new file mode 100644 index 000000000..25ec14d0e --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/notice/service/NoticeQueryServiceTest.java @@ -0,0 +1,158 @@ +package com.votogether.domain.notice.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.notice.dto.response.NoticePageResponse; +import com.votogether.domain.notice.dto.response.NoticeResponse; +import com.votogether.domain.notice.entity.Notice; +import com.votogether.domain.notice.repository.NoticeRepository; +import com.votogether.global.exception.NotFoundException; +import com.votogether.test.ServiceTest; +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class NoticeQueryServiceTest extends ServiceTest { + + @Autowired + NoticeQueryService noticeQueryService; + + @Autowired + NoticeRepository noticeRepository; + + @Nested + @DisplayName("배너 공지사항 조회 시") + class GetProgressNotice { + + @Test + @DisplayName("유효한 배너 공지사항이 존재하면 공지사항 응답을 반환한다.") + void getProgressNotice() { + // given + Member member = memberTestPersister.builder().save(); + Notice notice = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().plusDays(1)) + .build(); + Notice savedNotice = noticeRepository.save(notice); + + // when + NoticeResponse noticeResponse = noticeQueryService.getProgressNotice(); + + // then + NoticeResponse expected = NoticeResponse.from(savedNotice); + assertThat(noticeResponse).usingRecursiveComparison().isEqualTo(expected); + } + + @Test + @DisplayName("유효한 배너 공지사항이 존재하지 않으면 null 필드로 채워진 응답을 반환한다.") + void nullNotice() { + // given + Member member = memberTestPersister.builder().save(); + Notice notice = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().minusDays(1)) + .build(); + noticeRepository.save(notice); + + // when + NoticeResponse noticeResponse = noticeQueryService.getProgressNotice(); + + // then + NoticeResponse expected = NoticeResponse.empty(); + assertThat(noticeResponse).usingRecursiveComparison().isEqualTo(expected); + } + + } + + @Nested + @DisplayName("공지사항 목록 최근순으로 페이징 조회 시") + class GetNotices { + + @Test + @DisplayName("전체 페이지 개수도 함께 응답한다.") + void getTotalPageNumber() { + // given + Member member = memberTestPersister.builder().save(); + Notice noticeA = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice noticeB = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .build(); + Notice savedNoticeA = noticeRepository.save(noticeA); + Notice savedNoticeB = noticeRepository.save(noticeB); + + // when + NoticePageResponse response = noticeQueryService.getNotices(0); + + // then + NoticePageResponse expected = NoticePageResponse.of(1, 0, List.of(savedNoticeB, savedNoticeA)); + assertThat(response).usingRecursiveComparison().isEqualTo(expected); + } + + @Test + @DisplayName("공지사항이 존재하지 않으면 빈 목록을 응답한다.") + void emptyNotices() { + // given, when + NoticePageResponse response = noticeQueryService.getNotices(0); + + // then + NoticePageResponse expected = NoticePageResponse.of(0, 0, Collections.emptyList()); + assertThat(response).usingRecursiveComparison().isEqualTo(expected); + } + + } + + @Nested + @DisplayName("공지사항 상세 조회 시") + class GetNotice { + + @Test + @DisplayName("정상적인 요청이라면 공지사항 상세 정보를 응답한다.") + void getNotice() { + // given + Member member = memberTestPersister.builder().save(); + Notice notice = Notice.builder() + .member(member) + .title("title") + .content("content") + .deadline(LocalDateTime.now().minusDays(1)) + .build(); + Notice savedNotice = noticeRepository.save(notice); + + // when + NoticeResponse result = noticeQueryService.getNotice(savedNotice.getId()); + + // then + NoticeResponse expected = NoticeResponse.from(savedNotice); + assertThat(result).usingRecursiveComparison().isEqualTo(expected); + } + + @Test + @DisplayName("존재하지 않은 공지사항이라면 예외를 던진다.") + void notFoundNotice() { + // given, when, then + assertThatThrownBy(() -> noticeQueryService.getNotice(-1L)) + .isInstanceOf(NotFoundException.class) + .hasMessage("공지사항이 존재하지 않습니다."); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/post/repository/CommentRepositoryTest.java b/backend/src/test/java/com/votogether/domain/post/repository/CommentRepositoryTest.java index 6b27a918a..94dded047 100644 --- a/backend/src/test/java/com/votogether/domain/post/repository/CommentRepositoryTest.java +++ b/backend/src/test/java/com/votogether/domain/post/repository/CommentRepositoryTest.java @@ -26,7 +26,7 @@ void findAllByPost() { Comment commentB = commentTestPersister.builder().post(post).writer(writer).save(); // when - List comments = commentRepository.findAllByPostAndIsHiddenFalseOrderByCreatedAtAsc(post); + List comments = commentRepository.findAllByPostAndIsHiddenFalseOrderByIdAsc(post); // then assertThat(comments).containsExactly(commentA, commentB); diff --git a/backend/src/test/java/com/votogether/domain/post/repository/PostCustomRepositoryImplTest.java b/backend/src/test/java/com/votogether/domain/post/repository/PostCustomRepositoryImplTest.java index 3b4ed82b7..402743bd7 100644 --- a/backend/src/test/java/com/votogether/domain/post/repository/PostCustomRepositoryImplTest.java +++ b/backend/src/test/java/com/votogether/domain/post/repository/PostCustomRepositoryImplTest.java @@ -8,10 +8,12 @@ import com.votogether.domain.post.entity.PostOption; import com.votogether.domain.post.entity.vo.PostClosingType; import com.votogether.domain.post.entity.vo.PostSortType; +import com.votogether.domain.post.repository.dto.PostCommentCountDto; import com.votogether.test.RepositoryTest; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.List; +import java.util.Set; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -24,6 +26,25 @@ class PostCustomRepositoryImplTest extends RepositoryTest { @Autowired PostCustomRepositoryImpl postCustomRepository; + @Test + @DisplayName("게시글 ID 목록에 속한 게시글의 댓글 수 조회") + void getReviewCountsInPosts() { + // given + Post post = postTestPersister.postBuilder().save(); + commentTestPersister.builder().post(post).save(); + commentTestPersister.builder().post(post).save(); + + // when + List result = postCustomRepository.getCommentCountsInPosts(Set.of(post.getId())); + + // then + assertSoftly(softly -> { + softly.assertThat(result).hasSize(1); + softly.assertThat(result.get(0).postId()).isEqualTo(post.getId()); + softly.assertThat(result.get(0).commentCount()).isEqualTo(2); + }); + } + @Nested @DisplayName("마감시간, 정렬기준, 카테고리로 필터링하여 게시글 페이징 조회") class FindPostsWithFilteringAndPaging { diff --git a/backend/src/test/java/com/votogether/domain/post/repository/PostRepositoryTest.java b/backend/src/test/java/com/votogether/domain/post/repository/PostRepositoryTest.java index 84c506cbe..e6e21fdd3 100644 --- a/backend/src/test/java/com/votogether/domain/post/repository/PostRepositoryTest.java +++ b/backend/src/test/java/com/votogether/domain/post/repository/PostRepositoryTest.java @@ -1,7 +1,6 @@ package com.votogether.domain.post.repository; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; import com.votogether.domain.member.entity.Member; import com.votogether.domain.post.entity.Post; @@ -51,43 +50,4 @@ void findEmptyNotExist() { } - @Test - @DisplayName("회원이 작성한 게시글 수를 조회한다.") - void countPostsByWriter() { - // given - Member writer = memberTestPersister.builder().save(); - postTestPersister.postBuilder().writer(writer).save(); - postTestPersister.postBuilder().writer(writer).save(); - - // when - int result = postRepository.countByWriter(writer); - - // then - assertThat(result).isEqualTo(2); - } - - @Test - @DisplayName("모든 유저의 작성한 게시글 수를 가져온다.") - void findCountsByMembers() { - // given - Member member = memberTestPersister.builder().save(); - Member member1 = memberTestPersister.builder().save(); - Member member2 = memberTestPersister.builder().save(); - - postTestPersister.postBuilder().writer(member).save(); - postTestPersister.postBuilder().writer(member1).save(); - postTestPersister.postBuilder().writer(member1).save(); - - // when - List postCounts = postRepository.findCountsByMembers(List.of(member, member1, member2)); - - // then - assertAll( - () -> assertThat(postCounts).hasSize(3), - () -> assertThat(postCounts.get(0)).isEqualTo(1), - () -> assertThat(postCounts.get(1)).isEqualTo(2), - () -> assertThat(postCounts.get(2)).isEqualTo(0) - ); - } - } diff --git a/backend/src/test/java/com/votogether/domain/post/service/PostCommandServiceTest.java b/backend/src/test/java/com/votogether/domain/post/service/PostCommandServiceTest.java index ffe273f53..794c53fa2 100644 --- a/backend/src/test/java/com/votogether/domain/post/service/PostCommandServiceTest.java +++ b/backend/src/test/java/com/votogether/domain/post/service/PostCommandServiceTest.java @@ -6,6 +6,8 @@ import com.votogether.domain.category.entity.Category; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.entity.MemberMetric; +import com.votogether.domain.member.repository.MemberMetricRepository; import com.votogether.domain.post.dto.request.post.PostCreateRequest; import com.votogether.domain.post.dto.request.post.PostOptionCreateRequest; import com.votogether.domain.post.dto.request.post.PostOptionUpdateRequest; @@ -60,6 +62,9 @@ class PostCommandServiceTest extends ServiceTest { @Autowired PostOptionRepository postOptionRepository; + @Autowired + MemberMetricRepository memberMetricRepository; + @AfterEach void tearDown( @Value("${image.upload_directory}") String uploadDirectory @@ -92,6 +97,7 @@ void createPost() { Category categoryB = categoryTestPersister.builder().save(); PostCreateRequest postCreateRequest = mockingPostCreateRequest(List.of(categoryA.getId(), categoryB.getId())); Member member = memberTestPersister.builder().save(); + MemberMetric memberMetric = memberMetricTestPersister.builder().member(member).save(); // when Long postId = postCommandService.createPost(postCreateRequest, member); @@ -102,6 +108,8 @@ void createPost() { softly.assertThat(post.getPostCategories()).hasSize(2); softly.assertThat(post.getPostContentImages()).hasSize(1); softly.assertThat(post.getPostOptions()).hasSize(2); + softly.assertThat(post.getVoteCount()).isZero(); + softly.assertThat(memberMetric.getPostCount()).isEqualTo(1); }); } @@ -122,6 +130,7 @@ void updateSameSizeOptions() { ) ); Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); Long postId = postCommandService.createPost(postCreateRequest, member); PostUpdateRequest postUpdateRequest = new PostUpdateRequest( List.of(categoryA.getId()), @@ -172,6 +181,7 @@ void addPostOptions() { ) ); Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); Long postId = postCommandService.createPost(postCreateRequest, member); PostUpdateRequest postUpdateRequest = new PostUpdateRequest( List.of(categoryA.getId(), categoryB.getId(), categoryC.getId()), @@ -215,6 +225,7 @@ void removePostOptions() { ) ); Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); Long postId = postCommandService.createPost(postCreateRequest, member); PostUpdateRequest postUpdateRequest = new PostUpdateRequest( List.of(categoryA.getId()), @@ -373,6 +384,7 @@ void success() { PostCreateRequest postCreateRequest = mockingPostCreateRequest( List.of(categoryA.getId(), categoryB.getId())); Member member = memberTestPersister.builder().save(); + MemberMetric memberMetric = memberMetricTestPersister.builder().member(member).save(); Long postId = postCommandService.createPost(postCreateRequest, member); em.flush(); @@ -387,6 +399,7 @@ void success() { softly.assertThat(postCategoryRepository.findAll()).isEmpty(); softly.assertThat(postContentImageRepository.findAll()).isEmpty(); softly.assertThat(postOptionRepository.findAll()).isEmpty(); + softly.assertThat(memberMetricRepository.findById(memberMetric.getId()).get().getPostCount()).isZero(); }); } diff --git a/backend/src/test/java/com/votogether/domain/post/service/PostGuestServiceTest.java b/backend/src/test/java/com/votogether/domain/post/service/PostGuestServiceTest.java index 3206cab29..77f7e6506 100644 --- a/backend/src/test/java/com/votogether/domain/post/service/PostGuestServiceTest.java +++ b/backend/src/test/java/com/votogether/domain/post/service/PostGuestServiceTest.java @@ -14,6 +14,8 @@ import com.votogether.domain.post.entity.PostOption; import com.votogether.domain.post.entity.vo.PostClosingType; import com.votogether.domain.post.entity.vo.PostSortType; +import com.votogether.domain.post.repository.PostOptionRepository; +import com.votogether.domain.post.repository.PostRepository; import com.votogether.domain.vote.entity.Vote; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; @@ -34,6 +36,12 @@ class PostGuestServiceTest extends ServiceTest { @Autowired PostGuestService postGuestService; + @Autowired + PostRepository postRepository; + + @Autowired + PostOptionRepository postOptionRepository; + @Autowired EntityManager em; @@ -47,12 +55,11 @@ void canCheckResultsClosedPosts() { // given LocalDateTime deadline = LocalDateTime.now().minusDays(1); Member writer = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = postGuestService.getPosts(0, PostClosingType.ALL, PostSortType.LATEST, null); @@ -94,12 +101,11 @@ void canCheckResultsClosedPost() { // given LocalDateTime deadline = LocalDateTime.now().minusDays(1); Member writer = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when PostResponse result = postGuestService.getPost(post.getId()); @@ -166,12 +172,11 @@ void canCheckResultsClosedPosts() { // given LocalDateTime deadline = LocalDateTime.now().minusDays(1); Member writer = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = @@ -217,8 +222,8 @@ void getRanking() { List postOptions = new ArrayList<>(); for (int i = 0; i < 11; i++) { - Post post = postTestPersister.postBuilder().save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).save(); + Post post = postTestPersister.postBuilder().voteCount(i + 1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).voteCount(i + 1).save(); posts.add(post); postOptions.add(postOption); } @@ -233,6 +238,10 @@ void getRanking() { voteTestPersister.builder().postOption(postOptions.get(10)).save(); voteTestPersister.builder().postOption(postOptions.get(10)).save(); voteTestPersister.builder().postOption(postOptions.get(7)).save(); + ReflectionTestUtils.setField(posts.get(10), "voteCount", 3); + ReflectionTestUtils.setField(postOptions.get(10), "voteCount", 3); + posts.get(7).increaseVoteCount(); + postOptions.get(7).increaseVoteCount(); /* index |0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| @@ -240,9 +249,6 @@ void getRanking() { ranking |11| |10| |8| |7| |6| |5| |4| |2| |2| |1| |8| */ - em.clear(); - em.flush(); - // when List rankings = postGuestService.getRanking(); @@ -284,8 +290,8 @@ void getRanking1() { List postOptions = new ArrayList<>(); for (int i = 0; i < 10; i++) { - Post post = postTestPersister.postBuilder().save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).save(); + Post post = postTestPersister.postBuilder().voteCount(i + 1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).voteCount(i + 1).save(); posts.add(post); postOptions.add(postOption); } @@ -302,8 +308,8 @@ void getRanking1() { ranking |10| |9| |8| |7| |6| |5| |4| |3| |2| |1| */ - em.clear(); em.flush(); + em.clear(); // when List rankings = postGuestService.getRanking(); diff --git a/backend/src/test/java/com/votogether/domain/post/service/PostQueryServiceTest.java b/backend/src/test/java/com/votogether/domain/post/service/PostQueryServiceTest.java index a246e587e..24f597f32 100644 --- a/backend/src/test/java/com/votogether/domain/post/service/PostQueryServiceTest.java +++ b/backend/src/test/java/com/votogether/domain/post/service/PostQueryServiceTest.java @@ -27,7 +27,6 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.util.ReflectionTestUtils; class PostQueryServiceTest extends ServiceTest { @@ -65,12 +64,11 @@ void findPostsClosed() { LocalDateTime deadline = LocalDateTime.now().minusDays(1); Member writer = memberTestPersister.builder().save(); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = @@ -87,12 +85,11 @@ void findPostsWritten() { // given LocalDateTime deadline = LocalDateTime.now().plusDays(1); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(member).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(member).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = @@ -110,12 +107,11 @@ void findPostsVoted() { LocalDateTime deadline = LocalDateTime.now().plusDays(1); Member writer = memberTestPersister.builder().save(); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).member(member).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = @@ -145,7 +141,7 @@ void throwExceptionNotExistPost() { } @Test - @DisplayName("블라인드된 게시글이면 예외를 던진다.") + @DisplayName("작성자가 아니고 블라인드된 게시글이면 예외를 던진다.") void throwExceptionBlindPost() { // given Member member = memberTestPersister.builder().save(); @@ -158,6 +154,39 @@ void throwExceptionBlindPost() { .hasMessage("신고에 의해 숨겨진 게시글은 접근할 수 없습니다."); } + @Test + @DisplayName("작성자는 블라인드된 게시글은 조회 할 수 있다.") + void throwExceptionBlindPost1() { + // given + Member member = memberTestPersister.builder().save(); + Post post = postTestPersister.postBuilder().writer(member).save(); + post.blind(); + + // when + PostResponse result = postQueryService.getPost(post.getId(), member); + + // then + assertThat(result.postId()).isEqualTo(result.postId()); + } + + @Test + @DisplayName("작성자는 블라인드된 게시글의 결과를 확인 할 수 없다.") + void throwExceptionBlindPost2() { + // given + Member member = memberTestPersister.builder().save(); + Post post = postTestPersister.postBuilder().writer(member).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + post.addPostOption(postOption); + post.blind(); + + // when + PostResponse result = postQueryService.getPost(post.getId(), member); + + // then + PostResponse expected = expectedResponse(post, member, postOption, 0L, -1, -1, 0.0); + assertThat(result).usingRecursiveComparison().isEqualTo(expected); + } + @Test @DisplayName("내가 쓴 게시글도 아니고 투표한 게시글도 아닐 때 진행중인 게시글은 결과를 확인할 수 없다.") void findPostsOpen() { @@ -184,12 +213,11 @@ void findPostsClosed() { LocalDateTime deadline = LocalDateTime.now().minusDays(1); Member writer = memberTestPersister.builder().save(); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when PostResponse result = postQueryService.getPost(post.getId(), member); @@ -205,12 +233,11 @@ void findPostsWritten() { // given LocalDateTime deadline = LocalDateTime.now().plusDays(1); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(member).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(member).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when PostResponse result = postQueryService.getPost(post.getId(), member); @@ -227,12 +254,11 @@ void findPostsVoted() { LocalDateTime deadline = LocalDateTime.now().plusDays(1); Member writer = memberTestPersister.builder().save(); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).member(member).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when PostResponse result = postQueryService.getPost(post.getId(), member); @@ -275,12 +301,11 @@ void searchPostsClosed() { LocalDateTime deadline = LocalDateTime.now().minusDays(1); Member writer = memberTestPersister.builder().save(); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = @@ -297,12 +322,11 @@ void searchPostsWritten() { // given LocalDateTime deadline = LocalDateTime.now().plusDays(1); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(member).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(member).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = @@ -320,12 +344,11 @@ void searchPostsVoted() { LocalDateTime deadline = LocalDateTime.now().plusDays(1); Member writer = memberTestPersister.builder().save(); Member member = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).save(); - PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + Post post = postTestPersister.postBuilder().deadline(deadline).writer(writer).voteCount(1).save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).voteCount(1).save(); Vote vote = voteTestPersister.builder().postOption(postOption).member(member).save(); postOption.addVote(vote); post.addPostOption(postOption); - ReflectionTestUtils.setField(postOption, "voteCount", 1); // when List result = @@ -345,18 +368,16 @@ void findPostWritten() { LocalDateTime open = LocalDateTime.now().plusDays(1); LocalDateTime closed = LocalDateTime.now().minusDays(1); Member member = memberTestPersister.builder().save(); - Post postA = postTestPersister.postBuilder().deadline(open).writer(member).save(); - Post postB = postTestPersister.postBuilder().deadline(closed).writer(member).save(); - PostOption postOptionA = postTestPersister.postOptionBuilder().post(postA).sequence(1).save(); - PostOption postOptionB = postTestPersister.postOptionBuilder().post(postB).sequence(1).save(); + Post postA = postTestPersister.postBuilder().deadline(open).writer(member).voteCount(1).save(); + Post postB = postTestPersister.postBuilder().deadline(closed).writer(member).voteCount(1).save(); + PostOption postOptionA = postTestPersister.postOptionBuilder().post(postA).sequence(1).voteCount(1).save(); + PostOption postOptionB = postTestPersister.postOptionBuilder().post(postB).sequence(1).voteCount(1).save(); Vote voteA = voteTestPersister.builder().postOption(postOptionA).save(); Vote voteB = voteTestPersister.builder().postOption(postOptionB).save(); postOptionA.addVote(voteA); postOptionB.addVote(voteB); postA.addPostOption(postOptionA); postB.addPostOption(postOptionB); - ReflectionTestUtils.setField(postOptionA, "voteCount", 1); - ReflectionTestUtils.setField(postOptionB, "voteCount", 1); // when List result = @@ -376,18 +397,16 @@ void findPostsVoted() { LocalDateTime closed = LocalDateTime.now().minusDays(1); Member member = memberTestPersister.builder().save(); Member writer = memberTestPersister.builder().save(); - Post postA = postTestPersister.postBuilder().deadline(open).writer(writer).save(); - Post postB = postTestPersister.postBuilder().deadline(closed).writer(writer).save(); - PostOption postOptionA = postTestPersister.postOptionBuilder().post(postA).sequence(1).save(); - PostOption postOptionB = postTestPersister.postOptionBuilder().post(postB).sequence(1).save(); + Post postA = postTestPersister.postBuilder().deadline(open).writer(writer).voteCount(1).save(); + Post postB = postTestPersister.postBuilder().deadline(closed).writer(writer).voteCount(1).save(); + PostOption postOptionA = postTestPersister.postOptionBuilder().post(postA).sequence(1).voteCount(1).save(); + PostOption postOptionB = postTestPersister.postOptionBuilder().post(postB).sequence(1).voteCount(1).save(); Vote voteA = voteTestPersister.builder().postOption(postOptionA).member(member).save(); Vote voteB = voteTestPersister.builder().postOption(postOptionB).member(member).save(); postOptionA.addVote(voteA); postOptionB.addVote(voteB); postA.addPostOption(postOptionA); postB.addPostOption(postOptionB); - ReflectionTestUtils.setField(postOptionA, "voteCount", 1); - ReflectionTestUtils.setField(postOptionB, "voteCount", 1); // when List result = diff --git a/backend/src/test/java/com/votogether/domain/ranking/service/RankingServiceTest.java b/backend/src/test/java/com/votogether/domain/ranking/service/RankingServiceTest.java index 99faa0bcb..a833a7636 100644 --- a/backend/src/test/java/com/votogether/domain/ranking/service/RankingServiceTest.java +++ b/backend/src/test/java/com/votogether/domain/ranking/service/RankingServiceTest.java @@ -26,16 +26,11 @@ void getMemberPassionRanking() { Member memberD = memberTestPersister.builder().save(); Member memberE = memberTestPersister.builder().save(); - postTestPersister.postBuilder().writer(memberA).save(); - postTestPersister.postBuilder().writer(memberB).save(); - postTestPersister.postBuilder().writer(memberC).save(); - postTestPersister.postBuilder().writer(memberD).save(); - - voteTestPersister.builder().member(memberA).save(); - voteTestPersister.builder().member(memberC).save(); - voteTestPersister.builder().member(memberD).save(); - voteTestPersister.builder().member(memberD).save(); - voteTestPersister.builder().member(memberE).save(); + memberMetricTestPersister.builder().member(memberA).postCount(1).voteCount(1).score(6).save(); + memberMetricTestPersister.builder().member(memberB).postCount(1).score(5).save(); + memberMetricTestPersister.builder().member(memberC).postCount(1).voteCount(2).score(7).save(); + memberMetricTestPersister.builder().member(memberD).postCount(1).voteCount(1).score(6).save(); + memberMetricTestPersister.builder().member(memberE).voteCount(1).score(1).save(); // when RankingResponse response = rankingService.getPassionRanking(memberA); @@ -55,17 +50,25 @@ void getPassionRankingTop10() { // given Member memberA = memberTestPersister.builder().save(); Member memberB = memberTestPersister.builder().save(); - memberTestPersister.builder().save(); - memberTestPersister.builder().save(); - memberTestPersister.builder().save(); - memberTestPersister.builder().save(); - memberTestPersister.builder().save(); - memberTestPersister.builder().save(); - memberTestPersister.builder().save(); - memberTestPersister.builder().save(); + Member memberC = memberTestPersister.builder().save(); + Member memberD = memberTestPersister.builder().save(); + Member memberE = memberTestPersister.builder().save(); + Member memberF = memberTestPersister.builder().save(); + Member memberG = memberTestPersister.builder().save(); + Member memberH = memberTestPersister.builder().save(); + Member memberI = memberTestPersister.builder().save(); + Member memberJ = memberTestPersister.builder().save(); - postTestPersister.postBuilder().writer(memberA).save(); - postTestPersister.postBuilder().writer(memberB).save(); + memberMetricTestPersister.builder().member(memberA).postCount(1).score(5).save(); + memberMetricTestPersister.builder().member(memberB).postCount(1).score(5).save(); + memberMetricTestPersister.builder().member(memberC).save(); + memberMetricTestPersister.builder().member(memberD).save(); + memberMetricTestPersister.builder().member(memberE).save(); + memberMetricTestPersister.builder().member(memberF).save(); + memberMetricTestPersister.builder().member(memberG).save(); + memberMetricTestPersister.builder().member(memberH).save(); + memberMetricTestPersister.builder().member(memberI).save(); + memberMetricTestPersister.builder().member(memberJ).save(); // when List rankings = rankingService.getPassionRanking(); diff --git a/backend/src/test/java/com/votogether/domain/report/controller/ReportCommandControllerTest.java b/backend/src/test/java/com/votogether/domain/report/controller/ReportCommandControllerTest.java index 0534ccf64..379bbe927 100644 --- a/backend/src/test/java/com/votogether/domain/report/controller/ReportCommandControllerTest.java +++ b/backend/src/test/java/com/votogether/domain/report/controller/ReportCommandControllerTest.java @@ -1,17 +1,14 @@ package com.votogether.domain.report.controller; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.willDoNothing; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.vo.Gender; import com.votogether.domain.member.entity.vo.SocialType; +import com.votogether.domain.report.dto.request.ReportActionRequest; import com.votogether.domain.report.dto.request.ReportRequest; import com.votogether.domain.report.entity.vo.ReportType; import com.votogether.domain.report.service.ReportCommandService; -import com.votogether.global.jwt.TokenPayload; import com.votogether.test.ControllerTest; import io.restassured.http.ContentType; import io.restassured.module.mockmvc.RestAssuredMockMvc; @@ -22,6 +19,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullAndEmptySource; import org.junit.jupiter.params.provider.NullSource; +import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; @@ -29,7 +27,7 @@ import org.springframework.http.HttpStatus; import org.springframework.test.web.servlet.MockMvc; -@WebMvcTest(ReportCommandCommandController.class) +@WebMvcTest(ReportCommandController.class) class ReportCommandControllerTest extends ControllerTest { @MockBean @@ -51,6 +49,8 @@ class Report { @DisplayName("게시글에 대해 정상적으로 작동한다.") void reportPost() throws Exception { // given + mockingAuthArgumentResolver(); + Member member = Member.builder() .nickname("저문") .gender(Gender.MALE) @@ -58,12 +58,6 @@ void reportPost() throws Exception { .socialId("abc123") .socialType(SocialType.KAKAO) .build(); - - TokenPayload tokenPayload = new TokenPayload(1L, 1L, 1L); - given(tokenProcessor.resolveToken(anyString())).willReturn("token"); - given(tokenProcessor.parseToken(anyString())).willReturn(tokenPayload); - given(memberService.findById(anyLong())).willReturn(member); - ReportRequest request = new ReportRequest(ReportType.POST, 1L, "불건전한 게시글"); willDoNothing().given(reportCommandService).report(member, request); @@ -83,6 +77,8 @@ void reportPost() throws Exception { @DisplayName("댓글에 대해 정상적으로 작동한다.") void reportComment() throws Exception { // given + mockingAuthArgumentResolver(); + Member member = Member.builder() .nickname("저문") .gender(Gender.MALE) @@ -90,12 +86,6 @@ void reportComment() throws Exception { .socialId("abc123") .socialType(SocialType.KAKAO) .build(); - - TokenPayload tokenPayload = new TokenPayload(1L, 1L, 1L); - given(tokenProcessor.resolveToken(anyString())).willReturn("token"); - given(tokenProcessor.parseToken(anyString())).willReturn(tokenPayload); - given(memberService.findById(anyLong())).willReturn(member); - ReportRequest request = new ReportRequest(ReportType.COMMENT, 1L, "불건전한 댓글"); willDoNothing().given(reportCommandService).report(member, request); @@ -115,6 +105,8 @@ void reportComment() throws Exception { @DisplayName("닉네임에 대해 정상적으로 작동한다.") void reportNickname() throws Exception { // given + mockingAuthArgumentResolver(); + Member member = Member.builder() .nickname("저문") .gender(Gender.MALE) @@ -122,12 +114,6 @@ void reportNickname() throws Exception { .socialId("abc123") .socialType(SocialType.KAKAO) .build(); - - TokenPayload tokenPayload = new TokenPayload(1L, 1L, 1L); - given(tokenProcessor.resolveToken(anyString())).willReturn("token"); - given(tokenProcessor.parseToken(anyString())).willReturn(tokenPayload); - given(memberService.findById(anyLong())).willReturn(member); - ReportRequest request = new ReportRequest(ReportType.NICKNAME, 1L, "불건전한 닉네임"); willDoNothing().given(reportCommandService).report(member, request); @@ -150,6 +136,8 @@ void reportNickname() throws Exception { @DisplayName("신고 대상 Id가 빈 값인 경우 400을 반환한다.") void report(Long id) throws Exception { // given + mockingAuthArgumentResolver(); + Member member = Member.builder() .nickname("저문") .gender(Gender.MALE) @@ -157,12 +145,6 @@ void report(Long id) throws Exception { .socialId("abc123") .socialType(SocialType.KAKAO) .build(); - - TokenPayload tokenPayload = new TokenPayload(1L, 1L, 1L); - given(tokenProcessor.resolveToken(anyString())).willReturn("token"); - given(tokenProcessor.parseToken(anyString())).willReturn(tokenPayload); - given(memberService.findById(anyLong())).willReturn(member); - ReportRequest request = new ReportRequest(ReportType.COMMENT, id, "불건전한 게시글"); willDoNothing().given(reportCommandService).report(member, request); @@ -183,6 +165,8 @@ void report(Long id) throws Exception { @DisplayName("신고 이유가 빈 값일 경우 400을 반환한다.") void reportBadRequest(String reason) throws Exception { // given + mockingAuthArgumentResolver(); + Member member = Member.builder() .nickname("저문") .gender(Gender.MALE) @@ -190,12 +174,6 @@ void reportBadRequest(String reason) throws Exception { .socialId("abc123") .socialType(SocialType.KAKAO) .build(); - - TokenPayload tokenPayload = new TokenPayload(1L, 1L, 1L); - given(tokenProcessor.resolveToken(anyString())).willReturn("token"); - given(tokenProcessor.parseToken(anyString())).willReturn(tokenPayload); - given(memberService.findById(anyLong())).willReturn(member); - ReportRequest request = new ReportRequest(ReportType.POST, 1L, reason); willDoNothing().given(reportCommandService).report(member, request); @@ -211,4 +189,54 @@ void reportBadRequest(String reason) throws Exception { .status(HttpStatus.BAD_REQUEST); } + @Nested + @DisplayName("신고 조치 기능은") + class ReportAction { + + @Test + @DisplayName("정상적으로 작동한다.") + void reportAction() throws Exception { + // given + mockingAuthArgumentResolver(); + + ReportActionRequest request = new ReportActionRequest(1L, true); + willDoNothing().given(reportCommandService).reportAction(request); + + // when, then + RestAssuredMockMvc + .given().log().all() + .headers(HttpHeaders.AUTHORIZATION, "Bearer token") + .contentType(ContentType.JSON) + .body(request) + .when().post("/reports/action/admin") + .then().log().all() + .assertThat() + .status(HttpStatus.OK); + } + + @ParameterizedTest + @NullSource + @ValueSource(longs = {-1, 0}) + @DisplayName("신고 Id가 양수가 아닌 경우 400을 반환한다.") + void reportIdNotPositiveException(Long reportId) throws Exception { + // given + mockingAuthArgumentResolver(); + + ReportActionRequest request = new ReportActionRequest(reportId, true); + willDoNothing().given(reportCommandService).reportAction(request); + + // when, then + RestAssuredMockMvc + .given().log().all() + .headers(HttpHeaders.AUTHORIZATION, "Bearer token") + .contentType(ContentType.JSON) + .body(request) + .when().post("/reports/action/admin") + .then().log().all() + .assertThat() + .status(HttpStatus.BAD_REQUEST); + } + + } + } diff --git a/backend/src/test/java/com/votogether/domain/report/controller/ReportQueryControllerTest.java b/backend/src/test/java/com/votogether/domain/report/controller/ReportQueryControllerTest.java new file mode 100644 index 000000000..a7f9fb2fc --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/report/controller/ReportQueryControllerTest.java @@ -0,0 +1,124 @@ +package com.votogether.domain.report.controller; + +import static org.assertj.core.api.SoftAssertions.assertSoftly; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.mockito.BDDMockito.given; + +import com.votogether.domain.report.dto.ReportAggregateDto; +import com.votogether.domain.report.dto.response.ReportPageResponse; +import com.votogether.domain.report.dto.response.ReportResponse; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.domain.report.service.ReportQueryService; +import com.votogether.test.ControllerTest; +import io.restassured.common.mapper.TypeRef; +import io.restassured.http.ContentType; +import io.restassured.module.mockmvc.RestAssuredMockMvc; +import java.time.LocalDateTime; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.test.web.servlet.MockMvc; + +@WebMvcTest(ReportQueryController.class) +class ReportQueryControllerTest extends ControllerTest { + + @MockBean + ReportQueryService reportQueryService; + + @Autowired + MockMvc mockMvc; + + @BeforeEach + void setUp() { + RestAssuredMockMvc.mockMvc(mockMvc); + } + + @Nested + @DisplayName("신고 조치 예정 목록 조회") + class GetReports { + + @Test + @DisplayName("신고 조치 예정 목록을 조회에 성공하면 200 응답을 반환한다.") + void getReports() throws Exception { + // given + mockingAuthArgumentResolver(); + + int totalPages = 3; + int currentPageNumber = 1; + String reason = "reason"; + ReportType reportType = ReportType.POST; + long targetId = 1L; + + ReportAggregateDto reportAggregateDto = new ReportAggregateDto( + 1L, + reportType, + targetId, + reason, + LocalDateTime.now() + ); + + ReportPageResponse reportPageResponse = + ReportPageResponse.of( + totalPages, + currentPageNumber, + List.of(ReportResponse.of(reportAggregateDto, Long.toString(targetId))) + ); + + int page = 0; + given(reportQueryService.getReports(page)).willReturn(reportPageResponse); + + // when + ReportPageResponse reportPageResponses = RestAssuredMockMvc + .given().log().all() + .contentType(ContentType.JSON) + .headers(HttpHeaders.AUTHORIZATION, "Bearer token") + .param("page", page) + .when().get("/reports/admin") + .then().log().all() + .status(HttpStatus.OK) + .extract() + .as(new TypeRef<>() { + }); + + // then + List reports = reportPageResponses.reports(); + ReportResponse reportResponse = reports.get(0); + assertSoftly(softly -> { + softly.assertThat(reportPageResponses.totalPageNumber()).isEqualTo(totalPages); + softly.assertThat(reportPageResponses.currentPageNumber()).isEqualTo(currentPageNumber); + softly.assertThat(reports).hasSize(1); + softly.assertThat(reportResponse.target()).isEqualTo(Long.toString(targetId)); + softly.assertThat(reportResponse.type()).isEqualTo(reportType); + softly.assertThat(reportResponse.reasons()).containsExactly(reason); + }); + } + + @Test + @DisplayName("페이지가 음수라면 400 응답을 반환한다.") + void return400pageNegative() throws Exception { + // given + mockingAuthArgumentResolver(); + + // when, then + RestAssuredMockMvc.given().log().all() + .contentType(ContentType.JSON) + .headers(HttpHeaders.AUTHORIZATION, "Bearer token") + .param("page", -1) + .when().get("/reports/admin") + .then().log().all() + .status(HttpStatus.BAD_REQUEST) + .body("code", equalTo(201)) + .body("message", containsString("페이지는 0이상 정수만 가능합니다.")); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/domain/report/repository/ReportCustomRepositoryImplTest.java b/backend/src/test/java/com/votogether/domain/report/repository/ReportCustomRepositoryImplTest.java new file mode 100644 index 000000000..6b32ec1cf --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/report/repository/ReportCustomRepositoryImplTest.java @@ -0,0 +1,136 @@ +package com.votogether.domain.report.repository; + +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.domain.report.dto.ReportAggregateDto; +import com.votogether.domain.report.entity.Report; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.domain.report.exception.ReportExceptionType; +import com.votogether.global.exception.NotFoundException; +import com.votogether.test.RepositoryTest; +import com.votogether.test.fixtures.MemberFixtures; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import org.assertj.core.api.SoftAssertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; + +class ReportCustomRepositoryImplTest extends RepositoryTest { + + @Autowired + ReportCustomRepositoryImpl reportCustomRepository; + + @Autowired + MemberRepository memberRepository; + + @Test + @DisplayName("신고 조치 예정 목록을 최신순으로 조회한다") + void getReportAggregateDtos() { + // given + Member member = memberRepository.save(MemberFixtures.MALE_30.get()); + + Report savedReportA = reportTestPersister.builder() + .member(member) + .reportType(ReportType.POST) + .reason("reasonA") + .targetId(1L) + .save(); + + Report savedReportB = reportTestPersister.builder() + .member(member) + .reportType(ReportType.COMMENT) + .reason("reasonB") + .targetId(1L) + .save(); + + ReportAggregateDto reportAggregateDtoA = new ReportAggregateDto( + savedReportA.getId(), + savedReportA.getReportType(), + savedReportA.getTargetId(), + savedReportA.getReason(), + savedReportA.getCreatedAt() + ); + + ReportAggregateDto reportAggregateDtoB = new ReportAggregateDto( + savedReportB.getId(), + savedReportB.getReportType(), + savedReportB.getTargetId(), + savedReportB.getReason(), + savedReportB.getCreatedAt() + ); + + PageRequest pageRequest = PageRequest.of(0, 20); + + // when + List reports = reportCustomRepository + .findReportAggregateDtosByReportTypeAndTargetId(pageRequest); + + // then + assertSoftly(softly -> { + equalTo(softly, reports.get(0), reportAggregateDtoB); + equalTo(softly, reports.get(1), reportAggregateDtoA); + }); + } + + private void equalTo( + SoftAssertions softly, + ReportAggregateDto actualReport, + ReportAggregateDto expectReport + ) { + softly.assertThat(actualReport).usingRecursiveComparison() + .withEqualsForType( + (createdAtA, createdAtB) -> createdAtA.truncatedTo(ChronoUnit.SECONDS) + .isEqual(createdAtB.truncatedTo(ChronoUnit.SECONDS)), + LocalDateTime.class) + .ignoringFields("member", "updatedAt") + .isEqualTo(expectReport); + } + + @Test + @DisplayName("신고 조치 예정 정보를 조회한다") + void getReportAggregateDto() { + // given + Member memberA = memberRepository.save(MemberFixtures.MALE_30.get()); + Member memberB = memberRepository.save(MemberFixtures.MALE_20.get()); + + ReportType reportType = ReportType.POST; + long targetId = 1L; + + String reasonA = "reasonA"; + reportTestPersister.builder() + .member(memberA) + .reportType(reportType) + .reason(reasonA) + .targetId(targetId) + .save(); + + String reasonB = "reasonB"; + Report savedReportB = reportTestPersister.builder() + .member(memberB) + .reportType(reportType) + .reason(reasonB) + .targetId(targetId) + .save(); + + // when + ReportAggregateDto reportAggregateDto = reportCustomRepository + .findReportAggregateDtoByReportTypeAndTargetId(reportType, targetId) + .orElseThrow(() -> new NotFoundException(ReportExceptionType.NOT_FOUND)); + + // then + assertSoftly(softly -> { + softly.assertThat(reportAggregateDto.reportMaxId()).isEqualTo(savedReportB.getId()); + softly.assertThat(reportAggregateDto.reportType()).isEqualTo(reportType); + softly.assertThat(reportAggregateDto.targetId()).isEqualTo(targetId); + softly.assertThat(reportAggregateDto.reasons()).contains(reasonA, reasonB); + softly.assertThat(reportAggregateDto.createdAt().truncatedTo(ChronoUnit.SECONDS)) + .isEqualTo(savedReportB.getCreatedAt().truncatedTo(ChronoUnit.SECONDS)); + }); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/report/repository/ReportRepositoryTest.java b/backend/src/test/java/com/votogether/domain/report/repository/ReportRepositoryTest.java index 48c88ce5c..ba4530b91 100644 --- a/backend/src/test/java/com/votogether/domain/report/repository/ReportRepositoryTest.java +++ b/backend/src/test/java/com/votogether/domain/report/repository/ReportRepositoryTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.SoftAssertions.assertSoftly; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; import com.votogether.domain.post.entity.Post; import com.votogether.domain.report.entity.Report; @@ -17,6 +18,9 @@ class ReportRepositoryTest extends RepositoryTest { @Autowired ReportRepository reportRepository; + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + @Test @DisplayName("회원, 신고타입, 대상ID를 통해서 신고 횟수를 반환한다.") void countByMemberAndReportTypeAndTargetId() { diff --git a/backend/src/test/java/com/votogether/domain/report/service/ReportCommandServiceTest.java b/backend/src/test/java/com/votogether/domain/report/service/ReportCommandServiceTest.java index 851d33bbd..f8cfd85f1 100644 --- a/backend/src/test/java/com/votogether/domain/report/service/ReportCommandServiceTest.java +++ b/backend/src/test/java/com/votogether/domain/report/service/ReportCommandServiceTest.java @@ -1,24 +1,31 @@ package com.votogether.domain.report.service; -import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertAll; +import static org.assertj.core.api.SoftAssertions.assertSoftly; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; -import com.votogether.domain.post.dto.response.post.PostResponse; +import com.votogether.domain.member.service.MemberService; import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.entity.comment.Comment; -import com.votogether.domain.post.entity.vo.PostClosingType; -import com.votogether.domain.post.entity.vo.PostSortType; +import com.votogether.domain.post.repository.CommentRepository; +import com.votogether.domain.post.repository.PostRepository; import com.votogether.domain.post.service.PostCommentService; import com.votogether.domain.post.service.PostGuestService; +import com.votogether.domain.report.dto.request.ReportActionRequest; import com.votogether.domain.report.dto.request.ReportRequest; +import com.votogether.domain.report.entity.Report; import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.domain.report.repository.ReportRepository; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; import com.votogether.test.ServiceTest; +import com.votogether.test.fixtures.MemberFixtures; +import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -35,6 +42,21 @@ class ReportCommandServiceTest extends ServiceTest { @Autowired PostCommentService postCommentService; + @Autowired + MemberService memberService; + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + + @Autowired + ReportRepository reportRepository; + + @Autowired + PostRepository postRepository; + + @Autowired + CommentRepository commentRepository; + @Nested @DisplayName("게시글 신고기능은") class ReportPost { @@ -110,38 +132,6 @@ void reportDuplicated() { .hasMessage("하나의 글에 대해서 중복하여 신고할 수 없습니다."); } - @Test - @DisplayName("투표글 신고가 5회가 되면 블라인드 처리가 된다.") - void reportAndBlind() { - // given - Member reporter1 = memberTestPersister.builder().save(); - Member reporter2 = memberTestPersister.builder().save(); - Member reporter3 = memberTestPersister.builder().save(); - Member reporter4 = memberTestPersister.builder().save(); - Member reporter5 = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().save(); - ReportRequest request = new ReportRequest(ReportType.POST, post.getId(), "불건전한 게시글"); - - // when - reportCommandService.report(reporter1, request); - reportCommandService.report(reporter2, request); - reportCommandService.report(reporter3, request); - reportCommandService.report(reporter4, request); - reportCommandService.report(reporter5, request); - - // then - final List responses = postGuestService.getPosts( - 0, - PostClosingType.ALL, - PostSortType.HOT, - null - ); - assertAll( - () -> assertThat(post.isHidden()).isTrue(), - () -> assertThat(responses).isEmpty() - ); - } - } @Nested @@ -224,33 +214,6 @@ void reportDuplicated() { .hasMessage("하나의 댓글에 대해서 중복하여 신고할 수 없습니다."); } - @Test - @DisplayName("댓글 신고가 5회가 되면 블라인드 처리가 된다.") - void reportAndBlind() { - // given - Member reporter1 = memberTestPersister.builder().save(); - Member reporter2 = memberTestPersister.builder().save(); - Member reporter3 = memberTestPersister.builder().save(); - Member reporter4 = memberTestPersister.builder().save(); - Member reporter5 = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().save(); - Comment comment = commentTestPersister.builder().post(post).save(); - ReportRequest request = new ReportRequest(ReportType.COMMENT, comment.getId(), "불건전한 댓글"); - - // when - reportCommandService.report(reporter1, request); - reportCommandService.report(reporter2, request); - reportCommandService.report(reporter3, request); - reportCommandService.report(reporter4, request); - reportCommandService.report(reporter5, request); - - // then - assertAll( - () -> assertThat(comment.isHidden()).isTrue(), - () -> assertThat(postCommentService.getComments(post.getId())).isEmpty() - ); - } - } @Nested @@ -298,25 +261,247 @@ void reportDuplicated() { .isInstanceOf(BadRequestException.class) .hasMessage("하나의 닉네임에 대해서 중복하여 신고할 수 없습니다."); } + } + + @Nested + @DisplayName("신고 조치 기능은") + class ReportAction { + + @Test + @DisplayName("게시글에 대해 신고 조치를 한다.") + void postReportAction() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member writer = memberService.register(MemberFixtures.MALE_30.get()); + + Post post = postTestPersister.postBuilder() + .writer(writer) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .save(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.POST) + .reason("reasonA") + .targetId(post.getId()) + .save(); + + // when + ReportActionRequest request = new ReportActionRequest(savedReport.getId(), true); + reportCommandService.reportAction(request); + + // then + Post savedPost = postRepository.findById(post.getId()).get(); + Optional reportById = reportRepository.findById(savedReport.getId()); + ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findAll().get(0); + + assertSoftly(softly -> { + softly.assertThat(reportById).isEmpty(); + softly.assertThat(reportActionAlarm.getMember().getId()).isEqualTo(writer.getId()); + softly.assertThat(reportActionAlarm.getReportType()).isEqualTo(savedReport.getReportType()); + softly.assertThat(reportActionAlarm.getTarget()).isEqualTo(savedPost.getId().toString()); + softly.assertThat(reportActionAlarm.getReasons()).isEqualTo(savedReport.getReason()); + softly.assertThat(reportActionAlarm.isChecked()).isFalse(); + softly.assertThat(savedPost.isHidden()).isTrue(); + }); + } @Test - @DisplayName("닉네임 신고가 3회가 되면 닉네임이 자동변경처리가 된다.") - void reportAndBlind() { + @DisplayName("게시글에 대해 신고 조치를 하지 않는다.") + void postNotReportAction() { // given - Member reporter1 = memberTestPersister.builder().save(); - Member reporter2 = memberTestPersister.builder().save(); - Member reporter3 = memberTestPersister.builder().save(); - Member reported = memberTestPersister.builder().save(); - ReportRequest request = new ReportRequest(ReportType.NICKNAME, reported.getId(), "불건전한 닉네임"); + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member writer = memberService.register(MemberFixtures.MALE_30.get()); + + Post post = postTestPersister.postBuilder() + .writer(writer) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .save(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.POST) + .reason("reasonA") + .targetId(post.getId()) + .save(); + + // when + ReportActionRequest request = new ReportActionRequest(savedReport.getId(), false); + reportCommandService.reportAction(request); + + // then + Post savedPost = postRepository.findById(post.getId()).get(); + Optional reportById = reportRepository.findById(savedReport.getId()); + List reportActionAlarms = reportActionAlarmRepository.findAll(); + + assertSoftly(softly -> { + softly.assertThat(reportById).isEmpty(); + softly.assertThat(reportActionAlarms).isEmpty(); + softly.assertThat(savedPost.isHidden()).isFalse(); + }); + } + + @Test + @DisplayName("댓글에 대해 신고 조치를 한다.") + void commentReportAction() { + // given + Member writer = memberService.register(MemberFixtures.MALE_30.get()); + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + + Comment comment = commentTestPersister.builder() + .writer(writer) + .content("commnetA") + .save(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.COMMENT) + .reason("reasonA") + .targetId(comment.getId()) + .save(); // when - reportCommandService.report(reporter1, request); - reportCommandService.report(reporter2, request); - reportCommandService.report(reporter3, request); + ReportActionRequest request = new ReportActionRequest(savedReport.getId(), true); + reportCommandService.reportAction(request); // then - assertThat(reported.getNickname()).contains("Pause1"); + Comment savedComment = commentRepository.findById(comment.getId()).get(); + Optional reportById = reportRepository.findById(savedReport.getId()); + ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findAll().get(0); + + assertSoftly(softly -> { + softly.assertThat(reportById).isEmpty(); + softly.assertThat(reportActionAlarm.getMember().getId()).isEqualTo(writer.getId()); + softly.assertThat(reportActionAlarm.getReportType()).isEqualTo(savedReport.getReportType()); + softly.assertThat(reportActionAlarm.getTarget()).isEqualTo(savedComment.getContent()); + softly.assertThat(reportActionAlarm.getReasons()).isEqualTo(savedReport.getReason()); + softly.assertThat(reportActionAlarm.isChecked()).isFalse(); + softly.assertThat(savedComment.isHidden()).isTrue(); + }); } + + @Test + @DisplayName("댓글에 대해 신고 조치를 하지 않는다.") + void commentNotReportAction() { + // given + Member writer = memberService.register(MemberFixtures.MALE_30.get()); + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + + Comment comment = commentTestPersister.builder() + .writer(writer) + .content("commnetA") + .save(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.COMMENT) + .reason("reasonA") + .targetId(comment.getId()) + .save(); + + // when + ReportActionRequest request = new ReportActionRequest(savedReport.getId(), false); + reportCommandService.reportAction(request); + + // then + Comment savedComment = commentRepository.findById(comment.getId()).get(); + Optional reportById = reportRepository.findById(savedReport.getId()); + List reportActionAlarms = reportActionAlarmRepository.findAll(); + + assertSoftly(softly -> { + softly.assertThat(reportById).isEmpty(); + softly.assertThat(reportActionAlarms).isEmpty(); + softly.assertThat(savedComment.isHidden()).isFalse(); + }); + } + + @Test + @DisplayName("닉네임에 대해 신고 조치를 한다.") + void nicknameReportAction() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member member = memberService.register(MemberFixtures.MALE_30.get()); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.NICKNAME) + .reason("reasonA") + .targetId(member.getId()) + .save(); + + // when + ReportActionRequest request = new ReportActionRequest(savedReport.getId(), true); + reportCommandService.reportAction(request); + + // then + Member savedMember = memberService.findById(member.getId()); + Optional reportById = reportRepository.findById(savedReport.getId()); + ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findAll().get(0); + + assertSoftly(softly -> { + softly.assertThat(reportById).isEmpty(); + softly.assertThat(reportActionAlarm.getMember().getId()).isEqualTo(member.getId()); + softly.assertThat(reportActionAlarm.getReportType()).isEqualTo(savedReport.getReportType()); + softly.assertThat(reportActionAlarm.getTarget()).isNotEqualTo(savedMember.getNickname()); + softly.assertThat(reportActionAlarm.getReasons()).isEqualTo(savedReport.getReason()); + softly.assertThat(reportActionAlarm.isChecked()).isFalse(); + }); + } + + @Test + @DisplayName("닉네임에 대해 신고 조치를 하지 않는다.") + void nicknameNotReportAction() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member member = memberService.register(MemberFixtures.MALE_30.get()); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.NICKNAME) + .reason("reasonA") + .targetId(member.getId()) + .save(); + + // when + ReportActionRequest request = new ReportActionRequest(savedReport.getId(), false); + reportCommandService.reportAction(request); + + // then + Member savedMember = memberService.findById(member.getId()); + Optional reportById = reportRepository.findById(savedReport.getId()); + List reportActionAlarms = reportActionAlarmRepository.findAll(); + + assertSoftly(softly -> { + softly.assertThat(reportById).isEmpty(); + softly.assertThat(reportActionAlarms).isEmpty(); + softly.assertThat(member.getNickname()).isEqualTo(savedMember.getNickname()); + }); + } + + @Test + @DisplayName("신고가 존재하지 않으면 예외 발생.") + void reportNotExistException() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member member = memberService.register(MemberFixtures.MALE_30.get()); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.NICKNAME) + .reason("reasonA") + .targetId(member.getId()) + .save(); + + // when, then + ReportActionRequest request = new ReportActionRequest(savedReport.getId() + 1L, true); + assertThatThrownBy(() -> reportCommandService.reportAction(request)) + .isInstanceOf(NotFoundException.class); + } + } } diff --git a/backend/src/test/java/com/votogether/domain/report/service/ReportQueryServiceTest.java b/backend/src/test/java/com/votogether/domain/report/service/ReportQueryServiceTest.java new file mode 100644 index 000000000..5acffd146 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/report/service/ReportQueryServiceTest.java @@ -0,0 +1,70 @@ +package com.votogether.domain.report.service; + +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.service.MemberService; +import com.votogether.domain.post.entity.comment.Comment; +import com.votogether.domain.report.dto.response.ReportPageResponse; +import com.votogether.domain.report.dto.response.ReportResponse; +import com.votogether.domain.report.entity.Report; +import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.test.ServiceTest; +import com.votogether.test.fixtures.MemberFixtures; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class ReportQueryServiceTest extends ServiceTest { + + @Autowired + ReportQueryService reportQueryService; + + @Autowired + MemberService memberService; + + @Test + @DisplayName("신고 조치 예정 목록을 최신순으로 조회한다") + void getReports() { + // given + Member member = memberService.register(MemberFixtures.MALE_30.get()); + + Comment comment = commentTestPersister.builder() + .content("commnetA") + .save(); + + Report savedReportA = reportTestPersister.builder() + .member(member) + .reportType(ReportType.POST) + .reason("reasonA") + .targetId(1L) + .save(); + + Report savedReportB = reportTestPersister.builder() + .member(member) + .reportType(ReportType.COMMENT) + .reason("reasonB") + .targetId(comment.getId()) + .save(); + + // when + ReportPageResponse reportPageResponse = reportQueryService.getReports(0); + + // then + List reportResponses = reportPageResponse.reports(); + assertSoftly(softly -> { + softly.assertThat(reportPageResponse.totalPageNumber()).isOne(); + softly.assertThat(reportPageResponse.currentPageNumber()).isZero(); + softly.assertThat(reportResponses.get(0).id()).isEqualTo(savedReportB.getId()); + softly.assertThat(reportResponses.get(0).type()).isEqualTo(savedReportB.getReportType()); + softly.assertThat(reportResponses.get(0).reasons().get(0)).isEqualTo(savedReportB.getReason()); + softly.assertThat(reportResponses.get(0).target()).isEqualTo(comment.getContent()); + softly.assertThat(reportResponses.get(1).id()).isEqualTo(savedReportA.getId()); + softly.assertThat(reportResponses.get(1).type()).isEqualTo(savedReportA.getReportType()); + softly.assertThat(reportResponses.get(1).reasons().get(0)).isEqualTo(savedReportA.getReason()); + softly.assertThat(reportResponses.get(1).target()).isEqualTo(savedReportA.getTargetId().toString()); + }); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportCommentStrategyTest.java b/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportCommentStrategyTest.java index 3067999d5..fd7ab11b8 100644 --- a/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportCommentStrategyTest.java +++ b/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportCommentStrategyTest.java @@ -2,18 +2,25 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertAll; +import static org.assertj.core.api.SoftAssertions.assertSoftly; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.service.MemberService; import com.votogether.domain.post.entity.Post; import com.votogether.domain.post.entity.comment.Comment; import com.votogether.domain.post.service.PostCommentService; +import com.votogether.domain.report.dto.ReportAggregateDto; import com.votogether.domain.report.dto.request.ReportRequest; +import com.votogether.domain.report.entity.Report; import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.domain.report.repository.ReportRepository; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; import com.votogether.test.ServiceTest; +import com.votogether.test.fixtures.MemberFixtures; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -24,9 +31,18 @@ class ReportCommentStrategyTest extends ServiceTest { @Autowired ReportCommentStrategy reportCommentStrategy; + @Autowired + ReportRepository reportRepository; + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + @Autowired PostCommentService postCommentService; + @Autowired + MemberService memberService; + @Test @DisplayName("정상적으로 동작한다.") void reportComment() { @@ -103,30 +119,94 @@ void reportDuplicated() { } @Test - @DisplayName("댓글 신고가 5회가 되면 블라인드 처리가 된다.") - void reportAndBlind() { + @DisplayName("targetId를 통해 comment의 내용을 가져온다") + void parseTarget() { // given - Member reporter1 = memberTestPersister.builder().save(); - Member reporter2 = memberTestPersister.builder().save(); - Member reporter3 = memberTestPersister.builder().save(); - Member reporter4 = memberTestPersister.builder().save(); - Member reporter5 = memberTestPersister.builder().save(); - Post post = postTestPersister.postBuilder().save(); - Comment comment = commentTestPersister.builder().post(post).save(); - ReportRequest request = new ReportRequest(ReportType.COMMENT, comment.getId(), "불건전한 댓글"); + String savedCommentContent = "commentA"; + Comment comment = commentTestPersister.builder() + .content(savedCommentContent) + .save(); + + // when + String content = reportCommentStrategy.parseTarget(comment.getId()); + + // then + assertThat(content).isEqualTo(savedCommentContent); + } + + @Test + @DisplayName("댓글에 대한 신고 조치를 한다.") + void commentReportAction() { + // given + Member writer = memberService.register(MemberFixtures.MALE_30.get()); + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + + Comment comment = commentTestPersister.builder() + .writer(writer) + .content("commnetA") + .save(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.COMMENT) + .reason("reasonA") + .targetId(comment.getId()) + .save(); + + ReportAggregateDto reportAggregateDto = new ReportAggregateDto( + savedReport.getId(), + savedReport.getReportType(), + comment.getId(), + savedReport.getReason(), + savedReport.getCreatedAt() + ); // when - reportCommentStrategy.report(reporter1, request); - reportCommentStrategy.report(reporter2, request); - reportCommentStrategy.report(reporter3, request); - reportCommentStrategy.report(reporter4, request); - reportCommentStrategy.report(reporter5, request); + reportCommentStrategy.reportAction(reportAggregateDto); // then - assertAll( - () -> assertThat(comment.isHidden()).isTrue(), - () -> assertThat(postCommentService.getComments(post.getId())).isEmpty() + ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findAll().get(0); + + assertSoftly(softly -> { + softly.assertThat(reportActionAlarm.getMember().getId()).isEqualTo(writer.getId()); + softly.assertThat(reportActionAlarm.getReportType()).isEqualTo(savedReport.getReportType()); + softly.assertThat(reportActionAlarm.getTarget()).isEqualTo(comment.getContent()); + softly.assertThat(reportActionAlarm.getReasons()).isEqualTo(savedReport.getReason()); + softly.assertThat(reportActionAlarm.isChecked()).isFalse(); + softly.assertThat(comment.isHidden()).isTrue(); + }); + } + + @Test + @DisplayName("댓글이 존재하지 않는 경우 예외 발생") + void commentNotExistException() { + // given + Member writer = memberService.register(MemberFixtures.MALE_30.get()); + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + + Comment comment = commentTestPersister.builder() + .writer(writer) + .content("commnetA") + .save(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.COMMENT) + .reason("reasonA") + .targetId(comment.getId()) + .save(); + + ReportAggregateDto reportAggregateDto = new ReportAggregateDto( + savedReport.getId(), + savedReport.getReportType(), + comment.getId() + 1L, + savedReport.getReason(), + savedReport.getCreatedAt() ); + + // when, then + assertThatThrownBy(() -> reportCommentStrategy.reportAction(reportAggregateDto)) + .isInstanceOf(NotFoundException.class); } } diff --git a/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategyTest.java b/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategyTest.java index 0c47fcfac..b3879b49b 100644 --- a/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategyTest.java +++ b/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportNicknameStrategyTest.java @@ -2,15 +2,21 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertAll; +import static org.assertj.core.api.SoftAssertions.assertSoftly; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.domain.member.service.MemberService; +import com.votogether.domain.report.dto.ReportAggregateDto; import com.votogether.domain.report.dto.request.ReportRequest; +import com.votogether.domain.report.entity.Report; import com.votogether.domain.report.entity.vo.ReportType; import com.votogether.domain.report.repository.ReportRepository; import com.votogether.global.exception.BadRequestException; +import com.votogether.global.exception.NotFoundException; import com.votogether.test.ServiceTest; import com.votogether.test.fixtures.MemberFixtures; import org.junit.jupiter.api.DisplayName; @@ -23,6 +29,12 @@ class ReportNicknameStrategyTest extends ServiceTest { @Autowired ReportNicknameStrategy reportNicknameStrategy; + @Autowired + MemberService memberService; + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + @Autowired ReportRepository reportRepository; @@ -75,26 +87,81 @@ void reportDuplicated() { } @Test - @DisplayName("닉네임 신고가 3회가 되면 닉네임이 자동변경처리가 된다.") - void reportAndBlind() { + @DisplayName("targetId를 통해 해당 멤버의 Nickname을 가져온다") + void parseTarget() { // given - Member reporter1 = memberRepository.save(MemberFixtures.FEMALE_20.get()); - Member reporter2 = memberRepository.save(MemberFixtures.FEMALE_30.get()); - Member reporter3 = memberRepository.save(MemberFixtures.FEMALE_40.get()); - Member reported = memberRepository.save(MemberFixtures.FEMALE_10.get()); + Member member = memberRepository.save(MemberFixtures.MALE_30.get()); - ReportRequest request = new ReportRequest(ReportType.NICKNAME, reported.getId(), "불건전한 닉네임"); + // when + String nickName = reportNicknameStrategy.parseTarget(member.getId()); + + // then + assertThat(nickName).isEqualTo(member.getNickname()); + } + + @Test + @DisplayName("닉네임에 대한 신고 조치를 한다.") + void nicknameReportAction() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member member = memberService.register(MemberFixtures.MALE_30.get()); + String nickname = member.getNickname(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.NICKNAME) + .reason("reasonA") + .targetId(member.getId()) + .save(); + + ReportAggregateDto reportAggregateDto = new ReportAggregateDto( + savedReport.getId(), + savedReport.getReportType(), + member.getId(), + savedReport.getReason(), + savedReport.getCreatedAt() + ); // when - reportNicknameStrategy.report(reporter1, request); - reportNicknameStrategy.report(reporter2, request); - reportNicknameStrategy.report(reporter3, request); + reportNicknameStrategy.reportAction(reportAggregateDto); // then - assertAll( - () -> assertThat(reported.getNickname()).contains("Pause1"), - () -> assertThat(reportRepository.findAll()).isEmpty() + ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findAll().get(0); + + assertSoftly(softly -> { + softly.assertThat(reportActionAlarm.getMember().getId()).isEqualTo(member.getId()); + softly.assertThat(reportActionAlarm.getReportType()).isEqualTo(savedReport.getReportType()); + softly.assertThat(reportActionAlarm.getTarget()).isNotEqualTo(member.getNickname()); + softly.assertThat(reportActionAlarm.getReasons()).isEqualTo(savedReport.getReason()); + softly.assertThat(reportActionAlarm.isChecked()).isFalse(); + }); + } + + @Test + @DisplayName("회원이 존재하지 않는 경우 예외 발생") + void nicknameNotExistException() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member member = memberService.register(MemberFixtures.MALE_30.get()); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.NICKNAME) + .reason("reasonA") + .targetId(member.getId()) + .save(); + + ReportAggregateDto reportAggregateDto = new ReportAggregateDto( + savedReport.getId(), + savedReport.getReportType(), + member.getId() + 1L, + savedReport.getReason(), + savedReport.getCreatedAt() ); + + // when, then + assertThatThrownBy(() -> reportNicknameStrategy.reportAction(reportAggregateDto)) + .isInstanceOf(NotFoundException.class); } } diff --git a/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportPostStrategyTest.java b/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportPostStrategyTest.java index 9b37c8bc1..cc8ff328e 100644 --- a/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportPostStrategyTest.java +++ b/backend/src/test/java/com/votogether/domain/report/service/strategy/ReportPostStrategyTest.java @@ -2,21 +2,25 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.assertAll; +import static org.assertj.core.api.SoftAssertions.assertSoftly; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; import com.votogether.domain.member.entity.Member; -import com.votogether.domain.post.dto.response.post.PostResponse; +import com.votogether.domain.member.service.MemberService; import com.votogether.domain.post.entity.Post; -import com.votogether.domain.post.entity.vo.PostClosingType; -import com.votogether.domain.post.entity.vo.PostSortType; import com.votogether.domain.post.service.PostGuestService; +import com.votogether.domain.report.dto.ReportAggregateDto; import com.votogether.domain.report.dto.request.ReportRequest; +import com.votogether.domain.report.entity.Report; import com.votogether.domain.report.entity.vo.ReportType; +import com.votogether.domain.report.repository.ReportRepository; import com.votogether.global.exception.BadRequestException; import com.votogether.global.exception.NotFoundException; import com.votogether.test.ServiceTest; -import java.util.List; +import com.votogether.test.fixtures.MemberFixtures; +import java.time.LocalDateTime; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -30,6 +34,16 @@ class ReportPostStrategyTest extends ServiceTest { @Autowired PostGuestService postGuestService; + @Autowired + MemberService memberService; + + @Autowired + ReportActionAlarmRepository reportActionAlarmRepository; + + @Autowired + ReportRepository reportRepository; + + @Test @DisplayName("정상적으로 동작한다.") void reportPost() { @@ -102,35 +116,88 @@ void reportDuplicated() { } @Test - @DisplayName("투표글 신고가 5회가 되면 블라인드 처리가 된다.") - void reportAndBlind() { + @DisplayName("targetId를 문자열로 파싱한다.") + void parseTarget() { // given - Member reporter1 = memberTestPersister.builder().save(); - Member reporter2 = memberTestPersister.builder().save(); - Member reporter3 = memberTestPersister.builder().save(); - Member reporter4 = memberTestPersister.builder().save(); - Member reporter5 = memberTestPersister.builder().save(); Post post = postTestPersister.postBuilder().save(); - ReportRequest request = new ReportRequest(ReportType.POST, post.getId(), "불건전한 게시글"); // when - reportPostStrategy.report(reporter1, request); - reportPostStrategy.report(reporter2, request); - reportPostStrategy.report(reporter3, request); - reportPostStrategy.report(reporter4, request); - reportPostStrategy.report(reporter5, request); + String postId = reportPostStrategy.parseTarget(post.getId()); // then - final List responses = postGuestService.getPosts( - 0, - PostClosingType.ALL, - PostSortType.HOT, - null + assertThat(postId).isEqualTo(post.getId().toString()); + } + + @Test + @DisplayName("게시글에 대한 신고 조치를 한다.") + void postReportAction() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member writer = memberService.register(MemberFixtures.MALE_30.get()); + + Post post = postTestPersister.postBuilder() + .writer(writer) + .title("title") + .content("content") + .deadline(LocalDateTime.now()) + .save(); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.POST) + .reason("reasonA") + .targetId(post.getId()) + .save(); + + ReportAggregateDto reportAggregateDto = new ReportAggregateDto( + savedReport.getId(), + savedReport.getReportType(), + post.getId(), + savedReport.getReason(), + savedReport.getCreatedAt() ); - assertAll( - () -> assertThat(post.isHidden()).isTrue(), - () -> assertThat(responses).isEmpty() + + // when + reportPostStrategy.reportAction(reportAggregateDto); + + // then + ReportActionAlarm reportActionAlarm = reportActionAlarmRepository.findAll().get(0); + + assertSoftly(softly -> { + softly.assertThat(reportActionAlarm.getMember().getId()).isEqualTo(writer.getId()); + softly.assertThat(reportActionAlarm.getReportType()).isEqualTo(savedReport.getReportType()); + softly.assertThat(reportActionAlarm.getTarget()).isEqualTo(post.getId().toString()); + softly.assertThat(reportActionAlarm.getReasons()).isEqualTo(savedReport.getReason()); + softly.assertThat(reportActionAlarm.isChecked()).isFalse(); + softly.assertThat(post.isHidden()).isTrue(); + }); + } + + @Test + @DisplayName("게시글이 존재하지 않는 경우 예외 발생") + void postNotExistException() { + // given + Member reporter = memberService.register(MemberFixtures.MALE_20.get()); + Member member = memberService.register(MemberFixtures.MALE_30.get()); + + Report savedReport = reportTestPersister.builder() + .member(reporter) + .reportType(ReportType.NICKNAME) + .reason("reasonA") + .targetId(member.getId()) + .save(); + + ReportAggregateDto reportAggregateDto = new ReportAggregateDto( + savedReport.getId(), + savedReport.getReportType(), + member.getId() + 1L, + savedReport.getReason(), + savedReport.getCreatedAt() ); + + // when, then + assertThatThrownBy(() -> reportPostStrategy.reportAction(reportAggregateDto)) + .isInstanceOf(NotFoundException.class); } } diff --git a/backend/src/test/java/com/votogether/domain/vote/repository/VoteRepositoryTest.java b/backend/src/test/java/com/votogether/domain/vote/repository/VoteRepositoryTest.java index 9cc23b96b..6ab7b1a6a 100644 --- a/backend/src/test/java/com/votogether/domain/vote/repository/VoteRepositoryTest.java +++ b/backend/src/test/java/com/votogether/domain/vote/repository/VoteRepositoryTest.java @@ -1,7 +1,6 @@ package com.votogether.domain.vote.repository; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertAll; import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.vo.Gender; @@ -284,28 +283,4 @@ void deleteAllWithPostIdInBatch() { assertThat(voteRepository.findAll()).isEmpty(); } - @Test - @DisplayName("모든 멤버의 투표 개수를 가져온다.") - void findCountsByMembers() { - // given - Member member = memberTestPersister.builder().save(); - Member member1 = memberTestPersister.builder().save(); - Member member2 = memberTestPersister.builder().save(); - - voteTestPersister.builder().member(member).save(); - voteTestPersister.builder().member(member1).save(); - voteTestPersister.builder().member(member1).save(); - - // when - List voteCounts = voteRepository.findCountsByMembers(List.of(member, member1, member2)); - - // then - assertAll( - () -> assertThat(voteCounts).hasSize(3), - () -> assertThat(voteCounts.get(0)).isEqualTo(1), - () -> assertThat(voteCounts.get(1)).isEqualTo(2), - () -> assertThat(voteCounts.get(2)).isEqualTo(0) - ); - } - } diff --git a/backend/src/test/java/com/votogether/domain/vote/service/VoteServiceConcurrentTest.java b/backend/src/test/java/com/votogether/domain/vote/service/VoteServiceConcurrentTest.java new file mode 100644 index 000000000..dbc25937d --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/vote/service/VoteServiceConcurrentTest.java @@ -0,0 +1,215 @@ +package com.votogether.domain.vote.service; + +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.repository.MemberMetricRepository; +import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.domain.post.entity.Post; +import com.votogether.domain.post.entity.PostOption; +import com.votogether.domain.post.repository.PostOptionRepository; +import com.votogether.domain.post.repository.PostRepository; +import com.votogether.domain.vote.repository.VoteRepository; +import com.votogether.global.log.context.LogContext; +import com.votogether.test.persister.MemberMetricTestPersister; +import com.votogether.test.persister.MemberTestPersister; +import com.votogether.test.persister.PostTestPersister; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; + +@SpringBootTest +class VoteServiceConcurrentTest { + + @MockBean + LogContext logContext; + + @Autowired + VoteService voteService; + + @Autowired + MemberRepository memberRepository; + + @Autowired + MemberMetricRepository memberMetricRepository; + + @Autowired + PostRepository postRepository; + + @Autowired + PostOptionRepository postOptionRepository; + + @Autowired + VoteRepository voteRepository; + + @Autowired + MemberTestPersister memberTestPersister; + + @Autowired + MemberMetricTestPersister memberMetricTestPersister; + + @Autowired + PostTestPersister postTestPersister; + + @AfterEach + void tearDown() { + voteRepository.deleteAll(); + postOptionRepository.deleteAll(); + postRepository.deleteAll(); + memberMetricRepository.deleteAll(); + memberRepository.deleteAll(); + } + + /** + * 게시글 락을 걸지 않으면 투표 2개 생기는 문제 발생 + */ + @Test + @DisplayName("동시에 투표를 하더라도 투표는 1번만 되어야 한다.") + void concurrentlyOnlyVote() throws Exception { + // given + ExecutorService executorService = Executors.newFixedThreadPool(2); + CountDownLatch latch = new CountDownLatch(2); + AtomicInteger successCount = new AtomicInteger(); + AtomicInteger failCount = new AtomicInteger(); + + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOptionA = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + PostOption postOptionB = postTestPersister.postOptionBuilder().post(post).sequence(2).save(); + post.addPostOption(postOptionA); + post.addPostOption(postOptionB); + + // when + executorService.submit(() -> { + try { + voteService.vote(member, post.getId(), postOptionA.getId()); + successCount.incrementAndGet(); + } catch (Exception e) { + System.out.println("EXCEPTION 1 : " + e.getMessage()); + failCount.incrementAndGet(); + } finally { + latch.countDown(); + } + }); + executorService.submit(() -> { + try { + voteService.vote(member, post.getId(), postOptionB.getId()); + successCount.incrementAndGet(); + } catch (Exception e) { + System.out.println("EXCEPTION 2 : " + e.getMessage()); + failCount.incrementAndGet(); + } finally { + latch.countDown(); + } + }); + latch.await(); + + System.out.println("SUCCESS : " + successCount); + System.out.println("FAIL : " + failCount); + + // then + assertSoftly(softly -> { + softly.assertThat(postRepository.findById(post.getId()).get().getVoteCount()).isEqualTo(1); + softly.assertThat(memberMetricRepository.findByMember(member).get().getVoteCount()).isEqualTo(1); + }); + } + + /** + * 락을 걸지 않으면 투표 수가 일치하지 않을 수 있다. + */ + @Test + @DisplayName("동시에 투표를 하더라도 투표 수가 일치한다.") + void concurrentlyVote() throws Exception { + // given + ExecutorService executorService = Executors.newFixedThreadPool(5); + CountDownLatch latch = new CountDownLatch(5); + + List members = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + members.add(memberTestPersister.builder().save()); + memberMetricTestPersister.builder().member(members.get(i)).save(); + } + Post post = postTestPersister.postBuilder().save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + post.addPostOption(postOption); + + // when + for (int i = 0; i < 5; i++) { + int index = i; + executorService.submit(() -> { + try { + voteService.vote(members.get(index), post.getId(), postOption.getId()); + } finally { + latch.countDown(); + } + }); + } + latch.await(); + + // then + assertSoftly(softly -> { + softly.assertThat(postRepository.findById(post.getId()).get().getVoteCount()).isEqualTo(5); + softly.assertThat(postOptionRepository.findById(postOption.getId()).get().getVoteCount()).isEqualTo(5); + }); + } + + /** + * 정렬하지 않으면 데드락 문제가 발생한다. + */ + @Test + @DisplayName("동시에 투표를 수정하더라도 투표 수가 일치한다.") + void concurrentlyChangeVote() throws Exception { + // given + ExecutorService executorService = Executors.newFixedThreadPool(2); + CountDownLatch latch = new CountDownLatch(2); + + Member memberA = memberTestPersister.builder().save(); + Member memberB = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(memberA).save(); + memberMetricTestPersister.builder().member(memberB).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOptionA = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + PostOption postOptionB = postTestPersister.postOptionBuilder().post(post).sequence(2).save(); + post.addPostOption(postOptionA); + post.addPostOption(postOptionB); + voteService.vote(memberA, post.getId(), postOptionA.getId()); + voteService.vote(memberB, post.getId(), postOptionB.getId()); + + // when + executorService.submit(() -> { + try { + voteService.changeVote(memberA, post.getId(), postOptionA.getId(), postOptionB.getId()); + } finally { + latch.countDown(); + } + }); + executorService.submit(() -> { + try { + voteService.changeVote(memberB, post.getId(), postOptionB.getId(), postOptionA.getId()); + } finally { + latch.countDown(); + } + }); + latch.await(); + + // then + assertSoftly(softly -> { + softly.assertThat(postRepository.findById(post.getId()).get().getVoteCount()).isEqualTo(2); + softly.assertThat(postOptionRepository.findById(postOptionA.getId()).get().getVoteCount()).isEqualTo(1); + softly.assertThat(postOptionRepository.findById(postOptionB.getId()).get().getVoteCount()).isEqualTo(1); + softly.assertThat(memberMetricRepository.findByMember(memberA).get().getVoteCount()).isEqualTo(1); + softly.assertThat(memberMetricRepository.findByMember(memberB).get().getVoteCount()).isEqualTo(1); + }); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/vote/service/VoteServiceTest.java b/backend/src/test/java/com/votogether/domain/vote/service/VoteServiceTest.java new file mode 100644 index 000000000..c5974e055 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/vote/service/VoteServiceTest.java @@ -0,0 +1,155 @@ +package com.votogether.domain.vote.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.SoftAssertions.assertSoftly; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.entity.MemberMetric; +import com.votogether.domain.post.entity.Post; +import com.votogether.domain.post.entity.PostOption; +import com.votogether.domain.post.repository.PostOptionRepository; +import com.votogether.domain.post.repository.PostRepository; +import com.votogether.test.ServiceTest; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class VoteServiceTest extends ServiceTest { + + @Autowired + VoteService voteService; + + @Autowired + PostRepository postRepository; + + @Autowired + PostOptionRepository postOptionRepository; + + @Nested + @DisplayName("투표를 할 때") + class Vote { + + @Test + @DisplayName("게시글의 투표 수가 1 증가한다.") + void increasePostVoteCount() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + post.addPostOption(postOption); + + // when + voteService.vote(member, post.getId(), postOption.getId()); + + // then + assertThat(post.getVoteCount()).isEqualTo(1); + } + + @Test + @DisplayName("게시글 옵션의 투표 수가 1 증가한다.") + void increasePostOptionVoteCount() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + post.addPostOption(postOption); + + // when + voteService.vote(member, post.getId(), postOption.getId()); + + // then + assertThat(postOption.getVoteCount()).isEqualTo(1); + } + + @Test + @DisplayName("멤버의 투표 수가 업데이트된다.") + void updateMemberVoteCount() { + // given + Member member = memberTestPersister.builder().save(); + MemberMetric memberMetric = memberMetricTestPersister.builder().member(member).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOption = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + post.addPostOption(postOption); + + // when + voteService.vote(member, post.getId(), postOption.getId()); + + // then + assertThat(memberMetric.getVoteCount()).isEqualTo(1); + } + + } + + @Nested + @DisplayName("투표를 수정할 때") + class ChangeVote { + + @Test + @DisplayName("게시글 투표 수는 변하지 않는다.") + void maintainPostVoteCount() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOptionA = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + PostOption postOptionB = postTestPersister.postOptionBuilder().post(post).sequence(2).save(); + post.addPostOption(postOptionA); + post.addPostOption(postOptionB); + voteService.vote(member, post.getId(), postOptionA.getId()); + + // when + voteService.changeVote(member, post.getId(), postOptionA.getId(), postOptionB.getId()); + + // then + assertThat(post.getVoteCount()).isOne(); + } + + @Test + @DisplayName("기존 옵션 투표 수는 1 감소하고, 새로운 옵션 투표 수는 1 증가한다.") + void decreaseOriginIncreaseNew() { + // given + Member member = memberTestPersister.builder().save(); + memberMetricTestPersister.builder().member(member).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOptionA = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + PostOption postOptionB = postTestPersister.postOptionBuilder().post(post).sequence(2).save(); + post.addPostOption(postOptionA); + post.addPostOption(postOptionB); + voteService.vote(member, post.getId(), postOptionA.getId()); + + // when + voteService.changeVote(member, post.getId(), postOptionA.getId(), postOptionB.getId()); + + // then + assertSoftly(softly -> { + softly.assertThat(postOptionA.getVoteCount()).isZero(); + softly.assertThat(postOptionB.getVoteCount()).isOne(); + }); + } + + @Test + @DisplayName("멤버의 투표 수는 변하지 않는다.") + void maintainMemberVoteCount() { + // given + Member member = memberTestPersister.builder().save(); + MemberMetric memberMetric = memberMetricTestPersister.builder().member(member).save(); + Post post = postTestPersister.postBuilder().save(); + PostOption postOptionA = postTestPersister.postOptionBuilder().post(post).sequence(1).save(); + PostOption postOptionB = postTestPersister.postOptionBuilder().post(post).sequence(2).save(); + post.addPostOption(postOptionA); + post.addPostOption(postOptionB); + voteService.vote(member, post.getId(), postOptionA.getId()); + + // when + voteService.changeVote(member, post.getId(), postOptionA.getId(), postOptionB.getId()); + + // then + assertThat(memberMetric.getVoteCount()).isOne(); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/global/jwt/TokenProcessorTest.java b/backend/src/test/java/com/votogether/global/jwt/TokenProcessorTest.java index 78657b435..8f6d1c010 100644 --- a/backend/src/test/java/com/votogether/global/jwt/TokenProcessorTest.java +++ b/backend/src/test/java/com/votogether/global/jwt/TokenProcessorTest.java @@ -5,10 +5,10 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.votogether.domain.member.entity.Member; -import com.votogether.domain.member.entity.vo.Gender; -import com.votogether.domain.member.entity.vo.SocialType; import com.votogether.domain.member.repository.MemberRepository; +import com.votogether.global.exception.BadRequestException; import com.votogether.test.RepositoryTest; +import com.votogether.test.fixtures.MemberFixtures; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -30,15 +30,7 @@ class TokenProcessorTest extends RepositoryTest { @DisplayName("토큰을 생성한다.") void generateToken() throws Exception { // given - Member member = Member.builder() - .nickname("저문") - .gender(Gender.MALE) - .birthYear(1966) - .socialId("abc123") - .socialType(SocialType.KAKAO) - .build(); - - memberRepository.save(member); + Member member = memberRepository.save(MemberFixtures.MALE_30.get()); // when String token = tokenProcessor.generateAccessToken(member.getId()); @@ -56,14 +48,7 @@ class ResolveToken { @DisplayName("Bearer가 prefix면 성공한다.") void resolveTokenSuccess() throws JsonProcessingException { // given - Member member = Member.builder() - .nickname("저문") - .gender(Gender.MALE) - .birthYear(1966) - .socialId("abc123") - .socialType(SocialType.KAKAO) - .build(); - memberRepository.save(member); + Member member = memberRepository.save(MemberFixtures.MALE_30.get()); String token = tokenProcessor.generateAccessToken(member.getId()); token = "Bearer " + token; @@ -81,20 +66,13 @@ void resolveTokenSuccess() throws JsonProcessingException { @DisplayName("Bearer가 아닌 다른 prefix라면 예외를 발생시킨다.") void resolveTokenFail(String prefix) { // given - Member member = Member.builder() - .nickname("저문") - .gender(Gender.MALE) - .birthYear(1966) - .socialId("abc123") - .socialType(SocialType.KAKAO) - .build(); - memberRepository.save(member); + Member member = memberRepository.save(MemberFixtures.MALE_30.get()); String token = prefix + tokenProcessor.generateAccessToken(member.getId()); // when, then assertThatThrownBy(() -> tokenProcessor.resolveToken(token)) - .isInstanceOf(IllegalArgumentException.class) + .isInstanceOf(BadRequestException.class) .hasMessage("올바르지 않은 토큰입니다."); } diff --git a/backend/src/test/java/com/votogether/test/RepositoryTest.java b/backend/src/test/java/com/votogether/test/RepositoryTest.java index 6bdc1a9dd..f42d331dd 100644 --- a/backend/src/test/java/com/votogether/test/RepositoryTest.java +++ b/backend/src/test/java/com/votogether/test/RepositoryTest.java @@ -4,6 +4,7 @@ import com.votogether.global.config.QuerydslConfig; import com.votogether.test.persister.CategoryTestPersister; import com.votogether.test.persister.CommentTestPersister; +import com.votogether.test.persister.MemberMetricTestPersister; import com.votogether.test.persister.MemberTestPersister; import com.votogether.test.persister.Persister; import com.votogether.test.persister.PostTestPersister; @@ -22,16 +23,19 @@ public class RepositoryTest { @Autowired - protected MemberTestPersister memberTestPersister; + protected CategoryTestPersister categoryTestPersister; @Autowired - protected CategoryTestPersister categoryTestPersister; + protected CommentTestPersister commentTestPersister; @Autowired - protected PostTestPersister postTestPersister; + protected MemberMetricTestPersister memberMetricTestPersister; @Autowired - protected CommentTestPersister commentTestPersister; + protected MemberTestPersister memberTestPersister; + + @Autowired + protected PostTestPersister postTestPersister; @Autowired protected ReportTestPersister reportTestPersister; diff --git a/backend/src/test/java/com/votogether/test/ServiceTest.java b/backend/src/test/java/com/votogether/test/ServiceTest.java index 6c44c7d6d..fb7748eb9 100644 --- a/backend/src/test/java/com/votogether/test/ServiceTest.java +++ b/backend/src/test/java/com/votogether/test/ServiceTest.java @@ -3,6 +3,7 @@ import com.votogether.global.log.context.LogContext; import com.votogether.test.persister.CategoryTestPersister; import com.votogether.test.persister.CommentTestPersister; +import com.votogether.test.persister.MemberMetricTestPersister; import com.votogether.test.persister.MemberTestPersister; import com.votogether.test.persister.PostTestPersister; import com.votogether.test.persister.ReportTestPersister; @@ -20,16 +21,19 @@ public class ServiceTest { LogContext logContext; @Autowired - protected MemberTestPersister memberTestPersister; + protected CategoryTestPersister categoryTestPersister; @Autowired - protected CategoryTestPersister categoryTestPersister; + protected CommentTestPersister commentTestPersister; @Autowired - protected PostTestPersister postTestPersister; + protected MemberMetricTestPersister memberMetricTestPersister; @Autowired - protected CommentTestPersister commentTestPersister; + protected MemberTestPersister memberTestPersister; + + @Autowired + protected PostTestPersister postTestPersister; @Autowired protected ReportTestPersister reportTestPersister; diff --git a/backend/src/test/java/com/votogether/test/fixtures/MemberFixtures.java b/backend/src/test/java/com/votogether/test/fixtures/MemberFixtures.java index a37c71fb2..0d14b2e7f 100644 --- a/backend/src/test/java/com/votogether/test/fixtures/MemberFixtures.java +++ b/backend/src/test/java/com/votogether/test/fixtures/MemberFixtures.java @@ -2,42 +2,55 @@ import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.vo.Gender; +import com.votogether.domain.member.entity.vo.Roles; import com.votogether.domain.member.entity.vo.SocialType; +import java.time.LocalDateTime; public enum MemberFixtures { - MALE_UNDER_10("user1", Gender.MALE, 2015, "user1"), - FEMALE_UNDER_10("user2", Gender.FEMALE, 2015, "user2"), - MALE_10("user3", Gender.MALE, 2005, "user3"), - FEMALE_10("user4", Gender.FEMALE, 2005, "user4"), - MALE_20("user7", Gender.MALE, 1995, "user7"), - FEMALE_20("user8", Gender.FEMALE, 1995, "user8"), - MALE_30("user9", Gender.MALE, 1985, "user9"), - FEMALE_30("user10", Gender.FEMALE, 1985, "user10"), - MALE_40("user11", Gender.MALE, 1975, "user11"), - FEMALE_40("user12", Gender.FEMALE, 1975, "user12"), - MALE_50("user13", Gender.MALE, 1965, "user13"), - FEMALE_50("user14", Gender.FEMALE, 1965, "user14"), - MALE_60("user15", Gender.MALE, 1955, "user15"), - FEMALE_60("user16", Gender.FEMALE, 1955, "user16"), - MALE_70("user17", Gender.MALE, 1945, "user17"), - FEMALE_70("user18", Gender.FEMALE, 1945, "user18"), - MALE_80("user19", Gender.MALE, 1935, "user19"), - FEMALE_80("user20", Gender.FEMALE, 1935, "user20"), - MALE_OVER_90("user21", Gender.MALE, 1925, "user21"), - FEMALE_OVER_90("user22", Gender.FEMALE, 1925, "user22"), + MALE_UNDER_10("user1", Gender.MALE, 2015, "user1", Roles.MEMBER, LocalDateTime.now()), + FEMALE_UNDER_10("user2", Gender.FEMALE, 2015, "user2", Roles.MEMBER, LocalDateTime.now()), + MALE_10("user3", Gender.MALE, 2005, "user3", Roles.MEMBER, LocalDateTime.now()), + FEMALE_10("user4", Gender.FEMALE, 2005, "user4", Roles.MEMBER, LocalDateTime.now()), + MALE_20("user7", Gender.MALE, 1995, "user7", Roles.MEMBER, LocalDateTime.now()), + FEMALE_20("user8", Gender.FEMALE, 1995, "user8", Roles.MEMBER, LocalDateTime.now()), + MALE_30("user9", Gender.MALE, 1985, "user9", Roles.MEMBER, LocalDateTime.now()), + FEMALE_30("user10", Gender.FEMALE, 1985, "user10", Roles.MEMBER, LocalDateTime.now()), + MALE_40("user11", Gender.MALE, 1975, "user11", Roles.MEMBER, LocalDateTime.now()), + FEMALE_40("user12", Gender.FEMALE, 1975, "user12", Roles.MEMBER, LocalDateTime.now()), + MALE_50("user13", Gender.MALE, 1965, "user13", Roles.MEMBER, LocalDateTime.now()), + FEMALE_50("user14", Gender.FEMALE, 1965, "user14", Roles.MEMBER, LocalDateTime.now()), + MALE_60("user15", Gender.MALE, 1955, "user15", Roles.MEMBER, LocalDateTime.now()), + FEMALE_60("user16", Gender.FEMALE, 1955, "user16", Roles.MEMBER, LocalDateTime.now()), + MALE_70("user17", Gender.MALE, 1945, "user17", Roles.MEMBER, LocalDateTime.now()), + FEMALE_70("user18", Gender.FEMALE, 1945, "user18", Roles.MEMBER, LocalDateTime.now()), + MALE_80("user19", Gender.MALE, 1935, "user19", Roles.MEMBER, LocalDateTime.now()), + FEMALE_80("user20", Gender.FEMALE, 1935, "user20", Roles.MEMBER, LocalDateTime.now()), + MALE_OVER_90("user21", Gender.MALE, 1925, "user21", Roles.MEMBER, LocalDateTime.now()), + FEMALE_OVER_90("user22", Gender.FEMALE, 1925, "user22", Roles.MEMBER, LocalDateTime.now()), ; private final String nickname; private final Gender gender; private final Integer birthYear; private final String socialId; + private final Roles roles; + private final LocalDateTime alarmCheckedAt; - MemberFixtures(final String nickname, final Gender gender, final Integer birthYear, final String socialId) { + MemberFixtures( + final String nickname, + final Gender gender, + final Integer birthYear, + final String socialId, + final Roles roles, + final LocalDateTime alarmCheckedAt + ) { this.nickname = nickname; this.gender = gender; this.birthYear = birthYear; this.socialId = socialId; + this.roles = roles; + this.alarmCheckedAt = alarmCheckedAt; } public Member get() { @@ -47,6 +60,8 @@ public Member get() { .birthYear(birthYear) .socialType(SocialType.KAKAO) .socialId(socialId) + .roles(roles) + .alarmCheckedAt(alarmCheckedAt) .build(); } diff --git a/backend/src/test/java/com/votogether/test/persister/AlarmTestPersister.java b/backend/src/test/java/com/votogether/test/persister/AlarmTestPersister.java new file mode 100644 index 000000000..40a023a42 --- /dev/null +++ b/backend/src/test/java/com/votogether/test/persister/AlarmTestPersister.java @@ -0,0 +1,73 @@ +package com.votogether.test.persister; + +import com.votogether.domain.alarm.entity.Alarm; +import com.votogether.domain.alarm.entity.vo.AlarmType; +import com.votogether.domain.alarm.repository.AlarmRepository; +import com.votogether.domain.member.entity.Member; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Persister +public class AlarmTestPersister { + + private final AlarmRepository alarmRepository; + private final MemberTestPersister memberTestPersister; + + public AlarmBuilder builder() { + return new AlarmBuilder(); + } + + public final class AlarmBuilder { + + private Member member; + private AlarmType alarmType; + private String commentWriterNickname; + private Long targetId; + private String detail; + private boolean isChecked; + + public AlarmBuilder member(Member member) { + this.member = member; + return this; + } + + public AlarmBuilder alarmType(AlarmType alarmType) { + this.alarmType = alarmType; + return this; + } + + public AlarmBuilder commentWriterNickname(String commentWriterNickname) { + this.commentWriterNickname = commentWriterNickname; + return this; + } + + public AlarmBuilder targetId(Long targetId) { + this.targetId = targetId; + return this; + } + + public AlarmBuilder detail(String detail) { + this.detail = detail; + return this; + } + + public AlarmBuilder isChecked(boolean isChecked) { + this.isChecked = isChecked; + return this; + } + + public Alarm save() { + Alarm alarm = Alarm.builder() + .member(member == null ? memberTestPersister.builder().save() : member) + .alarmType(alarmType == null ? AlarmType.COMMENT : alarmType) + .commentWriterNickname(commentWriterNickname == null ? "nickname" : commentWriterNickname) + .targetId(targetId == null ? 1L : targetId) + .detail(detail == null ? "detail" : detail) + .isChecked(false) + .build(); + return alarmRepository.save(alarm); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/test/persister/MemberMetricTestPersister.java b/backend/src/test/java/com/votogether/test/persister/MemberMetricTestPersister.java new file mode 100644 index 000000000..27b805cba --- /dev/null +++ b/backend/src/test/java/com/votogether/test/persister/MemberMetricTestPersister.java @@ -0,0 +1,58 @@ +package com.votogether.test.persister; + +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.entity.MemberMetric; +import com.votogether.domain.member.repository.MemberMetricRepository; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Persister +public class MemberMetricTestPersister { + + private final MemberMetricRepository memberMetricRepository; + private final MemberTestPersister memberTestPersister; + + public MemberMetricBuilder builder() { + return new MemberMetricBuilder(); + } + + public final class MemberMetricBuilder { + + private Member member; + private long postCount; + private long voteCount; + private long score; + + public MemberMetricBuilder member(Member member) { + this.member = member; + return this; + } + + public MemberMetricBuilder postCount(long postCount) { + this.postCount = postCount; + return this; + } + + public MemberMetricBuilder voteCount(long voteCount) { + this.voteCount = voteCount; + return this; + } + + public MemberMetricBuilder score(long score) { + this.score = score; + return this; + } + + public MemberMetric save() { + MemberMetric memberMetric = MemberMetric.builder() + .member(member == null ? memberTestPersister.builder().save() : member) + .postCount(postCount) + .voteCount(voteCount) + .score(score) + .build(); + return memberMetricRepository.save(memberMetric); + } + + } + +} diff --git a/backend/src/test/java/com/votogether/test/persister/MemberTestPersister.java b/backend/src/test/java/com/votogether/test/persister/MemberTestPersister.java index d446cc16e..ec549908e 100644 --- a/backend/src/test/java/com/votogether/test/persister/MemberTestPersister.java +++ b/backend/src/test/java/com/votogether/test/persister/MemberTestPersister.java @@ -2,8 +2,10 @@ import com.votogether.domain.member.entity.Member; import com.votogether.domain.member.entity.vo.Gender; +import com.votogether.domain.member.entity.vo.Roles; import com.votogether.domain.member.entity.vo.SocialType; import com.votogether.domain.member.repository.MemberRepository; +import java.time.LocalDateTime; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.RandomStringUtils; @@ -24,6 +26,8 @@ public final class MemberBuilder { private Integer birthYear; private SocialType socialType; private String socialId; + private Roles roles; + private LocalDateTime alarmCheckedAt; public MemberBuilder nickname(String nickname) { this.nickname = nickname; @@ -50,6 +54,16 @@ public MemberBuilder socialId(String socialId) { return this; } + public MemberBuilder roles(Roles roles) { + this.roles = roles; + return this; + } + + public MemberBuilder alarmCheckedAt(LocalDateTime alarmCheckedAt) { + this.alarmCheckedAt = alarmCheckedAt; + return this; + } + public Member save() { Member member = Member.builder() .nickname(nickname == null ? RandomStringUtils.random(10, true, true) : nickname) @@ -57,6 +71,8 @@ public Member save() { .birthYear(birthYear == null ? 1995 : birthYear) .socialType(socialType == null ? SocialType.KAKAO : socialType) .socialId(socialId == null ? RandomStringUtils.random(10, true, true) : socialId) + .roles(roles == null ? Roles.MEMBER : roles) + .alarmCheckedAt(alarmCheckedAt == null ? LocalDateTime.now() : alarmCheckedAt) .build(); return memberRepository.save(member); } diff --git a/backend/src/test/java/com/votogether/test/persister/PostTestPersister.java b/backend/src/test/java/com/votogether/test/persister/PostTestPersister.java index 92c67df63..838519596 100644 --- a/backend/src/test/java/com/votogether/test/persister/PostTestPersister.java +++ b/backend/src/test/java/com/votogether/test/persister/PostTestPersister.java @@ -45,6 +45,7 @@ public final class PostBuilder { private Member writer; private String title; private String content; + private long voteCount; private LocalDateTime deadline; private boolean isHidden; @@ -63,6 +64,11 @@ public PostBuilder content(String content) { return this; } + public PostBuilder voteCount(long voteCount) { + this.voteCount = voteCount; + return this; + } + public PostBuilder deadline(LocalDateTime deadline) { this.deadline = deadline; return this; @@ -78,6 +84,7 @@ public Post save() { .writer(writer == null ? memberTestPersister.builder().save() : writer) .title(title == null ? "title" : title) .content(content == null ? "content" : content) + .voteCount(voteCount) .deadline(deadline == null ? LocalDateTime.now().plusDays(14) : deadline) .build(); if (isHidden) { @@ -145,6 +152,7 @@ public final class PostOptionBuilder { private int sequence; private String content; private String imageUrl; + private long voteCount; public PostOptionBuilder post(Post post) { this.post = post; @@ -166,12 +174,18 @@ public PostOptionBuilder imageUrl(String imageUrl) { return this; } + public PostOptionBuilder voteCount(long voteCount) { + this.voteCount = voteCount; + return this; + } + public PostOption save() { PostOption postOption = PostOption.builder() .post(post == null ? postBuilder().save() : post) .sequence(sequence) .content(content == null ? "content" : content) .imageUrl(imageUrl) + .voteCount(voteCount) .build(); return postOptionRepository.save(postOption); } diff --git a/backend/src/test/java/com/votogether/test/persister/ReportActionAlarmTestPersister.java b/backend/src/test/java/com/votogether/test/persister/ReportActionAlarmTestPersister.java new file mode 100644 index 000000000..62d56421e --- /dev/null +++ b/backend/src/test/java/com/votogether/test/persister/ReportActionAlarmTestPersister.java @@ -0,0 +1,66 @@ +package com.votogether.test.persister; + +import com.votogether.domain.alarm.entity.ReportActionAlarm; +import com.votogether.domain.alarm.repository.ReportActionAlarmRepository; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.report.entity.vo.ReportType; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Persister +public class ReportActionAlarmTestPersister { + + private final ReportActionAlarmRepository reportActionAlarmRepository; + private final MemberTestPersister memberTestPersister; + + public ReportActionAlarmBuilder builder() { + return new ReportActionAlarmBuilder(); + } + + public final class ReportActionAlarmBuilder { + + private Member member; + private ReportType reportType; + private String target; + private String reasons; + private boolean isChecked; + + public ReportActionAlarmBuilder member(Member member) { + this.member = member; + return this; + } + + public ReportActionAlarmBuilder reportType(ReportType reportType) { + this.reportType = reportType; + return this; + } + + public ReportActionAlarmBuilder target(String target) { + this.target = target; + return this; + } + + public ReportActionAlarmBuilder reasons(String reasons) { + this.reasons = reasons; + return this; + } + + public ReportActionAlarmBuilder isChecked(boolean isChecked) { + this.isChecked = isChecked; + return this; + } + + public ReportActionAlarm save() { + ReportActionAlarm reportActionAlarm = ReportActionAlarm.builder() + .member(member == null ? memberTestPersister.builder().save() : member) + .reportType(reportType == null ? ReportType.NICKNAME : reportType) + .target(target == null ? "target" : target) + .reasons(reasons == null ? "reasons" : reasons) + .isChecked(false) + .build(); + return reportActionAlarmRepository.save(reportActionAlarm); + } + + } + +} diff --git a/backend/src/test/resources/application.yml b/backend/src/test/resources/application.yml index 16f7bfb53..6bc5d992f 100644 --- a/backend/src/test/resources/application.yml +++ b/backend/src/test/resources/application.yml @@ -45,6 +45,10 @@ server: max-connections: 8192 threads: max: 200 + hikari: + maximumPoolSize: 10 + connectionTimeout: 30000 + maxLifetime: 180000 springdoc: swagger-ui: diff --git a/backend/src/test/resources/truncate.sql b/backend/src/test/resources/truncate.sql new file mode 100644 index 000000000..2eeeeb585 --- /dev/null +++ b/backend/src/test/resources/truncate.sql @@ -0,0 +1,16 @@ +SET FOREIGN_KEY_CHECKS = 0; + +TRUNCATE TABLE vote; +TRUNCATE TABLE post_content_image; +TRUNCATE TABLE post_category; +TRUNCATE TABLE member_category; +TRUNCATE TABLE report; +TRUNCATE TABLE comment; +TRUNCATE TABLE post_option; +TRUNCATE TABLE post; +TRUNCATE TABLE member; +TRUNCATE TABLE category; +TRUNCATE TABLE alarm; +TRUNCATE TABLE report_action_alarm; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/frontend/__test__/api/notice.test.ts b/frontend/__test__/api/notice.test.ts new file mode 100644 index 000000000..e970b1f04 --- /dev/null +++ b/frontend/__test__/api/notice.test.ts @@ -0,0 +1,80 @@ +import { NoticeRequest } from '@type/notice'; + +import { + createNotice, + deleteNotice, + getBannerNotice, + getNoticeDetail, + getNoticeList, + modifyNotice, +} from '@api/notice'; + +import { MOCK_TRANSFORM_NOTICE, MOCK_TRANSFORM_NOTICE_LIST } from '@mocks/mockData/notice'; +import { MOCK_NOTICE_TEST } from '@mocks/notice'; + +describe('서버와 통신하여 공지사항 관련된 api를 통신할 수 있어야 한다. ', () => { + test('공지사항을 생성한다.', async () => { + const data: NoticeRequest = { + title: '갤럭시', + content: '공지사항입니다', + deadline: '2023-10-12 15:13', + bannerTitle: '아이폰', + bannerSubtitle: '공지사항입니다', + }; + + await createNotice(data); + + const result = MOCK_NOTICE_TEST; + + expect(result).toBe(data.title); + }); + + test('배너 공지 사항을 조회한다.', async () => { + const result = await getBannerNotice(); + + expect(result).toEqual(MOCK_TRANSFORM_NOTICE); + }); + + test('공지 사항 목록을 조회한다.', async () => { + const result = await getNoticeList(0); + + expect(result).toEqual(MOCK_TRANSFORM_NOTICE_LIST); + }); + + test('공지 사항의 상세 내용을 조회한다.', async () => { + const result = await getNoticeDetail(1); + + expect(result).toEqual(MOCK_TRANSFORM_NOTICE); + }); + + test('공지 사항의 createdAt을 날짜만 받도록 변환시킨다.', async () => { + const createdAt = '2023-08-19 08:23'; + const result = '2023-08-19'; + + expect(createdAt.split(' ')[0]).toBe(result); + }); + + test('공지 사항을 수정한다.', async () => { + const data: NoticeRequest = { + title: '아이폰입니다', + content: '공지사항입니다', + deadline: '2023-10-12 15:13', + bannerTitle: '아이폰', + bannerSubtitle: '공지사항입니다', + }; + + await modifyNotice({ noticeId: 0, notice: data }); + + const result = MOCK_NOTICE_TEST; + + expect(result).toBe(data.title); + }); + + test('공지 사항을 삭제한다.', async () => { + await deleteNotice(1); + + const result = MOCK_NOTICE_TEST; + + expect(result).toBe('삭제된 공지사항'); + }); +}); diff --git a/frontend/__test__/api/user.test.ts b/frontend/__test__/api/user.test.ts index 03aed922d..13e712386 100644 --- a/frontend/__test__/api/user.test.ts +++ b/frontend/__test__/api/user.test.ts @@ -10,7 +10,7 @@ import { REFRESH_EXPIRATION_TIME } from '@constants/token'; import { getCookie, setCookie } from '@utils/cookie'; -import { MOCK_USER_INFO } from '@mocks/mockData/user'; +import { MOCK_ADMIN_USER_INFO, MOCK_USER_INFO } from '@mocks/mockData/user'; describe('서버와 통신하여 유저의 정보를 불러올 수 있어야 한다.', () => { const isLoggedIn = true; @@ -25,15 +25,23 @@ describe('서버와 통신하여 유저의 정보를 불러올 수 있어야 한 test('유저의 정보를 불러온다', async () => { const data = await getUserInfo(isLoggedIn); - expect(data).toEqual(transformUserInfoResponse(MOCK_USER_INFO)); + expect(data).toEqual(transformUserInfoResponse(MOCK_ADMIN_USER_INFO)); }); - test('클라이언트에서 사용하는 유저 정보 API 명세가 [nickname, gender, birthYear, postCount, voteCount]으로 존재해야한다', async () => { + test('클라이언트에서 사용하는 유저 정보 API 명세가 [nickname, gender, birthYear, postCount, voteCount, hasLatestAlarm, role]으로 존재해야한다', async () => { const data = await getUserInfo(isLoggedIn); const userInfoKeys = Object.keys(data ?? {}); - expect(userInfoKeys).toEqual(['nickname', 'gender', 'birthYear', 'postCount', 'voteCount']); + expect(userInfoKeys).toEqual([ + 'nickname', + 'gender', + 'birthYear', + 'postCount', + 'voteCount', + 'hasLatestAlarm', + 'role', + ]); }); test('유저의 닉네임을 수정한다', async () => { diff --git a/frontend/__test__/convertTextToUrl.test.ts b/frontend/__test__/convertTextToUrl.test.ts new file mode 100644 index 000000000..d74c52a65 --- /dev/null +++ b/frontend/__test__/convertTextToUrl.test.ts @@ -0,0 +1,36 @@ +import { convertTextToUrl } from '@utils/post/convertTextToUrl'; + +test.each([ + ['www.naver.com 이걸 어째', '[[www.naver.com]] 이걸 어째'], + [ + '반갑다 https://github.com/woowacourse-teams/2023-votogether/issues/703 임', + '반갑다 [[https://github.com/woowacourse-teams/2023-votogether/issues/703]] 임', + ], + ['안녕 wwwww.naver.com', '안녕 wwwww.naver.com'], + ['http://localhost:3000/ 피카츄', '[[http://localhost:3000/]] 피카츄'], + [ + 'http://localhost:3000/http://localhost:3000/ 피카츄', + '[[http://localhost:3000/http://localhost:3000/]] 피카츄', + ], + ['www.naver.com', '[[www.naver.com]]'], + ['[[www.naver.com]] www.naver.com', '[[www.naver.com]] [[www.naver.com]]'], + [ + '[[http://localhost:3000/]] http://localhost:3000/', + '[[http://localhost:3000/]] [[http://localhost:3000/]]', + ], + [ + '[[https://votogether.com/ranking]] https://www.naver.com/', + '[[https://votogether.com/ranking]] [[https://www.naver.com/]]', + ], + [ + 'www.naver.com www.naver.com www.naver.com https://www.npmjs.com/package/dotenv-webpack', + '[[www.naver.com]] [[www.naver.com]] [[www.naver.com]] [[https://www.npmjs.com/package/dotenv-webpack]]', + ], +])( + 'convertTextToUrl 함수에서 링크가 포함된 문자를 입력했을 때 문자에서 링크는 [[]]로 감싸서 반환한다.', + (word, expectedWord) => { + const result = convertTextToUrl(word); + + expect(result).toBe(expectedWord); + } +); diff --git a/frontend/__test__/hooks/query/notice/useBannerNotice.test.tsx b/frontend/__test__/hooks/query/notice/useBannerNotice.test.tsx new file mode 100644 index 000000000..56910cc65 --- /dev/null +++ b/frontend/__test__/hooks/query/notice/useBannerNotice.test.tsx @@ -0,0 +1,24 @@ +import React, { ReactNode } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { renderHook, waitFor } from '@testing-library/react'; + +import { useBannerNotice } from '@hooks'; + +import { MOCK_TRANSFORM_NOTICE } from '@mocks/mockData/notice'; + +const queryClient = new QueryClient(); + +const wrapper = ({ children }: { children: ReactNode }) => ( + {children} +); + +describe('배너 공지사항을 불러오는지 확인한다.', () => { + test('배너 공지사항을 확인한다', async () => { + const { result } = renderHook(() => useBannerNotice(), { + wrapper, + }); + + await waitFor(() => expect(result.current.data).toEqual(MOCK_TRANSFORM_NOTICE)); + }); +}); diff --git a/frontend/__test__/hooks/query/notice/useCreateNotice.test.tsx b/frontend/__test__/hooks/query/notice/useCreateNotice.test.tsx new file mode 100644 index 000000000..191b56bfb --- /dev/null +++ b/frontend/__test__/hooks/query/notice/useCreateNotice.test.tsx @@ -0,0 +1,40 @@ +import React, { ReactNode } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { renderHook, waitFor } from '@testing-library/react'; + +import { NoticeRequest } from '@type/notice'; + +import { useCreateNotice } from '@hooks'; + +import { MOCK_NOTICE_TEST } from '@mocks/notice'; + +const queryClient = new QueryClient(); + +const wrapper = ({ children }: { children: ReactNode }) => ( + {children} +); + +describe('공지 사항을 생성하는 지 확인한다.', () => { + test('공지 사항을 생성한다.', async () => { + const data: NoticeRequest = { + title: '갤럭시', + content: '공지사항입니다', + deadline: '2023-10-12 15:13', + bannerTitle: '아이폰', + bannerSubtitle: '공지사항입니다', + }; + + const { result } = renderHook(() => useCreateNotice(), { + wrapper, + }); + + const { mutate } = result.current; + + await waitFor(() => { + mutate(data); + + expect(MOCK_NOTICE_TEST).toBe(data.title); + }); + }); +}); diff --git a/frontend/__test__/hooks/query/notice/useDeleteNotice.test.tsx b/frontend/__test__/hooks/query/notice/useDeleteNotice.test.tsx new file mode 100644 index 000000000..a5df8e488 --- /dev/null +++ b/frontend/__test__/hooks/query/notice/useDeleteNotice.test.tsx @@ -0,0 +1,30 @@ +import React, { ReactNode } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { renderHook, waitFor } from '@testing-library/react'; + +import { useDeleteNotice } from '@hooks'; + +import { MOCK_NOTICE_TEST } from '@mocks/notice'; + +const queryClient = new QueryClient(); + +const wrapper = ({ children }: { children: ReactNode }) => ( + {children} +); + +describe('요청을 통해 공지 사항을 삭제하는 지 확인한다.', () => { + test('공지 사항을 삭제한다.', async () => { + const { result } = renderHook(() => useDeleteNotice(), { + wrapper, + }); + + const { mutate } = result.current; + + await waitFor(() => { + mutate(1); + + expect(MOCK_NOTICE_TEST).toBe('삭제된 공지사항'); + }); + }); +}); diff --git a/frontend/__test__/hooks/query/notice/useModifyNotice.test.tsx b/frontend/__test__/hooks/query/notice/useModifyNotice.test.tsx new file mode 100644 index 000000000..6eadc35f5 --- /dev/null +++ b/frontend/__test__/hooks/query/notice/useModifyNotice.test.tsx @@ -0,0 +1,40 @@ +import React, { ReactNode } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { renderHook, waitFor } from '@testing-library/react'; + +import { NoticeRequest } from '@type/notice'; + +import { useModifyNotice } from '@hooks'; + +import { MOCK_NOTICE_TEST } from '@mocks/notice'; + +const queryClient = new QueryClient(); + +const wrapper = ({ children }: { children: ReactNode }) => ( + {children} +); + +describe('요청을 통해 공지 사항을 수정하는 지 확인한다.', () => { + test('공지 사항을 생성한다.', async () => { + const data: NoticeRequest = { + title: '아이폰입니다', + content: '공지사항입니다', + deadline: '2023-10-12 15:13', + bannerTitle: '아이폰', + bannerSubtitle: '공지사항입니다', + }; + + const { result } = renderHook(() => useModifyNotice(), { + wrapper, + }); + + const { mutate } = result.current; + + await waitFor(() => { + mutate({ notice: data, noticeId: 1 }); + + expect(MOCK_NOTICE_TEST).toEqual(data.title); + }); + }); +}); diff --git a/frontend/__test__/hooks/query/notice/useNoticeDetail.test.tsx b/frontend/__test__/hooks/query/notice/useNoticeDetail.test.tsx new file mode 100644 index 000000000..6f056de28 --- /dev/null +++ b/frontend/__test__/hooks/query/notice/useNoticeDetail.test.tsx @@ -0,0 +1,26 @@ +import React, { ReactNode } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { renderHook, waitFor } from '@testing-library/react'; + +import { useNoticeDetail } from '@hooks'; + +import { MOCK_TRANSFORM_NOTICE } from '@mocks/mockData/notice'; + +const queryClient = new QueryClient(); + +const wrapper = ({ children }: { children: ReactNode }) => ( + {children} +); + +describe('공지 사항 상세 정보를 불러오는 지 확인한다.', () => { + test('공지 사항 상세 정보를 불러온다.', async () => { + const { result } = renderHook(() => useNoticeDetail(1), { + wrapper, + }); + + await waitFor(() => { + expect(result.current.data).toEqual(MOCK_TRANSFORM_NOTICE); + }); + }); +}); diff --git a/frontend/__test__/hooks/query/notice/usePagedNoticeList.test.tsx b/frontend/__test__/hooks/query/notice/usePagedNoticeList.test.tsx new file mode 100644 index 000000000..75e65f50f --- /dev/null +++ b/frontend/__test__/hooks/query/notice/usePagedNoticeList.test.tsx @@ -0,0 +1,59 @@ +import React, { ReactNode } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { renderHook, waitFor } from '@testing-library/react'; +import { act } from 'react-dom/test-utils'; + +import { usePagedNoticeList } from '@hooks'; + +import { MOCK_TRANSFORM_NOTICE_LIST } from '@mocks/mockData/notice'; + +const queryClient = new QueryClient(); + +const wrapper = ({ children }: { children: ReactNode }) => ( + {children} +); + +describe('페이지 버튼을 눌러 공지 사항 리스트를 불러오는 지 확인한다.', () => { + test('초기 설정으로는 0 페이지를 불러온다.', async () => { + const { result } = renderHook(() => usePagedNoticeList(), { + wrapper, + }); + + waitFor(() => { + expect(result.current.page).toEqual(null); // test fail + }); + }); + + test('초기 페이지를 인자를 넣어 설정할 수 있다.', async () => { + const { result } = renderHook(() => usePagedNoticeList(5), { + wrapper, + }); + + waitFor(() => { + expect(result.current.page).toEqual(null); // 원래 null 이 아닌 5 이었음 + }); + }); + + test('공지 사항 목록 0 페이지를 불러온다.', async () => { + const { result } = renderHook(() => usePagedNoticeList(), { + wrapper, + }); + + await waitFor(() => { + expect(result.current.data).toEqual(MOCK_TRANSFORM_NOTICE_LIST); + }); + }); + + test('공지 사항 목록 0 페이지를 불러오고 페이지 설정을 통해 3페이지를 불러온다. 페이지 설정 버튼을 누른다면 해당 페이지의 데이터 1개를 배열로 보내준다.', async () => { + const { result } = renderHook(() => usePagedNoticeList(), { + wrapper, + }); + + act(() => { + result.current.setPage(3); + + expect(result.current.data).toEqual(MOCK_TRANSFORM_NOTICE_LIST); + }); + }); +}); diff --git a/frontend/__test__/hooks/query/notice/useStackedNoticeList.test.tsx b/frontend/__test__/hooks/query/notice/useStackedNoticeList.test.tsx new file mode 100644 index 000000000..96a29e8c1 --- /dev/null +++ b/frontend/__test__/hooks/query/notice/useStackedNoticeList.test.tsx @@ -0,0 +1,42 @@ +import React, { ReactNode } from 'react'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { renderHook, waitFor } from '@testing-library/react'; +import { act } from 'react-dom/test-utils'; + +import { useStackedNoticeList } from '@hooks'; + +import { MOCK_TRANSFORM_NOTICE_LIST } from '@mocks/mockData/notice'; + +const queryClient = new QueryClient(); + +const wrapper = ({ children }: { children: ReactNode }) => ( + {children} +); + +describe('더보기 버튼을 눌러 공지 사항 리스트 데이터를 불러와서 여러 페이지의 데이터를 가지고 있는 지 확인한다..', () => { + test('공지 사항 목록 0 페이지를 불러온다.', async () => { + const { result } = renderHook(() => useStackedNoticeList(), { + wrapper, + }); + + await waitFor(() => { + expect(result.current.data?.pages[0]).toEqual(MOCK_TRANSFORM_NOTICE_LIST); + }); + }); + + test('공지 사항 목록 0 페이지를 불러온다. 그리고 다음 페이지를 불러온다', async () => { + const { result } = renderHook(() => useStackedNoticeList(), { + wrapper, + }); + + act(() => { + result.current.fetchNextPage(); + }); + + await waitFor(() => { + expect(result.current.data?.pages[0]).toEqual(MOCK_TRANSFORM_NOTICE_LIST); + expect(result.current.data?.pages[1]).toEqual(MOCK_TRANSFORM_NOTICE_LIST); + }); + }); +}); diff --git a/frontend/__test__/hooks/usePagination.test.tsx b/frontend/__test__/hooks/usePagination.test.tsx new file mode 100644 index 000000000..f0ed18de5 --- /dev/null +++ b/frontend/__test__/hooks/usePagination.test.tsx @@ -0,0 +1,131 @@ +// import React, { ReactNode } from 'react'; + +// import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +// import { renderHook, waitFor } from '@testing-library/react'; +// import { act } from 'react-dom/test-utils'; + +// import { usePagination } from '@hooks'; + +// const queryClient = new QueryClient(); + +// const wrapper = ({ children }: { children: ReactNode }) => ( +// {children} +// ); + +describe('페이지 버튼을 눌러 공지 사항 리스트를 불러오는 지 확인한다.', () => { + test('임시 테스트', () => { + const tmp = 1; + expect(tmp).toBe(1); + }); + // test('초기 설정으로는 0 페이지를 불러온다.', async () => { + // const { result } = renderHook(() => usePagination(), { + // wrapper, + // }); + + // waitFor(() => { + // expect(result.current.page).toBe(0); + // }); + // }); + + // test('초기 페이지를 인자를 넣어 설정할 수 있다.', async () => { + // const { result } = renderHook(() => usePagination(5), { + // wrapper, + // }); + + // waitFor(() => { + // expect(result.current.page).toBe(5); + // }); + // }); + + // test('현재 페이지를 3으로 설정했을 때 3페이지를 데이터만 불러온다. 클라이언트 측에서 3으로 설정했어도 서버로는 2를 보내야 하기 때문에 현재 페이지는 2로 설정된다.', async () => { + // const { result } = renderHook(() => usePagination(), { + // wrapper, + // }); + + // act(() => { + // result.current.setPage(3); + // }); + + // waitFor(() => { + // expect(result.current.page).toBe(2); + // }); + // }); + + // test.each([ + // [0, 5, 5], + // [0, 2, 2], + // [0, 8, 8], + // [16, 8, 24], + // ])( + // '현재 페이지가 %s이고, 사이즈가 %s라면 다음 페이지를 불러올 때 현재 페이지의 시작 페이지 번호 + %s 을 하여 불러온다.', + // (currentPage, size, expected) => { + // const { result } = renderHook(() => usePagination(currentPage, size), { + // wrapper, + // }); + + // const totalPage = 10; + + // waitFor(() => { + // result.current.fetchNextPage(totalPage); + + // expect(result.current.page).toBe(expected); + // }); + // } + // ); + + // test.each([ + // [0, 0], + // [7, 0], + // [7, 5], + // [12, 10], + // [15, 15], + // ])( + // '현재 페이지가 %s이고, 이전의 페이지를 불러올 때 현재 시작 페이지 - 5을 한 값이 %s이다.', + // (currentPage, expected) => { + // const { result } = renderHook(() => usePagination(currentPage), { + // wrapper, + // }); + + // waitFor(() => { + // result.current.fetchPrevPage(); + + // expect(result.current.page).toBe(expected); + // }); + // } + // ); + + // test.each([ + // [0, 6, true], + // [5, 15, true], + // [5, 10, false], + // [5, 5, false], + // [0, 5, false], + // ])( + // '현재 페이지 %s이고, 전체 페이지가 %s일 때 결과는 %s이다. 전체 페이지가 현재 페이지 +5를 한 값보다 크다면 true, 작다면 false를 반환한다.', + // (currentPage, totalPage, expected) => { + // const { result } = renderHook(() => usePagination(currentPage), { + // wrapper, + // }); + + // expect(result.current.checkNextPage(totalPage)).toBe(expected); + // } + // ); + + // test.each([ + // [6, 0, [1, 2, 3, 4, 5]], + // [15, 14, [11, 12, 13, 14, 15]], + // [4, 3, [1, 2, 3, 4]], + // [23, 20, [21, 22, 23]], + // [2, 0, [1, 2]], + // [10, 3, [1, 2, 3, 4, 5]], + // ])( + // '전체 페이지가 %s이고, 현재 페이지가 %s라면 페이지 리스트는 %s를 반환한다. 현재 페이지는 0,1,2 와 같이 0으로 시작한다.', + // (totalPage, currentPage, expected) => { + // const { result } = renderHook(() => usePagination(currentPage), { + // wrapper, + // }); + + // expect(result.current.getPageNumberList(totalPage)).toEqual(expected); + // } + // ); +}); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index ada395d79..1c82adfea 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -57,6 +57,7 @@ "styled-components": "^6.0.2", "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "^5.1.6", + "votogether-design-system": "^0.0.14", "webpack": "^5.88.1", "webpack-bundle-analyzer": "^4.9.1", "webpack-cli": "^5.1.4", @@ -67,18 +68,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@ampproject/remapping": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -88,10 +87,9 @@ } }, "node_modules/@aw-web-design/x-default-browser": { - "version": "1.4.88", - "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.88.tgz", - "integrity": "sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==", + "version": "1.4.126", "dev": true, + "license": "MIT", "dependencies": { "default-browser-id": "3.0.0" }, @@ -101,9 +99,8 @@ }, "node_modules/@babel/cli": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.6.tgz", - "integrity": "sha512-Be3/RfEDmkMRGT1+ru5nTkfcvWz5jDOYg1V9rXqTz2u9Qt96O1ryboGvxVBp7wOnYWDB8DNHIWb6DThrpudfOw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "commander": "^4.0.1", @@ -130,18 +127,16 @@ }, "node_modules/@babel/cli/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, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/@babel/cli/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -159,55 +154,52 @@ }, "node_modules/@babel/cli/node_modules/slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.13", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", + "version": "7.23.2", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", - "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.6", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -217,11 +209,15 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/eslint-parser": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.6.tgz", - "integrity": "sha512-KAom7E7d6bAh5/PflF3luynWlDLOIqfX+ZJcL0LRs6/6rtXJmJxPiWuIGfxNPtcWdtQ5lSSJbKbQlz/c/R60Ng==", "dev": true, + "license": "MIT", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "@nicolo-ribaudo/semver-v6": "^6.3.3", @@ -237,20 +233,18 @@ }, "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -261,9 +255,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -273,9 +266,8 @@ }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -284,39 +276,34 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz", - "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -327,9 +314,8 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz", - "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@nicolo-ribaudo/semver-v6": "^6.3.3", @@ -343,10 +329,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", - "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", + "version": "0.4.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -355,26 +340,24 @@ "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -382,9 +365,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -393,53 +375,49 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@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.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -449,23 +427,20 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "version": "7.22.20", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -475,27 +450,25 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "version": "7.22.20", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -505,9 +478,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -517,9 +489,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -529,68 +500,61 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "version": "7.22.20", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.20", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -598,10 +562,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", - "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", + "version": "7.23.0", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -610,10 +573,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "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.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -625,14 +587,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -643,9 +604,8 @@ }, "node_modules/@babel/plugin-external-helpers": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.22.5.tgz", - "integrity": "sha512-ngnNEWxmykPk82mH4ajZT0qTztr3Je6hrMuKAslZVM8G1YZTENJSYwrIGtt6KOtznug3exmAtF4so/nPqJuA4A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -656,29 +616,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -690,28 +631,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, "node_modules/@babel/plugin-proposal-decorators": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.6.tgz", - "integrity": "sha512-cgskJ9W7kxTk/wBM16JNHhlTkeyDK6slMJg1peaI4LM3y2HtTv+6I85sW9UXSUZilndIBvDBETA1BRoOYdxWKw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -726,75 +649,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@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-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@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-proposal-nullish-coalescing-operator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -808,9 +666,8 @@ }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -824,9 +681,8 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", @@ -841,27 +697,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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-proposal-optional-chaining": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -876,9 +715,8 @@ }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -892,9 +730,8 @@ }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -902,27 +739,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -932,9 +752,8 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -944,9 +763,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -956,9 +774,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -971,9 +788,8 @@ }, "node_modules/@babel/plugin-syntax-decorators": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", - "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -986,9 +802,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -998,9 +813,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1010,9 +824,8 @@ }, "node_modules/@babel/plugin-syntax-flow": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1025,9 +838,8 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1040,9 +852,8 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1055,9 +866,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1067,9 +877,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1079,9 +888,8 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1094,9 +902,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1106,9 +913,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1118,9 +924,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1130,9 +935,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1142,9 +946,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1154,9 +957,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1166,9 +968,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1181,9 +982,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1196,9 +996,8 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1211,9 +1010,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1227,9 +1025,8 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1241,14 +1038,13 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1260,9 +1056,8 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1277,9 +1072,8 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1291,10 +1085,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1307,9 +1100,8 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1322,12 +1114,11 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1339,18 +1130,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1363,9 +1153,8 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.5" @@ -1378,10 +1167,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1394,9 +1182,8 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1410,9 +1197,8 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1424,10 +1210,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1441,9 +1226,8 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1456,10 +1240,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1473,9 +1256,8 @@ }, "node_modules/@babel/plugin-transform-flow-strip-types": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-flow": "^7.22.5" @@ -1488,10 +1270,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1504,9 +1285,8 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.5", "@babel/helper-function-name": "^7.22.5", @@ -1520,10 +1300,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1537,9 +1316,8 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1551,10 +1329,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1568,9 +1345,8 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1582,12 +1358,11 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1598,12 +1373,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1615,15 +1389,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1634,9 +1407,8 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1650,9 +1422,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1666,9 +1437,8 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1680,10 +1450,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1696,10 +1465,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1712,16 +1480,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1732,9 +1499,8 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5" @@ -1747,10 +1513,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1763,10 +1528,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1780,10 +1544,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1796,9 +1559,8 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1811,13 +1573,12 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "version": "7.22.11", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -1830,9 +1591,8 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1845,9 +1605,8 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1860,9 +1619,8 @@ }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", @@ -1879,9 +1637,8 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.22.5" }, @@ -1894,9 +1651,8 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1909,13 +1665,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "version": "7.22.10", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1926,9 +1681,8 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1941,9 +1695,8 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.6.tgz", - "integrity": "sha512-+AGkst7Kqq3QUflKGkhWWMRb9vaKamoreNmYc+sjsIpOp+TsyU0exhp3RlwjQa/HdlKkPt3AMDwfg8Hpt9Vwqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1961,9 +1714,8 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1976,9 +1728,8 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1992,9 +1743,8 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2007,9 +1757,8 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2022,9 +1771,8 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2037,9 +1785,8 @@ }, "node_modules/@babel/plugin-transform-typescript": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", - "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.5", @@ -2054,10 +1801,9 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "version": "7.22.10", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2070,9 +1816,8 @@ }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -2086,9 +1831,8 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -2102,9 +1846,8 @@ }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -2117,17 +1860,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.6.tgz", - "integrity": "sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/compat-data": "^7.23.2", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", "@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", @@ -2148,60 +1890,60 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.23.2", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.23.0", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.23.0", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.23.0", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-modules-systemjs": "^7.23.0", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", "@babel/plugin-transform-shorthand-properties": "^7.22.5", "@babel/plugin-transform-spread": "^7.22.5", "@babel/plugin-transform-sticky-regex": "^7.22.5", "@babel/plugin-transform-template-literals": "^7.22.5", "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", "@babel/plugin-transform-unicode-property-regex": "^7.22.5", "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.31.0" + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.23.0", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -2212,9 +1954,8 @@ }, "node_modules/@babel/preset-flow": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", - "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", @@ -2228,26 +1969,22 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", - "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", @@ -2265,9 +2002,8 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", - "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", @@ -2283,10 +2019,9 @@ } }, "node_modules/@babel/register": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", - "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -2303,9 +2038,8 @@ }, "node_modules/@babel/register/node_modules/find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -2317,9 +2051,8 @@ }, "node_modules/@babel/register/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -2329,9 +2062,8 @@ }, "node_modules/@babel/register/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -2342,9 +2074,8 @@ }, "node_modules/@babel/register/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -2354,18 +2085,16 @@ }, "node_modules/@babel/register/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/register/node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^3.0.0" }, @@ -2375,15 +2104,13 @@ }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/runtime": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2392,33 +2119,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", - "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", + "version": "7.23.2", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.22.6", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2427,13 +2152,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2442,21 +2166,18 @@ }, "node_modules/@base2/pretty-print-object": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", - "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -2464,99 +2185,45 @@ }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "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==", "dev": true, + "license": "MIT", "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@emotion/unitless": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "peerDependencies": { "react": ">=16.8.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2565,299 +2232,10 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "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, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -2870,18 +2248,16 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2902,9 +2278,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2918,9 +2293,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -2933,30 +2307,60 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/js": { "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@fal-works/esbuild-plugin-global-externals": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz", - "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "dev": true, + "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -2968,9 +2372,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2981,15 +2384,97 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -3003,27 +2488,24 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3034,18 +2516,16 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.0.tgz", - "integrity": "sha512-anb6L1yg7uPQpytNVA5skRaXy3BmrsU8icRhTVNbWdjYWDDfy8M1Kq5HIVRpYoABdbpqsc5Dr+jtu4+qWRQBiQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.0", "@types/node": "*", @@ -3060,9 +2540,8 @@ }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3075,9 +2554,8 @@ }, "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3091,9 +2569,8 @@ }, "node_modules/@jest/console/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3103,24 +2580,21 @@ }, "node_modules/@jest/console/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 + "dev": true, + "license": "MIT" }, "node_modules/@jest/console/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3130,9 +2604,8 @@ }, "node_modules/@jest/core": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.0.tgz", - "integrity": "sha512-5dbMHfY/5R9m8NbgmB3JlxQqooZ/ooPSOiwEQZZ+HODwJTbIu37seVcZNBK29aMdXtjvTRB3f6LCvkKq+r8uQA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.6.0", "@jest/reporters": "^29.6.0", @@ -3177,9 +2650,8 @@ }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3192,9 +2664,8 @@ }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3208,9 +2679,8 @@ }, "node_modules/@jest/core/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3220,24 +2690,21 @@ }, "node_modules/@jest/core/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 + "dev": true, + "license": "MIT" }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/core/node_modules/pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.0", "ansi-styles": "^5.0.0", @@ -3249,9 +2716,8 @@ }, "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3261,15 +2727,13 @@ }, "node_modules/@jest/core/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3279,9 +2743,8 @@ }, "node_modules/@jest/environment": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.0.tgz", - "integrity": "sha512-bUZLYUxYlUIsslBbxII0fq0kr1+friI3Gty+cRLmocGB1jdcAHs7FS8QdCDqedE8q4DZE1g/AJHH6OJZBLGGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.6.0", "@jest/types": "^29.6.0", @@ -3294,9 +2757,8 @@ }, "node_modules/@jest/environment/node_modules/jest-mock": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.0", "@types/node": "*", @@ -3308,9 +2770,8 @@ }, "node_modules/@jest/expect": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-a7pISPW28Q3c0/pLwz4mQ6tbAI+hc8/0CJp9ix6e9U4dQ6TiHQX82CT5DV5BMWaw8bFH4E6zsfZxXdn6Ka23Bw==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.6.0", "jest-snapshot": "^29.6.0" @@ -3321,9 +2782,8 @@ }, "node_modules/@jest/expect-utils": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.0.tgz", - "integrity": "sha512-LLSQQN7oypMSETKoPWpsWYVKJd9LQWmSDDAc4hUQ4JocVC7LAMy9R3ZMhlnLwbcFvQORZnZR7HM893Px6cJhvA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.4.3" }, @@ -3333,9 +2793,8 @@ }, "node_modules/@jest/fake-timers": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.0.tgz", - "integrity": "sha512-nuCU46AsZoskthWSDS2Aj6LARgyNcp5Fjx2qxsO/fPl1Wp1CJ+dBDqs0OkEcJK8FBeV/MbjH5efe79M2sHcV+A==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.0", "@sinonjs/fake-timers": "^10.0.2", @@ -3350,9 +2809,8 @@ }, "node_modules/@jest/fake-timers/node_modules/jest-mock": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.0", "@types/node": "*", @@ -3364,9 +2822,8 @@ }, "node_modules/@jest/globals": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.0.tgz", - "integrity": "sha512-IQQ3hZ2D/hwEwXSMv5GbfhzdH0nTQR3KPYxnuW6gYWbd6+7/zgMz7Okn6EgBbNtJNONq03k5EKA6HqGyzRbpeg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.6.0", "@jest/expect": "^29.6.0", @@ -3379,9 +2836,8 @@ }, "node_modules/@jest/globals/node_modules/jest-mock": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.0", "@types/node": "*", @@ -3393,9 +2849,8 @@ }, "node_modules/@jest/reporters": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.0.tgz", - "integrity": "sha512-dWEq4HI0VvHcAD6XTtyBKKARLytyyWPIy1SvGOcU91106MfvHPdxZgupFwVHd8TFpZPpA3SebYjtwS5BUS76Rw==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.6.0", @@ -3436,9 +2891,8 @@ }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3451,9 +2905,8 @@ }, "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3467,9 +2920,8 @@ }, "node_modules/@jest/reporters/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3479,15 +2931,13 @@ }, "node_modules/@jest/reporters/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 + "dev": true, + "license": "MIT" }, "node_modules/@jest/reporters/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3505,18 +2955,16 @@ }, "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/reporters/node_modules/jest-worker": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.6.0", @@ -3529,9 +2977,8 @@ }, "node_modules/@jest/reporters/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3544,9 +2991,8 @@ }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3556,9 +3002,8 @@ }, "node_modules/@jest/schemas": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -3568,9 +3013,8 @@ }, "node_modules/@jest/source-map": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -3582,9 +3026,8 @@ }, "node_modules/@jest/test-result": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.0.tgz", - "integrity": "sha512-9qLb7xITeyWhM4yatn2muqfomuoCTOhv0QV9i7XiIyYi3QLfnvPv5NeJp5u0PZeutAOROMLKakOkmoAisOr3YQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.6.0", "@jest/types": "^29.6.0", @@ -3597,9 +3040,8 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.0.tgz", - "integrity": "sha512-HYCS3LKRQotKWj2mnA3AN13PPevYZu8MJKm12lzYojpJNnn6kI/3PWmr1At/e3tUu+FHQDiOyaDVuR4EV3ezBw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.6.0", "graceful-fs": "^4.2.9", @@ -3612,9 +3054,8 @@ }, "node_modules/@jest/transform": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.0.tgz", - "integrity": "sha512-bhP/KxPo3e322FJ0nKAcb6WVK76ZYyQd1lWygJzoSqP8SYMSLdxHqP4wnPTI4WvbB8PKPDV30y5y7Tya4RHOBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.0", @@ -3638,9 +3079,8 @@ }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3653,9 +3093,8 @@ }, "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3669,9 +3108,8 @@ }, "node_modules/@jest/transform/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3681,30 +3119,26 @@ }, "node_modules/@jest/transform/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 + "dev": true, + "license": "MIT" }, "node_modules/@jest/transform/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3714,9 +3148,8 @@ }, "node_modules/@jest/transform/node_modules/write-file-atomic": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -3727,9 +3160,8 @@ }, "node_modules/@jest/types": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.0.tgz", - "integrity": "sha512-8XCgL9JhqbJTFnMRjEAO+TuW251+MoMd5BSzLiE3vvzpQ8RlBxy8NoyNkDhs3K3OL3HeVinlOl9or5p7GTeOLg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.0", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3744,9 +3176,8 @@ }, "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3759,9 +3190,8 @@ }, "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3775,9 +3205,8 @@ }, "node_modules/@jest/types/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3787,24 +3216,21 @@ }, "node_modules/@jest/types/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 + "dev": true, + "license": "MIT" }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/types/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3814,9 +3240,8 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3828,27 +3253,24 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "license": "MIT", "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==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -3856,15 +3278,13 @@ }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -3872,27 +3292,23 @@ }, "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@juggle/resize-observer": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@mdx-js/react": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", - "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdx": "^2.0.0", "@types/react": ">=16" @@ -3907,8 +3323,7 @@ }, "node_modules/@mswjs/cookies": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.2.2.tgz", - "integrity": "sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==", + "license": "MIT", "dependencies": { "@types/set-cookie-parser": "^2.4.0", "set-cookie-parser": "^2.4.6" @@ -3919,8 +3334,7 @@ }, "node_modules/@mswjs/interceptors": { "version": "0.17.9", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.17.9.tgz", - "integrity": "sha512-4LVGt03RobMH/7ZrbHqRxQrS9cc2uh+iNKSj8UWr8M26A2i793ju+csaB5zaqYltqJmA2jUq4VeYfKmVqvsXQg==", + "license": "MIT", "dependencies": { "@open-draft/until": "^1.0.3", "@types/debug": "^4.1.7", @@ -3937,17 +3351,15 @@ }, "node_modules/@mswjs/interceptors/node_modules/strict-event-emitter": { "version": "0.2.8", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz", - "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==", + "license": "MIT", "dependencies": { "events": "^3.3.0" } }, "node_modules/@ndelangen/get-tarball": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", - "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", "dev": true, + "license": "MIT", "dependencies": { "gunzip-maybe": "^1.4.2", "pump": "^3.0.0", @@ -3956,34 +3368,30 @@ }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, + "license": "MIT", "dependencies": { "eslint-scope": "5.1.1" } }, "node_modules/@nicolo-ribaudo/semver-v6": { "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3994,18 +3402,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4016,14 +3422,21 @@ }, "node_modules/@open-draft/until": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", - "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==" + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", - "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", @@ -4071,9 +3484,8 @@ }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4087,18 +3499,16 @@ }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/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==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -4112,15 +3522,13 @@ }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -4133,9 +3541,8 @@ }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4148,9 +3555,8 @@ }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -4163,9 +3569,8 @@ }, "node_modules/@pmmmwh/react-refresh-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==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -4181,1215 +3586,1158 @@ }, "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/@polka/url": { "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@remix-run/router": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz", - "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==", - "engines": { - "node": ">=14" + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", - "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==", - "dev": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "type-detect": "4.0.8" + "@babel/runtime": "^7.13.10" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@storybook/addon-actions": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.0.26.tgz", - "integrity": "sha512-vVoqE0Zw0g1PPnGfho8vRwjpXhQCpRNBQ/2U83/CSodHWL/MBYENG0XMby90TC72M26gNmEh0dn1YCUXvLdiew==", + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "polished": "^4.2.2", - "prop-types": "^15.7.2", - "react-inspector": "^6.0.0", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "uuid": "^9.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-actions/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/addon-backgrounds": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.0.26.tgz", - "integrity": "sha512-sjTkOnSsVBBl1GruVVsNKWEuLCbKjkNun1mzIklfYAiHz9hTZIhe9MA2SGZoDozMUDIXQqSoMDEc3rnDtfqsnQ==", + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { + "@types/react": { "optional": true } } }, - "node_modules/@storybook/addon-controls": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.0.26.tgz", - "integrity": "sha512-mp1WuOYCPvR33orHn0XPABY5roF9Le8HnZwTpvfkrRMeMqLnYLnkCTZqY3JN/IOVlyQuYdqodP5CPDHNDLmvVg==", + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/blocks": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/manager-api": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "lodash": "^4.17.21", - "ts-dedent": "^2.0.0" + "@babel/runtime": "^7.13.10" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-docs": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.0.26.tgz", - "integrity": "sha512-C8DOwfmPBWDUS1IJbyJxykgVVHVzSSL+JFh3FwtF0hsqwjlNW4OvGDFbz0oAxyxs4V46xVcvh4E95e3GkW36BQ==", + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.20.2", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@jest/transform": "^29.3.1", - "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/csf-plugin": "7.0.26", - "@storybook/csf-tools": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.0.26", - "@storybook/postinstall": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/react-dom-shim": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "fs-extra": "^11.1.0", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/addon-essentials": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.0.26.tgz", - "integrity": "sha512-r+IOtxbIqlCKO8fDgLppubYm+GEW3ZDxjPwXMQdDGem9ENpz0QLKb49r89+UYqnnaYjuYKjDNUOqy0gX2HfUXQ==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.0.26", - "@storybook/addon-backgrounds": "7.0.26", - "@storybook/addon-controls": "7.0.26", - "@storybook/addon-docs": "7.0.26", - "@storybook/addon-highlight": "7.0.26", - "@storybook/addon-measure": "7.0.26", - "@storybook/addon-outline": "7.0.26", - "@storybook/addon-toolbars": "7.0.26", - "@storybook/addon-viewport": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/manager-api": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/preview-api": "7.0.26", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@storybook/addon-highlight": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.0.26.tgz", - "integrity": "sha512-+I+MoM7yXCA3YR2FwTSxSs6/IBpcc3Ey88WboGthR23ERmsgZOtum1S7KZ6cffNCOq4U0LzPkjKX2bICytFrIQ==", + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.0.26" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/addon-interactions": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.0.26.tgz", - "integrity": "sha512-trIbPFLdxF6XgGORhx8eSGmGZ/4/AekJyFluf2lgutGi4TPL5Xzrx3o1kTFPVdLAPplBuDIlVI4HSGHHH2zeTw==", + "node_modules/@radix-ui/react-popper": { + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "7.0.26", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "jest-mock": "^27.0.6", - "polished": "^4.2.2", - "ts-dedent": "^2.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-links": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.0.26.tgz", - "integrity": "sha512-og+8AUAUpHsT+MVjhdQmRNJw9RUkHn5FFoou003b9V4UlPPNDYTo/tNEqOhUXn2l/ESAROJlR/q/8Qjdes24pA==", + "node_modules/@radix-ui/react-portal": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/router": "7.0.26", - "@storybook/types": "7.0.26", - "prop-types": "^15.7.2", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-measure": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.0.26.tgz", - "integrity": "sha512-iAnI6q3GB8uSydK+S4m4ANpy0GpMpHhmU0oBtu6OmyyzHUH1RJ7/fGfBnzx6YT+rIOlqSFocxYGn74ylsp33Wg==", + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/types": "7.0.26" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-outline": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.0.26.tgz", - "integrity": "sha512-oL7D0IWO0M6hMw5cWEC6JdKXlGadlVIdhIrVN+0gdFxuxCHTGpebQ02DCvyfls29UssEOxPaO1XMdu9tDlctbg==", + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/types": "7.0.26", - "ts-dedent": "^2.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.2", + "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-toolbars": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.0.26.tgz", - "integrity": "sha512-DrwqcWuCLjaTNFtAYUxO2VaLrr2ibhB3ZQwW7J6a4YFCJaV49wempGPq3BzTWvrPUtMxGp7J3ZusdH9jBgCzjA==", + "node_modules/@radix-ui/react-separator": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addon-viewport": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.0.26.tgz", - "integrity": "sha512-veAYxnR11sojXC7tlnBZ/USiafhWCsZNvjxmywl/XCh3MeDGFFDb2NN1s/7irAYXfNMOhgPGZED19BN9cQ8QRQ==", + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/addons": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.0.26.tgz", - "integrity": "sha512-zn7vdgXkQ4DpCJaawJsNPnh0NzXVXd2qfVtzYWWKT4eyj43VXxoVX2Z4woAD8h6G57JJg67+7hChRebUmd284A==", + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/types": "7.0.26" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-toggle": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@storybook/api": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.0.26.tgz", - "integrity": "sha512-czS5iWE3Px3e0sXjgt1T+LDiT6Tl4gXYPmHIaWpKGDCh4W2zrGolOvB0WqDt3IKhDGnXxaJF5jn705OGBQOptw==", + "node_modules/@radix-ui/react-toolbar": { + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/manager-api": "7.0.26" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-separator": "1.0.3", + "@radix-ui/react-toggle-group": "1.0.4" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "react": { + "@types/react": { "optional": true }, - "react-dom": { + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/blocks": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.0.26.tgz", - "integrity": "sha512-VNYB6Y1Ocja8HVg4Bm1w7LvqRSEc9aLVD8BnI8BInHvekvxhaxTkfpA18qds7d8+RmerrJqAUhGx0jkIB/cvwA==", + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/channels": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "@types/lodash": "^4.14.167", - "color-convert": "^2.0.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "markdown-to-jsx": "^7.1.8", - "memoizerific": "^1.11.3", - "polished": "^4.2.2", - "react-colorful": "^5.1.2", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@storybook/blocks/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" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "engines": { - "node": ">=7.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/blocks/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/@storybook/builder-manager": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.0.26.tgz", - "integrity": "sha512-1Uk3dL3Yu5AuimfHAghBHs11wf7B+a+277astqLx7HSeh3L49zcDZS4NhGHKmtQjsEorbvmtty3s16q2k+fM8A==", + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.0.26", - "@storybook/manager": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@types/ejs": "^3.1.1", - "@types/find-cache-dir": "^3.2.1", - "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", - "browser-assert": "^1.2.1", - "ejs": "^3.1.8", - "esbuild": "^0.17.0", - "esbuild-plugin-alias": "^0.2.1", - "express": "^4.17.3", - "find-cache-dir": "^3.0.0", - "fs-extra": "^11.1.0", - "process": "^0.11.10", - "util": "^0.12.4" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.0.26.tgz", - "integrity": "sha512-LfntlZKm0PB6hrgXd7IlzjuCLzjQezYHt3GQfZRxzu7MAu/bgu7xtr7lMaIJOQd2ckpvEN7xhJ89t2mvdk5y0A==", + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.10", - "@storybook/addons": "7.0.26", - "@storybook/api": "7.0.26", - "@storybook/channel-postmessage": "7.0.26", - "@storybook/channel-websocket": "7.0.26", - "@storybook/channels": "7.0.26", - "@storybook/client-api": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/core-webpack": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/preview": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/router": "7.0.26", - "@storybook/store": "7.0.26", - "@storybook/theming": "7.0.26", - "@types/node": "^16.0.0", - "@types/semver": "^7.3.4", - "babel-loader": "^9.0.0", - "babel-plugin-named-exports-order": "^0.0.2", - "browser-assert": "^1.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.7.1", - "express": "^4.17.3", - "fork-ts-checker-webpack-plugin": "^7.2.8", - "fs-extra": "^11.1.0", - "html-webpack-plugin": "^5.5.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "semver": "^7.3.7", - "style-loader": "^3.3.1", - "terser-webpack-plugin": "^5.3.1", - "ts-dedent": "^2.0.0", - "util": "^0.12.4", - "util-deprecate": "^1.0.2", - "webpack": "5", - "webpack-dev-middleware": "^5.3.1", - "webpack-hot-middleware": "^2.25.1", - "webpack-virtual-modules": "^0.4.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "typescript": { + "@types/react": { "optional": true } } }, - "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "dev": true - }, - "node_modules/@storybook/builder-webpack5/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/runtime": "^7.13.10" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@storybook/builder-webpack5/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==", - "dev": true, "peerDependencies": { - "ajv": "^6.9.1" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5/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==", + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@babel/runtime": "^7.13.10" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5/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==", + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5/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/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.3.0.tgz", - "integrity": "sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==", + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { - "typescript": ">3.6.0", - "vue-template-compiler": "*", - "webpack": "^5.11.0" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { - "vue-template-compiler": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { "optional": true } } }, - "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@radix-ui/rect": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "@babel/runtime": "^7.13.10" } }, - "node_modules/@storybook/builder-webpack5/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, + "node_modules/@remix-run/router": { + "version": "1.7.1", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@storybook/builder-webpack5/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/@rushstack/eslint-patch": { + "version": "1.3.2", + "dev": true, + "license": "MIT" }, - "node_modules/@storybook/builder-webpack5/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==", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "type-detect": "4.0.8" } }, - "node_modules/@storybook/builder-webpack5/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==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@storybook/addon-actions": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^6.0.0", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0", + "uuid": "^9.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/builder-webpack5/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/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==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@storybook/global": "^5.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/builder-webpack5/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/channel-postmessage": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-7.0.26.tgz", - "integrity": "sha512-ZvFLr/tUD9dWIjQtIn1JXHjqrbOP/uEEOqzwpKSVj0Cl4Vgc12s8hecbzBufkOF7fwLsFvfieSi7ENOmjoncdQ==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/channels": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/core-events": "7.0.26", + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "qs": "^6.10.0", - "telejson": "^7.0.3" + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/channel-websocket": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-7.0.26.tgz", - "integrity": "sha512-c+0VcZf78RGnT/pWrH85yydt0azRKAHZF3SHWKM4+W8qOFr0Mk0+jqhPh1uoUoPDpBZDTKS/nzXY8cwUVwF/eA==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/channels": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/global": "^5.0.0", - "telejson": "^7.0.3" + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/channels": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.0.26.tgz", - "integrity": "sha512-Br3XILhrtuL5Sdp91I04kKjJzSqU/N8gGL6B6nIfnuaHUvGMDuMCHAB+g7aoiyH5dnpDZ6yBVGNwtYAyJA+0Og==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.0.26.tgz", - "integrity": "sha512-sZ136wRUYTdhhm/thegFoI47wOzl2X+K9eaiTTp0ARwnIUhXAPDQ0MKOD36hKbCX5T/pBE7r++7WoEReIbUDqQ==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/core-server": "7.0.26", - "@storybook/csf-tools": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/telemetry": "7.0.26", - "@storybook/types": "7.0.26", - "@types/semver": "^7.3.4", - "chalk": "^4.1.0", - "commander": "^6.2.1", - "cross-spawn": "^7.0.3", - "detect-indent": "^6.1.0", - "envinfo": "^7.7.3", - "execa": "^5.0.0", - "express": "^4.17.3", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "get-npm-tarball-url": "^2.0.3", - "get-port": "^5.1.1", - "giget": "^1.0.0", - "globby": "^11.0.2", - "jscodeshift": "^0.14.0", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^2.8.0", - "prompts": "^2.4.0", - "puppeteer-core": "^2.1.1", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "shelljs": "^0.8.5", - "simple-update-notifier": "^1.0.0", - "strip-json-comments": "^3.0.1", - "tempy": "^1.0.1", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2" }, - "bin": { - "getstorybook": "bin/index.js", - "sb": "bin/index.js" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-actions/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/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/@storybook/cli/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "node_modules/@storybook/addon-actions/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-actions/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-actions/node_modules/uuid": { + "version": "9.0.1", "dev": true, - "engines": { - "node": ">=8" + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@storybook/cli/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "node_modules/@storybook/addon-actions/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-backgrounds": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/@storybook/cli/node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/read-pkg-up/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/node_modules/read-pkg-up/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/cli/node_modules/read-pkg-up/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/cli/node_modules/read-pkg-up/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "p-limit": "^2.2.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/cli/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@storybook/cli/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/addon-backgrounds/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5400,52 +4748,82 @@ "node": ">=10" } }, - "node_modules/@storybook/cli/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==", + "node_modules/@storybook/addon-backgrounds/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "license": "ISC" + }, + "node_modules/@storybook/addon-controls": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/blocks": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/cli/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/@storybook/addon-controls/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@storybook/cli/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/client-api": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-7.0.26.tgz", - "integrity": "sha512-55Oy5Es8ACABWT01iddUJHt8oT4VnuCvec/FUC4iN7ITiOGjk7YzZB3NftmD6C5+pVQC99buspuwg7IFxmj+Aw==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/preview-api": "7.0.26" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/client-logger": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.0.26.tgz", - "integrity": "sha512-OMVLbgceoeuM8sWOfTX/9a4zCrH78G32hg7x8yXLZnRJ9OLaHJHzUM0Onc4MLudqVUdaKH0c8ejpBXUyIr1rJQ==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0" }, @@ -5454,253 +4832,149 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.0.26.tgz", - "integrity": "sha512-H9sV59FfGrGzGM+UZQclNglnc4cOkQvvF3EOWlR3BfDhx+STSB9VbCR308ygjUYw2TXZ2s5seCvHtVvA2yhILA==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "~7.21.0", - "@babel/preset-env": "~7.21.0", - "@babel/types": "~7.21.2", + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/types": "7.0.26", - "cross-spawn": "^7.0.3", - "globby": "^11.0.2", - "jscodeshift": "^0.14.0", - "lodash": "^4.17.21", - "prettier": "^2.8.0", - "recast": "^0.23.1" + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/codemod/node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@storybook/codemod/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/codemod/node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/core-common": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/@babel/preset-env": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", - "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@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.20.0", - "@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-transform-arrow-functions": "^7.21.5", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.21.5", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.5", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.21.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.21.5", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.5", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "ts-dedent": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/codemod/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/components": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.0.26.tgz", - "integrity": "sha512-n0TVWEF4Bc9JAyEIaN0PqwglbaYYRcPVG7ka+5wgGmBiuDlWI1SXd4EXxv2u0mVibHvtkHvOn6/GaZ1vG45p6g==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", + "@storybook/client-logger": "7.4.6", "memoizerific": "^1.11.3", - "use-resize-observer": "^9.1.0", - "util-deprecate": "^1.0.2" + "qs": "^6.10.0" }, "funding": { "type": "opencollective", @@ -5711,64 +4985,49 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/core-client": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.0.26.tgz", - "integrity": "sha512-1DA8mLnr0f6EuL74859IDK99a7CGNgMIN0/cAVNgYxq0WA4j+9ajsJ+/RIAgnS2NLVLR9kbezUtBEx4/H88IRA==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/preview-api": "7.0.26" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/core-common": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.0.26.tgz", - "integrity": "sha512-rojZblzB0egNXX0bZ7R3TuPDiBSIhxpZCrorrDMHOZ8F+zuBxyTiZ0yMxEDn7i46T2n1vX+hUHhwZVxZrLn/ZQ==", + "node_modules/@storybook/addon-controls/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/node-logger": "7.0.26", - "@storybook/types": "7.0.26", - "@types/node": "^16.0.0", - "@types/node-fetch": "^2.6.4", - "@types/pretty-hrtime": "^1.0.0", - "chalk": "^4.1.0", - "esbuild": "^0.17.0", - "esbuild-register": "^3.4.0", - "file-system-cache": "2.3.0", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "glob": "^8.1.0", - "glob-promise": "^6.0.2", - "handlebars": "^4.7.7", - "lazy-universal-dotenv": "^4.0.0", - "node-fetch": "^2.0.0", - "picomatch": "^2.3.0", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "dev": true + "node_modules/@storybook/addon-controls/node_modules/@types/node": { + "version": "16.18.58", + "dev": true, + "license": "MIT" }, - "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "node_modules/@storybook/addon-controls/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5779,11 +5038,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/core-common/node_modules/chalk": { + "node_modules/@storybook/addon-controls/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/addon-controls/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5795,11 +5061,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/core-common/node_modules/color-convert": { + "node_modules/@storybook/addon-controls/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5807,17 +5072,51 @@ "node": ">=7.0.0" } }, - "node_modules/@storybook/core-common/node_modules/color-name": { + "node_modules/@storybook/addon-controls/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 + "dev": true, + "license": "MIT" }, - "node_modules/@storybook/core-common/node_modules/find-up": { + "node_modules/@storybook/addon-controls/node_modules/esbuild": { + "version": "0.18.20", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/addon-controls/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5829,20 +5128,54 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/core-common/node_modules/has-flag": { + "node_modules/@storybook/addon-controls/node_modules/foreground-child": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/addon-controls/node_modules/glob": { + "version": "10.3.10", + "dev": true, + "license": "ISC", + "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/@storybook/addon-controls/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@storybook/core-common/node_modules/locate-path": { + "node_modules/@storybook/addon-controls/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -5853,11 +5186,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/core-common/node_modules/p-limit": { + "node_modules/@storybook/addon-controls/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/addon-controls/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/addon-controls/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5868,11 +5225,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/core-common/node_modules/p-locate": { + "node_modules/@storybook/addon-controls/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -5883,11 +5239,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/core-common/node_modules/pkg-dir": { + "node_modules/@storybook/addon-controls/node_modules/pkg-dir": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -5895,11 +5250,35 @@ "node": ">=10" } }, - "node_modules/@storybook/core-common/node_modules/supports-color": { + "node_modules/@storybook/addon-controls/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/addon-controls/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/addon-controls/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5907,545 +5286,436 @@ "node": ">=8" } }, - "node_modules/@storybook/core-events": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.0.26.tgz", - "integrity": "sha512-ckZszphEAYs9wp8tPVhayEMzk8JxCiQfzbq0S45sbdqdTrl40PmsOjv5iPNaUYElI/Stfz+v4gDCEUfOsxyC+w==", + "node_modules/@storybook/addon-controls/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@storybook/addon-docs": { + "version": "7.4.6", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/csf-plugin": "7.4.6", + "@storybook/csf-tools": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.4.6", + "@storybook/postinstall": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/react-dom-shim": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/core-server": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.0.26.tgz", - "integrity": "sha512-QieqH19jBPZafxJVmCVK6GTYkRN/CJ8RQUvyRH2KNhqXP0tHYfL51FlU70ldo/vHX6Ax4Cje5hx/Nln9+DOMNg==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@aw-web-design/x-default-browser": "1.4.88", - "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.26", - "@storybook/docs-mdx": "^0.1.0", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/telemetry": "7.0.26", - "@storybook/types": "7.0.26", - "@types/detect-port": "^1.3.0", - "@types/node": "^16.0.0", - "@types/node-fetch": "^2.5.7", - "@types/pretty-hrtime": "^1.0.0", - "@types/semver": "^7.3.4", - "better-opn": "^2.1.1", - "chalk": "^4.1.0", - "cli-table3": "^0.6.1", - "compression": "^1.7.4", - "detect-port": "^1.3.0", - "express": "^4.17.3", - "fs-extra": "^11.1.0", - "globby": "^11.0.2", - "ip": "^2.0.0", - "lodash": "^4.17.21", - "node-fetch": "^2.6.7", - "open": "^8.4.0", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.7", - "serve-favicon": "^2.5.0", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "watchpack": "^2.2.0", - "ws": "^8.2.3" + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "dev": true - }, - "node_modules/@storybook/core-server/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==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@storybook/global": "^5.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/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/@storybook/core-server/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/@storybook/core-server/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/core-server/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/@storybook/core-server/node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@storybook/core-server/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/core-server/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/core-server/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==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/react-dom-shim": { + "version": "7.4.6", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/core-server/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/core-server/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/core-webpack": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.0.26.tgz", - "integrity": "sha512-mIi+D+15sGRh8CWE7mMgvxX8KRfrACcR+AuEDi9rfQBB2PX0Okkrh6GAxPWjjeFFG7DF4RXdkusgC8/seYCTXg==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/core-common": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/types": "7.0.26", - "@types/node": "^16.0.0", - "ts-dedent": "^2.0.0" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "dev": true - }, - "node_modules/@storybook/csf": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", - "dev": true, - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@storybook/csf-plugin": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.0.26.tgz", - "integrity": "sha512-D+wZvKlFxI/Vur8SRvkwKujOdV8ZL6xKiCX/07nFJXhhZoaeM+E78xPCL613Hj15GloujMkAnv7CT2rCiFJYow==", + "node_modules/@storybook/addon-docs/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/csf-tools": "7.0.26", - "unplugin": "^0.10.2" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/csf-tools": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.0.26.tgz", - "integrity": "sha512-O8WJNOkvgrGV6gS/5ERkgqiXOxoXMuHtzdJpIM9DHPhzkSxB1Inl3WrX/dRRDNtmiHf87hBUuzhgo7YR7z4tuQ==", - "dev": true, - "dependencies": { - "@babel/generator": "~7.21.1", - "@babel/parser": "~7.21.2", - "@babel/traverse": "~7.21.2", - "@babel/types": "~7.21.2", - "@storybook/csf": "^0.1.0", - "@storybook/types": "7.0.26", - "fs-extra": "^11.1.0", - "recast": "^0.23.1", + "node_modules/@storybook/addon-essentials": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addon-actions": "7.4.6", + "@storybook/addon-backgrounds": "7.4.6", + "@storybook/addon-controls": "7.4.6", + "@storybook/addon-docs": "7.4.6", + "@storybook/addon-highlight": "7.4.6", + "@storybook/addon-measure": "7.4.6", + "@storybook/addon-outline": "7.4.6", + "@storybook/addon-toolbars": "7.4.6", + "@storybook/addon-viewport": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/csf-tools/node_modules/@babel/generator": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", - "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/csf-tools/node_modules/@babel/parser": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", - "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", + "node_modules/@storybook/addon-essentials/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@storybook/csf-tools/node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/csf-tools/node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@storybook/global": "^5.0.0" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/csf/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-common": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=12.20" + "license": "MIT", + "dependencies": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/docs-mdx": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", - "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", - "dev": true - }, - "node_modules/@storybook/docs-tools": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.0.26.tgz", - "integrity": "sha512-Ibpm/OTR2XmJgix5w+wMYbDwN0zp5e/pcqSHy36OvkBOG588IKSSzYdBjGdTLPHWBoehp2Kyndw/5dL/09ftXA==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.10", - "@storybook/core-common": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/types": "7.0.26", - "@types/doctrine": "^0.0.3", - "doctrine": "^3.0.0", - "lodash": "^4.17.21" + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/global": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", - "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", - "dev": true - }, - "node_modules/@storybook/instrumenter": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.0.26.tgz", - "integrity": "sha512-7Ty0LTslgkm5RyH6CqTAKhWz/cF6wq/sNdMYKwvVZHWNZ2LKMtXD0RWM2caCPruAGOQ9+52H+3s4TZGKaPSSWQ==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/channels": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.0.26" + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/manager": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.0.26.tgz", - "integrity": "sha512-mxjU/pmHr8xL96HCipqazvZWQkxBPCbpZ2+YsJuJoLFN4m7RoOK21VK0euBW24NlSg7Vp57XGQcrJCv6xUTKMg==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/manager-api": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.0.26.tgz", - "integrity": "sha512-/2p6lU7r30qMXob/UnzRL9yq7XjoE+YQXv1KhrcePfMBARbelYw9RYhYT/AkXGtb9/Fa95uG3lNvoDLC1IQfMQ==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/channels": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/router": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", - "semver": "^7.3.7", - "store2": "^2.14.2", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0" + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/manager-api/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==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/manager-api/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, - "bin": { - "semver": "bin/semver.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/manager-api/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/mdx2-csf": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", - "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", - "dev": true - }, - "node_modules/@storybook/node-logger": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.0.26.tgz", - "integrity": "sha512-3Jqv3fRb8+Mn/aNl4IztgUAS/pvouVzpfHDc8+6KYAoFMeDXwHVlfF/+gRCpd/fbYaTHGrycIs5G48bC190Dgg==", + "node_modules/@storybook/addon-essentials/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/npmlog": "^4.1.2", - "chalk": "^4.1.0", - "npmlog": "^5.0.1", - "pretty-hrtime": "^1.0.3" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/node-logger/node_modules/ansi-styles": { + "node_modules/@storybook/addon-essentials/node_modules/@types/node": { + "version": "16.18.58", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/addon-essentials/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6456,11 +5726,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@storybook/node-logger/node_modules/chalk": { + "node_modules/@storybook/addon-essentials/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6472,11 +5749,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@storybook/node-logger/node_modules/color-convert": { + "node_modules/@storybook/addon-essentials/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6484,150 +5760,292 @@ "node": ">=7.0.0" } }, - "node_modules/@storybook/node-logger/node_modules/color-name": { + "node_modules/@storybook/addon-essentials/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 + "dev": true, + "license": "MIT" }, - "node_modules/@storybook/node-logger/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==", + "node_modules/@storybook/addon-essentials/node_modules/esbuild": { + "version": "0.18.20", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/node-logger/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==", + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/postinstall": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.0.26.tgz", - "integrity": "sha512-NhJBpQ+49RWF63UkdwrEwBLJBjAZeTlruPWfXGUb343iaGNNTsD3jajbToFHncibewH83yk6MeGfiyUva60oJw==", + "node_modules/@storybook/addon-essentials/node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/preset-react-webpack": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.0.26.tgz", - "integrity": "sha512-uJTW7of4eF8upoP2W0N5FVi1DG2f6CXkkI5qX4WmYFAmCtShor75EZTcv50QF4GOKJs9NlHDgC2+i6gT24u1rg==", + "node_modules/@storybook/addon-essentials/node_modules/glob": { + "version": "10.3.10", "dev": true, + "license": "ISC", "dependencies": { - "@babel/preset-flow": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", - "@storybook/core-webpack": "7.0.26", - "@storybook/docs-tools": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/react": "7.0.26", - "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", - "@types/node": "^16.0.0", - "@types/semver": "^7.3.4", - "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-react-docgen": "^4.2.1", - "fs-extra": "^11.1.0", - "react-refresh": "^0.11.0", - "semver": "^7.3.7", - "webpack": "5" + "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.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@babel/core": "^7.11.5", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "dev": true + "node_modules/@storybook/addon-essentials/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@storybook/preset-react-webpack/node_modules/lru-cache": { + "node_modules/@storybook/addon-essentials/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/preset-react-webpack/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/addon-essentials/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/@storybook/preset-react-webpack/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@storybook/preview": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.0.26.tgz", - "integrity": "sha512-9Uaxl/MEMYqjLlKAeAF2ATuaM0yQagXUfu2bEOpuor2ys9XoisDkvB7jfsCVqMZHeQ+mCdYyBICHhgqzxcO2Zg==", + "node_modules/@storybook/addon-essentials/node_modules/minimatch": { + "version": "9.0.3", "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@storybook/preview-api": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.0.26.tgz", - "integrity": "sha512-uJwA4errBOZOoDF2T7Z2oLqjAYvvjMr31sTsOoT0niJtWr29RQp8yS6VoSrsuh+y3FAVqBEl5pS+DX3IGLjvxw==", + "node_modules/@storybook/addon-essentials/node_modules/p-limit": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/channel-postmessage": "7.0.26", - "@storybook/channels": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/csf": "^0.1.0", - "@storybook/global": "^5.0.0", - "@storybook/types": "7.0.26", - "@types/qs": "^6.9.5", + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/pkg-dir": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@storybook/addon-highlight": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.4.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-highlight/node_modules/@storybook/channels": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-highlight/node_modules/@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-highlight/node_modules/@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-highlight/node_modules/@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -6641,36 +6059,39 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/react": { + "node_modules/@storybook/addon-highlight/node_modules/@storybook/types": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-interactions": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.0.26.tgz", - "integrity": "sha512-+YK/1vF2Pd/PX7Ss5yPCIh9hee7iMVbu86gdjV9n9r6G244jQ7HLtdA01JKfq92/UgoysSWUjUECrxrUvcsh5w==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/client-logger": "7.0.26", - "@storybook/core-client": "7.0.26", - "@storybook/docs-tools": "7.0.26", + "@storybook/components": "7.0.26", + "@storybook/core-common": "7.0.26", + "@storybook/core-events": "7.0.26", "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "7.0.26", + "@storybook/manager-api": "7.0.26", "@storybook/preview-api": "7.0.26", - "@storybook/react-dom-shim": "7.0.26", + "@storybook/theming": "7.0.26", "@storybook/types": "7.0.26", - "@types/escodegen": "^0.0.6", - "@types/estree": "^0.0.51", - "@types/node": "^16.0.0", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "escodegen": "^2.0.0", - "html-tags": "^3.1.0", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^15.0.0", - "ts-dedent": "^2.0.0", - "type-fest": "^2.19.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=16.0.0" + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" }, "funding": { "type": "opencollective", @@ -6681,35 +6102,30 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { - "typescript": { + "react": { + "optional": true + }, + "react-dom": { "optional": true } } }, - "node_modules/@storybook/react-docgen-typescript-plugin": { - "version": "1.0.6--canary.9.0c3f3b7.0", - "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", - "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", + "node_modules/@storybook/addon-links": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.2.2", - "tslib": "^2.0.0" + "@storybook/client-logger": "7.0.26", + "@storybook/core-events": "7.0.26", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.0.26", + "@storybook/preview-api": "7.0.26", + "@storybook/router": "7.0.26", + "@storybook/types": "7.0.26", + "prop-types": "^15.7.2", + "ts-dedent": "^2.0.0" }, - "peerDependencies": { - "typescript": ">= 4.x", - "webpack": ">= 4" - } - }, - "node_modules/@storybook/react-dom-shim": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.26.tgz", - "integrity": "sha512-heobG4IovYAD9fo7qmUHylCSQjDd1eXDCOaTiy+XVKobHAJgkz1gKqbaFSP6KLkPE4cKyScku2K9mY0tcKIhMw==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" @@ -6717,91 +6133,91 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/react-webpack5": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.0.26.tgz", - "integrity": "sha512-46LmHKEW5LNp13/rBUaEznTX35ZO8cuuVBlC7ySCR1+SGBJif3EBBe8VMyEI3FO48nwrenK9m+FtLqu5TDocCA==", + "node_modules/@storybook/addon-measure": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/builder-webpack5": "7.0.26", - "@storybook/preset-react-webpack": "7.0.26", - "@storybook/react": "7.0.26", - "@types/node": "^16.0.0" - }, - "engines": { - "node": ">=16.0.0" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@babel/core": "^7.11.5", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { - "@babel/core": { + "react": { "optional": true }, - "typescript": { + "react-dom": { "optional": true } } }, - "node_modules/@storybook/react-webpack5/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "dev": true - }, - "node_modules/@storybook/react/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@storybook/react/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "dev": true - }, - "node_modules/@storybook/react/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/@storybook/addon-measure/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, - "bin": { - "acorn": "bin/acorn" + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=0.4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/react/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/@storybook/addon-measure/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=12.20" + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/router": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.0.26.tgz", - "integrity": "sha512-OfLittKxdahsgKsmQFoBX9q5tN/aqKMhhc/WbW88UPAQCUcEuazB0CwM+LI9YXY+n5L+vpLI4lGlgaqvPy4hHw==", + "node_modules/@storybook/addon-measure/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "memoizerific": "^1.11.3", - "qs": "^6.10.0" + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" }, "funding": { "type": "opencollective", @@ -6812,209 +6228,332 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/store": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-7.0.26.tgz", - "integrity": "sha512-gJ9LDv8Mos8kPHj7SDEpBxQVL756j+15XUqBeBjgK+/TihnzIFeeX9QaTLo+As8bhgF/P2MVR+v0Qv9Zlm9MgQ==", + "node_modules/@storybook/addon-measure/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/preview-api": "7.0.26" + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.0.26.tgz", - "integrity": "sha512-TgvtARAiD+SNyWJJfQdPiWW5JQkbX1UdHKEqEhoJXsGDkEi2Zpb+1tdeP1qZ3Gfbd1K0/LDpXGcqLv6/deSEdg==", + "node_modules/@storybook/addon-measure/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "7.0.26", - "@storybook/core-common": "7.0.26", - "chalk": "^4.1.0", - "detect-package-manager": "^2.0.1", - "fetch-retry": "^5.0.2", - "fs-extra": "^11.1.0", - "isomorphic-unfetch": "^3.1.0", - "nanoid": "^3.3.1", - "read-pkg-up": "^7.0.1" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/telemetry/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==", + "node_modules/@storybook/addon-measure/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-measure/node_modules/@storybook/router": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/telemetry/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addon-measure/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-measure/node_modules/@storybook/types": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry/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==", + "node_modules/@storybook/addon-measure/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "yallist": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/@storybook/telemetry/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/@storybook/telemetry/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==", + "node_modules/@storybook/addon-measure/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@storybook/telemetry/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "node_modules/@storybook/addon-measure/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/@storybook/telemetry/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/@storybook/addon-outline": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/telemetry/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" + "@storybook/global": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/telemetry/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/telemetry/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==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/telemetry/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@storybook/testing-library": { - "version": "0.0.14-next.2", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.14-next.2.tgz", - "integrity": "sha512-i/SLSGm0o978ELok/SB4Qg1sZ3zr+KuuCkzyFqcCD0r/yf+bG35aQGkFqqxfSAdDxuQom0NO02FE+qys5Eapdg==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/client-logger": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", - "@storybook/instrumenter": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", - "@testing-library/dom": "^8.3.0", - "@testing-library/user-event": "^13.2.1", - "ts-dedent": "^2.2.0" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/theming": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.26.tgz", - "integrity": "sha512-7hxpT2yq+xZonSsEZHOF+HDHx6GE0qlys3EQ63K9XCJ8VeBnq9M5zHvMK9iXl90093ufxpvWsfDWgtja2zvmTw==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.0.26", + "@storybook/client-logger": "7.4.6", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -7027,13 +6566,12 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@storybook/types": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.0.26.tgz", - "integrity": "sha512-5RBi6agtDglNXdffmw4+Fyv2dUdlIdeOdUj0O5+JRYajTxfHdurZd9r/42z4OstN+ORDkLA/svt8Q9JyRpIb6Q==", + "node_modules/@storybook/addon-outline/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/channels": "7.0.26", + "@storybook/channels": "7.4.6", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -7043,937 +6581,1066 @@ "url": "https://opencollective.com/storybook" } }, - "node_modules/@tanstack/match-sorter-utils": { - "version": "8.8.4", - "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz", - "integrity": "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==", + "node_modules/@storybook/addon-outline/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "remove-accents": "0.4.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kentcdodds" - } - }, - "node_modules/@tanstack/query-core": { - "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.35.3.tgz", - "integrity": "sha512-PS+WEjd9wzKTyNjjQymvcOe1yg8f3wYc6mD+vb6CKyZAKvu4sIJwryfqfBULITKCla7P9C4l5e9RXePHvZOZeQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "node": ">=10" } }, - "node_modules/@tanstack/react-query": { - "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.35.3.tgz", - "integrity": "sha512-UgTPioip/rGG3EQilXfA2j4BJkhEQsR+KAbF+KIuvQ7j4MkgnTCJF01SfRpIRNtQTlEfz/+IL7+jP8WA8bFbsw==", + "node_modules/@storybook/addon-outline/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", "dependencies": { - "@tanstack/query-core": "4.35.3", - "use-sync-external-store": "^1.2.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/addon-outline/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@storybook/addon-toolbars": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-native": "*" + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { - "react-dom": { + "react": { "optional": true }, - "react-native": { + "react-dom": { "optional": true } } }, - "node_modules/@tanstack/react-query-devtools": { - "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.35.3.tgz", - "integrity": "sha512-UvLT7qPzCuCZ3NfjwsOqDUVN84JvSOuW6ukrjZmSqgjPqVxD6ra/HUp1CEOatQY2TRvKCp8y1lTVu+trXM30fg==", + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@tanstack/match-sorter-utils": "^8.7.0", - "superjson": "^1.10.0", - "use-sync-external-store": "^1.2.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/components": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@tanstack/react-query": "^4.35.3", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@testing-library/dom": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", - "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@testing-library/dom/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==", + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "deep-equal": "^2.0.5" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@testing-library/dom/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==", + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@testing-library/dom/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/@testing-library/dom/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==", + "node_modules/@storybook/addon-toolbars/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@testing-library/dom/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==", + "node_modules/@storybook/addon-toolbars/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@testing-library/react": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", - "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", + "node_modules/@storybook/addon-toolbars/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^9.0.0", - "@types/react-dom": "^18.0.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=14" + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.1.tgz", - "integrity": "sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==", + "node_modules/@storybook/addon-toolbars/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@storybook/addon-viewport": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2" }, - "engines": { - "node": ">=14" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@testing-library/react/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==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "deep-equal": "^2.0.5" + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@testing-library/react/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@testing-library/react/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==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@testing-library/react/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/@testing-library/react/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==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@testing-library/react/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==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, - "engines": { - "node": ">=10", - "npm": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@testing-library/dom": ">=7.21.4" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">= 10" + "license": "MIT", + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@types/aria-query": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "node_modules/@storybook/addon-viewport/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "node_modules/@storybook/addon-viewport/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "@babel/types": "^7.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "node_modules/@storybook/addon-viewport/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "node_modules/@storybook/addon-viewport/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } + "license": "ISC" }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "node_modules/@storybook/addons": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@storybook/manager-api": "7.0.26", + "@storybook/preview-api": "7.0.26", + "@storybook/types": "7.0.26" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "node_modules/@storybook/api": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*" + "@storybook/client-logger": "7.0.26", + "@storybook/manager-api": "7.0.26" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "node_modules/@storybook/blocks": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/docs-tools": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.8", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "node_modules/@storybook/blocks/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "node_modules/@storybook/blocks/node_modules/@storybook/channels": { + "version": "7.4.6", + "dev": true, + "license": "MIT", "dependencies": { - "@types/ms": "*" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/detect-port": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.3.tgz", - "integrity": "sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==", - "dev": true - }, - "node_modules/@types/doctrine": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", - "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", - "dev": true - }, - "node_modules/@types/ejs": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.2.tgz", - "integrity": "sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==", - "dev": true - }, - "node_modules/@types/escodegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", - "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "node_modules/@storybook/blocks/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "node_modules/@storybook/blocks/node_modules/@storybook/components": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "node_modules/@storybook/blocks/node_modules/@storybook/core-common": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/find-cache-dir": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", - "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", - "dev": 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==", + "node_modules/@storybook/blocks/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "node_modules/@storybook/blocks/node_modules/@storybook/docs-tools": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*" + "@storybook/core-common": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "node_modules/@storybook/blocks/node_modules/@storybook/manager-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "node_modules/@storybook/blocks/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, - "dependencies": { - "@types/node": "*" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/@storybook/blocks/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "node_modules/@storybook/blocks/node_modules/@storybook/router": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@types/jest": { - "version": "29.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.2.tgz", - "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", + "node_modules/@storybook/blocks/node_modules/@storybook/theming": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/@storybook/blocks/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@types/jest/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==", - "dev": true - }, - "node_modules/@types/js-levenshtein": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", - "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==" + "node_modules/@storybook/blocks/node_modules/@types/node": { + "version": "16.18.58", + "dev": true, + "license": "MIT" }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "node_modules/@storybook/blocks/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "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.195", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", - "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", - "dev": true - }, - "node_modules/@types/mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz", - "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/mime-types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", - "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", - "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==", - "dev": true - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" - }, - "node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "node_modules/@storybook/blocks/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/npmlog": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", - "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/pretty-hrtime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", - "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", - "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "node_modules/@storybook/blocks/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@types/react-dom": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", + "node_modules/@storybook/blocks/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/react": "*" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@types/react-gtm-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/react-gtm-module/-/react-gtm-module-2.0.1.tgz", - "integrity": "sha512-T/DN9gAbCYk5wJ1nxf4pSwmXz4d1iVjM++OoG+mwMfz9STMAotGjSb65gJHOS5bPvl6vLSsJnuC+y/43OQrltg==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true + "node_modules/@storybook/blocks/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "node_modules/@storybook/blocks/node_modules/esbuild": { + "version": "0.18.20", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/blocks/node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "node_modules/@storybook/blocks/node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", "dependencies": { - "@types/express": "*" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "node_modules/@storybook/blocks/node_modules/glob": { + "version": "10.3.10", "dev": true, + "license": "ISC", "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "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/@types/set-cookie-parser": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz", - "integrity": "sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==", - "dependencies": { - "@types/node": "*" + "node_modules/@storybook/blocks/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "node_modules/@storybook/blocks/node_modules/locate-path": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/styled-components": { - "version": "5.1.26", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz", - "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==", + "node_modules/@storybook/blocks/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "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==", - "dev": true - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "node_modules/@storybook/blocks/node_modules/minimatch": { + "version": "9.0.3", "dev": true, + "license": "ISC", "dependencies": { - "@types/node": "*" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "node_modules/@storybook/blocks/node_modules/p-limit": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", - "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", + "node_modules/@storybook/blocks/node_modules/p-locate": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/type-utils": "5.61.0", - "@typescript-eslint/utils": "5.61.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "p-limit": "^3.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/eslint-plugin/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==", + "node_modules/@storybook/blocks/node_modules/pkg-dir": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "find-up": "^5.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/blocks/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -7984,1569 +7651,1397 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.61.0.tgz", - "integrity": "sha512-r4RTnwTcaRRVUyKb7JO4DiOGmcMCat+uNs6HqJBfX7K2nlq5TagYZShhbhAw7hFT3bHaYgxMw6pKP0fhu05VMA==", + "node_modules/@storybook/blocks/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.61.0" - }, + "license": "ISC", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz", - "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==", + "node_modules/@storybook/blocks/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/typescript-estree": "5.61.0", - "debug": "^4.3.4" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", - "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", + "node_modules/@storybook/blocks/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@storybook/builder-manager": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "7.4.6", + "@storybook/manager": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@types/ejs": "^3.1.1", + "@types/find-cache-dir": "^3.2.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.8", + "esbuild": "^0.18.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "find-cache-dir": "^3.0.0", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", - "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", + "node_modules/@storybook/builder-manager/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.61.0", - "@typescript-eslint/utils": "5.61.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", - "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", - "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/visitor-keys": "5.61.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@storybook/global": "^5.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://opencollective.com/storybook" } }, - "node_modules/@typescript-eslint/typescript-estree/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==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/core-common": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/@storybook/builder-manager/node_modules/@storybook/node-logger": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", - "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", + "node_modules/@storybook/builder-manager/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.61.0", - "@typescript-eslint/types": "5.61.0", - "@typescript-eslint/typescript-estree": "5.61.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://opencollective.com/storybook" } }, - "node_modules/@typescript-eslint/utils/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==", + "node_modules/@storybook/builder-manager/node_modules/@types/node": { + "version": "16.18.58", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/builder-manager/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/@storybook/builder-manager/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", - "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", + "node_modules/@storybook/builder-manager/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.61.0", - "eslint-visitor-keys": "^3.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/@storybook/builder-manager/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "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==", - "dev": 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==", - "dev": 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==", - "dev": true + "node_modules/@storybook/builder-manager/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "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==", + "node_modules/@storybook/builder-manager/node_modules/esbuild": { + "version": "0.18.20", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/builder-manager/node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dev": 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==", + "node_modules/@storybook/builder-manager/node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", "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" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "node_modules/@storybook/builder-manager/node_modules/glob": { + "version": "10.3.10", "dev": true, + "license": "ISC", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "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/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "node_modules/@storybook/builder-manager/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "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==", - "dev": 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==", + "node_modules/@storybook/builder-manager/node_modules/locate-path": { + "version": "6.0.0", "dev": true, + "license": "MIT", "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" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@storybook/builder-manager/node_modules/minimatch": { + "version": "9.0.3", "dev": true, + "license": "ISC", "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" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "node_modules/@storybook/builder-manager/node_modules/p-limit": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@storybook/builder-manager/node_modules/p-locate": { + "version": "5.0.0", "dev": true, + "license": "MIT", "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" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@storybook/builder-manager/node_modules/pkg-dir": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "node_modules/@storybook/builder-manager/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, + "license": "ISC", "engines": { - "node": ">=14.15.0" + "node": ">=14" }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "node_modules/@storybook/builder-manager/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "engines": { - "node": ">=14.15.0" + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "engines": { + "node": ">=8" } }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "node_modules/@storybook/builder-webpack5": { + "version": "7.0.26", "dev": true, - "engines": { - "node": ">=14.15.0" + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@storybook/addons": "7.0.26", + "@storybook/api": "7.0.26", + "@storybook/channel-postmessage": "7.0.26", + "@storybook/channel-websocket": "7.0.26", + "@storybook/channels": "7.0.26", + "@storybook/client-api": "7.0.26", + "@storybook/client-logger": "7.0.26", + "@storybook/components": "7.0.26", + "@storybook/core-common": "7.0.26", + "@storybook/core-events": "7.0.26", + "@storybook/core-webpack": "7.0.26", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.0.26", + "@storybook/node-logger": "7.0.26", + "@storybook/preview": "7.0.26", + "@storybook/preview-api": "7.0.26", + "@storybook/router": "7.0.26", + "@storybook/store": "7.0.26", + "@storybook/theming": "7.0.26", + "@types/node": "^16.0.0", + "@types/semver": "^7.3.4", + "babel-loader": "^9.0.0", + "babel-plugin-named-exports-order": "^0.0.2", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.7.1", + "express": "^4.17.3", + "fork-ts-checker-webpack-plugin": "^7.2.8", + "fs-extra": "^11.1.0", + "html-webpack-plugin": "^5.5.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "semver": "^7.3.7", + "style-loader": "^3.3.1", + "terser-webpack-plugin": "^5.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "webpack": "5", + "webpack-dev-middleware": "^5.3.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.4.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { - "webpack-dev-server": { + "typescript": { "optional": true } } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.9.tgz", - "integrity": "sha512-4VSbbcMoxc4KLjb1gs96SRmi7w4h1SF+fCoiK0XaQX62buCc1G5d0DC5bJ9xJBNPDSVCmIrcl8BiYxzjrqaaJA==", - "engines": { - "node": ">=10.0.0" - } - }, - "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==", - "dev": 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==", - "dev": true + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "16.18.38", + "dev": true, + "license": "MIT" }, - "node_modules/@yarnpkg/esbuild-plugin-pnp": { - "version": "3.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", - "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", + "node_modules/@storybook/builder-webpack5/node_modules/ajv": { + "version": "6.12.6", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "peerDependencies": { - "esbuild": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "optional": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true + "node_modules/@storybook/builder-webpack5/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@storybook/builder-webpack5/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "node_modules/@storybook/builder-webpack5/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "bin": { - "acorn": "bin/acorn" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "node_modules/@storybook/builder-webpack5/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/@storybook/builder-webpack5/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=0.4.0" - } + "license": "MIT" }, - "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==", + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin": { + "version": "7.3.0", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, "peerDependencies": { - "acorn": "^8" + "typescript": ">3.6.0", + "vue-template-compiler": "*", + "webpack": "^5.11.0" + }, + "peerDependenciesMeta": { + "vue-template-compiler": { + "optional": true + } } }, - "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==", + "node_modules/@storybook/builder-webpack5/node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "node_modules/@storybook/builder-webpack5/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "node_modules/@storybook/builder-webpack5/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/builder-webpack5/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@storybook/builder-webpack5/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "debug": "4" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@storybook/builder-webpack5/node_modules/semver": { + "version": "7.5.3", "dev": true, + "license": "ISC", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/@storybook/builder-webpack5/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/@storybook/builder-webpack5/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@storybook/channel-postmessage": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@storybook/channels": "7.0.26", + "@storybook/client-logger": "7.0.26", + "@storybook/core-events": "7.0.26", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.0.3" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/@storybook/channel-websocket": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" + "@storybook/channels": "7.0.26", + "@storybook/client-logger": "7.0.26", + "@storybook/global": "^5.0.0", + "telejson": "^7.0.3" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/@storybook/channels": { + "version": "7.0.26", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@storybook/cli": { + "version": "7.4.6", + "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", + "@ndelangen/get-tarball": "^3.0.7", + "@storybook/codemod": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/core-server": "7.4.6", + "@storybook/csf-tools": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/telemetry": "7.4.6", + "@storybook/types": "7.4.6", + "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "commander": "^6.2.1", + "cross-spawn": "^7.0.3", + "detect-indent": "^6.1.0", + "envinfo": "^7.7.3", + "execa": "^5.0.0", + "express": "^4.17.3", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "get-npm-tarball-url": "^2.0.3", + "get-port": "^5.1.1", + "giget": "^1.0.0", + "globby": "^11.0.2", + "jscodeshift": "^0.14.0", + "leven": "^3.1.0", + "ora": "^5.4.1", + "prettier": "^2.8.0", + "prompts": "^2.4.0", + "puppeteer-core": "^2.1.1", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "simple-update-notifier": "^2.0.0", + "strip-json-comments": "^3.0.1", + "tempy": "^1.0.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" + "bin": { + "getstorybook": "bin/index.js", + "sb": "bin/index.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "node_modules/@storybook/cli/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "cpu": [ + "arm64" + ], "dev": true, - "engines": [ - "node >= 0.8.0" + "license": "MIT", + "optional": true, + "os": [ + "darwin" ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "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==", "engines": { - "node": ">=8" + "node": ">=12" } }, - "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==", + "node_modules/@storybook/cli/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "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==", + "node_modules/@storybook/cli/node_modules/@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@storybook/global": "^5.0.0" }, - "engines": { - "node": ">= 8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/app-root-dir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", - "dev": true - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "node_modules/@storybook/cli/node_modules/@storybook/core-common": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "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==", + "node_modules/@storybook/cli/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "dequal": "^2.0.3" + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "node_modules/@storybook/cli/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "node_modules/@storybook/cli/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "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==", + "node_modules/@storybook/cli/node_modules/@types/node": { + "version": "16.18.58", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/cli/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/@storybook/cli/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "node_modules/@storybook/cli/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "node_modules/@storybook/cli/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "node_modules/@storybook/cli/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "license": "MIT" + }, + "node_modules/@storybook/cli/node_modules/commander": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" } }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "node_modules/@storybook/cli/node_modules/esbuild": { + "version": "0.18.20", "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "node_modules/@storybook/cli/node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@storybook/cli/node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/@storybook/cli/node_modules/glob": { + "version": "10.3.10", + "dev": true, + "license": "ISC", + "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": ">= 0.4" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "node_modules/@storybook/cli/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "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==", + "node_modules/@storybook/cli/node_modules/locate-path": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "dequal": "^2.0.3" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "node_modules/@storybook/cli/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/babel-jest": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.0.tgz", - "integrity": "sha512-Jj8Bq2yKsk11XLk06Nm8SdvYkAcecH+GuhxB8DnK5SncjHnJ88TQjSnGgE7jpajpnSvz9DZ6X8hXrDkD/6/TPQ==", + "node_modules/@storybook/cli/node_modules/minimatch": { + "version": "9.0.3", "dev": true, + "license": "ISC", "dependencies": { - "@jest/transform": "^29.6.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/babel-jest/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==", + "node_modules/@storybook/cli/node_modules/p-limit": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@storybook/cli/node_modules/p-locate": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-jest/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==", + "node_modules/@storybook/cli/node_modules/pkg-dir": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "find-up": "^5.0.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/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/babel-jest/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": ">=10" } }, - "node_modules/babel-jest/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==", + "node_modules/@storybook/cli/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/babel-loader": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", - "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "node_modules/@storybook/cli/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" - }, + "license": "ISC", "engines": { - "node": ">= 14.15.0" + "node": ">=14" }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/babel-plugin-add-react-displayname": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", - "dev": true - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/@storybook/cli/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "node_modules/@storybook/cli/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "ISC" }, - "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==", + "node_modules/@storybook/client-api": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "@storybook/client-logger": "7.0.26", + "@storybook/preview-api": "7.0.26" }, - "engines": { - "node": ">=10", - "npm": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/babel-plugin-named-exports-order": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", - "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", - "dev": true - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", - "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", + "node_modules/@storybook/client-logger": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "@storybook/global": "^5.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", - "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", + "node_modules/@storybook/codemod": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1", - "core-js-compat": "^3.31.0" + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/csf-tools": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/cross-spawn": "^6.0.2", + "cross-spawn": "^7.0.3", + "globby": "^11.0.2", + "jscodeshift": "^0.14.0", + "lodash": "^4.17.21", + "prettier": "^2.8.0", + "recast": "^0.23.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", - "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", + "node_modules/@storybook/codemod/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-react-docgen": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", - "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", - "dev": true, - "dependencies": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", - "dev": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "node_modules/@storybook/codemod/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@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-top-level-await": "^7.8.3" + "@storybook/global": "^5.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "node_modules/@storybook/codemod/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ts-dedent": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "node_modules/@storybook/codemod/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/better-opn": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", - "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "node_modules/@storybook/codemod/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "open": "^7.0.3" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, - "engines": { - "node": ">8.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/better-opn/node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/@storybook/components": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" + "@storybook/client-logger": "7.0.26", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.0.26", + "@storybook/types": "7.0.26", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "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==", - "dev": true, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "node_modules/@storybook/core-client": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "@storybook/client-logger": "7.0.26", + "@storybook/preview-api": "7.0.26" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "node_modules/@storybook/core-common": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "big-integer": "^1.6.44" + "@storybook/node-logger": "7.0.26", + "@storybook/types": "7.0.26", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.17.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^8.1.0", + "glob-promise": "^6.0.2", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">= 5.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "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==", + "node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "16.18.38", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "license": "MIT" }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/browser-assert": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", - "dev": true - }, - "node_modules/browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", - "dev": true, - "dependencies": { - "pako": "~0.2.0" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "node_modules/@storybook/core-common/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/@storybook/core-common/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "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==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 0.8" + "node": ">=7.0.0" } }, - "node_modules/c8": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", - "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", + "node_modules/@storybook/core-common/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=10.12.0" - } + "license": "MIT" }, - "node_modules/c8/node_modules/find-up": { + "node_modules/@storybook/core-common/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -9558,11 +9053,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/locate-path": { + "node_modules/@storybook/core-common/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -9573,11 +9075,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/p-limit": { + "node_modules/@storybook/core-common/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9588,11 +9089,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/p-locate": { + "node_modules/@storybook/core-common/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9603,786 +9103,887 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/@storybook/core-common/node_modules/pkg-dir": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "find-up": "^5.0.0" }, - "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==", - "dev": true, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/@storybook/core-common/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/@storybook/core-events": { + "version": "7.0.26", "dev": true, - "engines": { - "node": ">=10" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "node_modules/@storybook/core-server": { + "version": "7.4.6", "dev": true, + "license": "MIT", + "dependencies": { + "@aw-web-design/x-default-browser": "1.4.126", + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-manager": "7.4.6", + "@storybook/channels": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/csf-tools": "7.4.6", + "@storybook/docs-mdx": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/telemetry": "7.4.6", + "@storybook/types": "7.4.6", + "@types/detect-port": "^1.3.0", + "@types/node": "^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "@types/semver": "^7.3.4", + "better-opn": "^3.0.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "compression": "^1.7.4", + "detect-port": "^1.3.0", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "ws": "^8.2.3" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "node_modules/@storybook/core-server/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "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==", + "node_modules/@storybook/core-server/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/@storybook/core-server/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@storybook/core-server/node_modules/@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">= 8.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ts-dedent": "^2.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/@storybook/core-server/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "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==", + "node_modules/@storybook/core-server/node_modules/@storybook/preview-api": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=6.0" + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "node_modules/@storybook/core-server/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "node_modules/@storybook/core-server/node_modules/@types/node": { + "version": "16.18.58", + "dev": true, + "license": "MIT" }, - "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "source-map": "~0.6.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/@storybook/core-server/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, - "engines": { - "node": ">=6" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "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==", + "node_modules/@storybook/core-server/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "del": "^4.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10" }, - "peerDependencies": { - "webpack": ">=4.0.0 <6.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@storybook/core-server/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "node_modules/@storybook/core-server/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/core-server/node_modules/esbuild": { + "version": "0.18.20", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/core-server/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "node_modules/@storybook/core-server/node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", "dependencies": { - "string-width": "^4.2.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">=14" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "node_modules/@storybook/core-server/node_modules/glob": { + "version": "10.3.10", "dev": true, + "license": "ISC", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "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": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cli-truncate/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==", + "node_modules/@storybook/core-server/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/cli-truncate/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==", + "node_modules/@storybook/core-server/node_modules/locate-path": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/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==", + "node_modules/@storybook/core-server/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "ansi-regex": "^6.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" + } + }, + "node_modules/@storybook/core-server/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/@storybook/core-server/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">= 10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/@storybook/core-server/node_modules/p-locate": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/@storybook/core-server/node_modules/pkg-dir": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, "engines": { - "node": ">=0.8" + "node": ">=10" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/@storybook/core-server/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/@storybook/core-server/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, + "license": "ISC", "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "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==", + "node_modules/@storybook/core-server/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "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==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "node_modules/@storybook/core-server/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "license": "ISC" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@storybook/core-webpack": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "@storybook/core-common": "7.0.26", + "@storybook/node-logger": "7.0.26", + "@storybook/types": "7.0.26", + "@types/node": "^16.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "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==", - "dev": true - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true + "node_modules/@storybook/core-webpack/node_modules/@types/node": { + "version": "16.18.38", + "dev": true, + "license": "MIT" }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "node_modules/@storybook/csf": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^2.19.0" + } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/@storybook/csf-plugin": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "@storybook/csf-tools": "7.4.6", + "unplugin": "^1.3.1" }, - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/@storybook/csf-tools": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/types": "7.4.6", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@storybook/csf-tools/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/@storybook/csf-tools/node_modules/@storybook/client-logger": { + "version": "7.4.6", "dev": true, - "engines": [ - "node >= 0.8" - ], + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/@storybook/csf-tools/node_modules/@storybook/core-events": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/@storybook/csf-tools/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/@storybook/csf/node_modules/type-fest": { + "version": "2.19.0", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=0.8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true + "node_modules/@storybook/docs-mdx": { + "version": "0.1.0", + "dev": true, + "license": "MIT" }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/@storybook/docs-tools": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "@babel/core": "^7.12.10", + "@storybook/core-common": "7.0.26", + "@storybook/preview-api": "7.0.26", + "@storybook/types": "7.0.26", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" }, - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/@storybook/global": { + "version": "5.0.0", "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true + "license": "MIT" }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/@storybook/instrumenter": { + "version": "7.0.26", "dev": true, - "engines": { - "node": ">= 0.6" + "license": "MIT", + "dependencies": { + "@storybook/channels": "7.0.26", + "@storybook/client-logger": "7.0.26", + "@storybook/core-events": "7.0.26", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.0.26" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "node_modules/@storybook/manager": { + "version": "7.4.6", "dev": true, - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "node_modules/@storybook/manager-api": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" + "@storybook/channels": "7.0.26", + "@storybook/client-logger": "7.0.26", + "@storybook/core-events": "7.0.26", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.0.26", + "@storybook/theming": "7.0.26", + "@storybook/types": "7.0.26", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.0.3", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "webpack": "^5.1.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/copy-webpack-plugin/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==", + "node_modules/@storybook/manager-api/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "node_modules/@storybook/manager-api/node_modules/semver": { + "version": "7.5.3", "dev": true, + "license": "ISC", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/copy-webpack-plugin/node_modules/slash": { + "node_modules/@storybook/manager-api/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "node_modules/@storybook/mdx2-csf": { + "version": "1.1.0", "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/node-logger": { + "version": "7.0.26", + "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.21.5" + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/storybook" } }, - "node_modules/core-js-pure": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz", - "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==", + "node_modules/@storybook/node-logger/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/@storybook/node-logger/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "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" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/@storybook/node-logger/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8" + "node": ">=7.0.0" } }, - "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==", + "node_modules/@storybook/node-logger/node_modules/color-name": { + "version": "1.1.4", "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/node-logger/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "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==", + "node_modules/@storybook/node-logger/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "node_modules/@storybook/postinstall": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preset-react-webpack": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "@babel/preset-flow": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", + "@storybook/core-webpack": "7.0.26", + "@storybook/docs-tools": "7.0.26", + "@storybook/node-logger": "7.0.26", + "@storybook/react": "7.0.26", + "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", + "@types/node": "^16.0.0", + "@types/semver": "^7.3.4", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-react-docgen": "^4.2.1", + "fs-extra": "^11.1.0", + "react-refresh": "^0.11.0", + "semver": "^7.3.7", + "webpack": "5" }, "engines": { - "node": ">= 12.13.0" + "node": ">=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "webpack": "^5.0.0" + "@babel/core": "^7.11.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/css-loader/node_modules/lru-cache": { + "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { + "version": "16.18.38", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/preset-react-webpack/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==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10390,11 +9991,10 @@ "node": ">=10" } }, - "node_modules/css-loader/node_modules/semver": { + "node_modules/@storybook/preset-react-webpack/node_modules/semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10405,3075 +10005,2287 @@ "node": ">=10" } }, - "node_modules/css-loader/node_modules/yallist": { + "node_modules/@storybook/preset-react-webpack/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/@storybook/preview": { + "version": "7.0.26", "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/fb55" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "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==", + "node_modules/@storybook/preview-api": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" + "@storybook/channel-postmessage": "7.0.26", + "@storybook/channels": "7.0.26", + "@storybook/client-logger": "7.0.26", + "@storybook/core-events": "7.0.26", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.0.26", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "node_modules/@storybook/react": { + "version": "7.0.26", "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.0.26", + "@storybook/core-client": "7.0.26", + "@storybook/docs-tools": "7.0.26", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.0.26", + "@storybook/react-dom-shim": "7.0.26", + "@storybook/types": "7.0.26", + "@types/escodegen": "^0.0.6", + "@types/estree": "^0.0.51", + "@types/node": "^16.0.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "escodegen": "^2.0.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^15.0.0", + "ts-dedent": "^2.0.0", + "type-fest": "^2.19.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">= 6" + "node": ">=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "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==", + "node_modules/@storybook/react-docgen-typescript-plugin": { + "version": "1.0.6--canary.9.0c3f3b7.0", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.2.2", + "tslib": "^2.0.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "typescript": ">= 4.x", + "webpack": ">= 4" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "node_modules/@storybook/react-dom-shim": { + "version": "7.0.26", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/@storybook/react-webpack5": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "cssom": "~0.3.6" + "@storybook/builder-webpack5": "7.0.26", + "@storybook/preset-react-webpack": "7.0.26", + "@storybook/react": "7.0.26", + "@types/node": "^16.0.0" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.11.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "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==", - "dev": true + "node_modules/@storybook/react-webpack5/node_modules/@types/node": { + "version": "16.18.38", + "dev": true, + "license": "MIT" }, - "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/@storybook/react/node_modules/@types/estree": { + "version": "0.0.51", + "dev": true, + "license": "MIT" }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "node_modules/@storybook/react/node_modules/@types/node": { + "version": "16.18.38", "dev": true, - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/data-urls/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "node_modules/@storybook/react/node_modules/acorn": { + "version": "7.4.1", "dev": true, - "dependencies": { - "punycode": "^2.1.1" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=12" + "node": ">=0.4.0" } }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "node_modules/@storybook/react/node_modules/type-fest": { + "version": "2.19.0", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "node_modules/@storybook/router": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "@storybook/client-logger": "7.0.26", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" }, - "engines": { - "node": ">=12" - } - }, - "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" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-equal": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", + "node_modules/@storybook/store": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "@storybook/client-logger": "7.0.26", + "@storybook/preview-api": "7.0.26" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": 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/@storybook/telemetry": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/csf-tools": "7.4.6", + "chalk": "^4.1.0", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^11.1.0", + "read-pkg-up": "^7.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } }, - "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==", + "node_modules/@storybook/telemetry/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "node_modules/@storybook/telemetry/node_modules/@storybook/channels": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry/node_modules/@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/@storybook/telemetry/node_modules/@storybook/core-common": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": ">= 10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/@storybook/telemetry/node_modules/@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/@storybook/telemetry/node_modules/@storybook/node-logger": { + "version": "7.4.6", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/@storybook/telemetry/node_modules/@storybook/types": { + "version": "7.4.6", "dev": true, + "license": "MIT", "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/defu": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", - "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", - "dev": true + "node_modules/@storybook/telemetry/node_modules/@types/node": { + "version": "16.18.58", + "dev": true, + "license": "MIT" }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "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" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/@storybook/telemetry/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "balanced-match": "^1.0.0" } }, - "node_modules/del/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@storybook/telemetry/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "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" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/@storybook/telemetry/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.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==", + "node_modules/@storybook/telemetry/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "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==", + "node_modules/@storybook/telemetry/node_modules/esbuild": { + "version": "0.18.20", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@storybook/telemetry/node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/@storybook/telemetry/node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/@storybook/telemetry/node_modules/glob": { + "version": "10.3.10", "dev": true, + "license": "ISC", + "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": ">= 0.8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/@storybook/telemetry/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@storybook/telemetry/node_modules/locate-path": { + "version": "6.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "node_modules/@storybook/telemetry/node_modules/minimatch": { + "version": "9.0.3", "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/detect-newline": { + "node_modules/@storybook/telemetry/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/detect-package-manager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", - "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", + "node_modules/@storybook/telemetry/node_modules/p-locate": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.1.1" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "node_modules/@storybook/telemetry/node_modules/pkg-dir": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "address": "^1.0.1", - "debug": "4" + "find-up": "^5.0.0" }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "engines": { + "node": ">=10" } }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "node_modules/@storybook/telemetry/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, + "license": "ISC", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "node_modules/@storybook/telemetry/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "node_modules/@storybook/testing-library": { + "version": "0.0.14-next.2", "dev": true, + "license": "MIT", "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" + "@storybook/client-logger": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", + "@storybook/instrumenter": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", + "@testing-library/dom": "^8.3.0", + "@testing-library/user-event": "^13.2.1", + "ts-dedent": "^2.2.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/@storybook/theming": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.0.26", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "node_modules/@storybook/types": { + "version": "7.0.26", "dev": true, + "license": "MIT", "dependencies": { - "utila": "~0.4" + "@storybook/channels": "7.0.26", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.8.4", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "remove-accents": "0.4.2" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/kentcdodds" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" + "node_modules/@tanstack/query-core": { + "version": "4.35.3", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "4.35.3", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "4.35.3", + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-native": "*" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true } - ] + } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "node_modules/@tanstack/react-query-devtools": { + "version": "4.35.3", "dev": true, + "license": "MIT", "dependencies": { - "webidl-conversions": "^7.0.0" + "@tanstack/match-sorter-utils": "^8.7.0", + "superjson": "^1.10.0", + "use-sync-external-store": "^1.2.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^4.35.3", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "node_modules/@testing-library/dom": { + "version": "8.20.1", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, "engines": { "node": ">=12" } }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.2.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 4" + "node": ">=8" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", "dev": true, + "license": "Apache-2.0", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "deep-equal": "^2.0.5" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "engines": { - "node": ">=12" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/dotenv-defaults": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", - "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "dotenv": "^8.2.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/dotenv-defaults/node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/dotenv-webpack": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.0.1.tgz", - "integrity": "sha512-CdrgfhZOnx4uB18SgaoP9XHRN2v48BbjuXQsZY5ixs5A8579NxQkmMxRtI7aTwSiSQcM2ao12Fdu+L3ZS3bG4w==", + "node_modules/@testing-library/react": { + "version": "14.0.0", "dev": true, + "license": "MIT", "dependencies": { - "dotenv-defaults": "^2.0.2" + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "peerDependencies": { - "webpack": "^4 || ^5" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "9.3.1", "dev": true, + "license": "MIT", "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" } }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/@testing-library/react/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", "dev": true, + "license": "Apache-2.0", "dependencies": { - "safe-buffer": "~5.1.0" + "deep-equal": "^2.0.5" } }, - "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/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "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==", + "node_modules/@testing-library/react/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.450", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", - "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/@testing-library/react/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 4" + "node": ">=7.0.0" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/@testing-library/react/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">= 0.8" - } + "license": "MIT" }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/@testing-library/react/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "once": "^1.4.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/endent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", - "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "node_modules/@testing-library/react/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "node_modules/@testing-library/user-event": { + "version": "13.5.0", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@babel/runtime": "^7.12.5" }, "engines": { - "node": ">=10.13.0" + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" } }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "license": "MIT", + "engines": { + "node": ">= 10" } }, - "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "node_modules/@types/aria-query": { + "version": "5.0.1", "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "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==", + "node_modules/@types/babel__core": { + "version": "7.20.1", "dev": true, + "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "node_modules/@types/babel__generator": { + "version": "7.6.4", "dev": true, + "license": "MIT", "dependencies": { - "stackframe": "^1.3.4" + "@babel/types": "^7.0.0" } }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "node_modules/@types/babel__template": { + "version": "7.4.1", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/@types/babel__traverse": { + "version": "7.20.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/types": "^7.20.7" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true + "node_modules/@types/body-parser": { + "version": "1.19.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/@types/bonjour": { + "version": "3.5.10", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@types/node": "*" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/@types/connect": { + "version": "3.4.35", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "@types/node": "*" } }, - "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==", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", "dev": true, + "license": "MIT", "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" + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true + "node_modules/@types/cookie": { + "version": "0.4.1", + "license": "MIT" }, - "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "node_modules/@types/cross-spawn": { + "version": "6.0.3", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/esbuild-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.0.2.tgz", - "integrity": "sha512-kj88m0yrtTEJDeUEF+3TZsq7t9VPzQQj7UmXAzUbIaipoYSrd0UxKAcg4l9CBgP8uVoploiw+nKr8DIv6Y9gXw==", - "dev": true, + "node_modules/@types/debug": { + "version": "4.1.8", + "license": "MIT", "dependencies": { - "esbuild": "^0.19.0", - "get-tsconfig": "^4.7.0", - "loader-utils": "^2.0.4", - "webpack-sources": "^1.4.3" - }, - "funding": { - "url": "https://github.com/esbuild-kit/esbuild-loader?sponsor=1" - }, - "peerDependencies": { - "webpack": "^4.40.0 || ^5.0.0" + "@types/ms": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/android-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", - "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", - "cpu": [ - "arm" - ], + "node_modules/@types/detect-port": { + "version": "1.3.3", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/android-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", - "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", - "cpu": [ - "arm64" - ], + "node_modules/@types/doctrine": { + "version": "0.0.3", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/android-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", - "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", - "cpu": [ - "x64" - ], + "node_modules/@types/ejs": { + "version": "3.1.3", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", - "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", - "cpu": [ - "arm64" - ], + "node_modules/@types/emscripten": { + "version": "1.39.8", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/darwin-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", - "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", - "cpu": [ - "x64" - ], + "node_modules/@types/escodegen": { + "version": "0.0.6", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", - "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", - "cpu": [ - "arm64" - ], + "node_modules/@types/eslint": { + "version": "8.40.2", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", - "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", - "cpu": [ - "x64" - ], + "node_modules/@types/eslint-scope": { + "version": "3.7.4", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", - "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", - "cpu": [ - "arm" - ], + "node_modules/@types/estree": { + "version": "1.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", - "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", - "cpu": [ - "arm64" - ], + "node_modules/@types/express": { + "version": "4.17.17", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", - "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", - "cpu": [ - "ia32" - ], + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-loong64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", - "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", - "cpu": [ - "loong64" - ], + "node_modules/@types/find-cache-dir": { + "version": "3.2.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", - "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", - "cpu": [ - "mips64el" - ], + "node_modules/@types/glob": { + "version": "7.2.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", - "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", - "cpu": [ - "ppc64" - ], + "node_modules/@types/graceful-fs": { + "version": "4.1.6", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", - "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", - "cpu": [ - "riscv64" - ], + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-s390x": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", - "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", - "cpu": [ - "s390x" - ], + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/linux-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", - "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", - "cpu": [ - "x64" - ], + "node_modules/@types/http-errors": { + "version": "2.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", - "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", - "cpu": [ - "x64" - ], + "node_modules/@types/http-proxy": { + "version": "1.17.11", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", - "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", - "cpu": [ - "x64" - ], + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/esbuild-loader/node_modules/@esbuild/sunos-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", - "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", - "cpu": [ - "x64" - ], + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/win32-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", - "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", - "cpu": [ - "arm64" - ], + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/win32-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", - "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", - "cpu": [ - "ia32" - ], + "node_modules/@types/jest": { + "version": "29.5.2", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/esbuild-loader/node_modules/@esbuild/win32-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", - "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", - "cpu": [ - "x64" - ], + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/esbuild-loader/node_modules/esbuild": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", - "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.2", - "@esbuild/android-arm64": "0.19.2", - "@esbuild/android-x64": "0.19.2", - "@esbuild/darwin-arm64": "0.19.2", - "@esbuild/darwin-x64": "0.19.2", - "@esbuild/freebsd-arm64": "0.19.2", - "@esbuild/freebsd-x64": "0.19.2", - "@esbuild/linux-arm": "0.19.2", - "@esbuild/linux-arm64": "0.19.2", - "@esbuild/linux-ia32": "0.19.2", - "@esbuild/linux-loong64": "0.19.2", - "@esbuild/linux-mips64el": "0.19.2", - "@esbuild/linux-ppc64": "0.19.2", - "@esbuild/linux-riscv64": "0.19.2", - "@esbuild/linux-s390x": "0.19.2", - "@esbuild/linux-x64": "0.19.2", - "@esbuild/netbsd-x64": "0.19.2", - "@esbuild/openbsd-x64": "0.19.2", - "@esbuild/sunos-x64": "0.19.2", - "@esbuild/win32-arm64": "0.19.2", - "@esbuild/win32-ia32": "0.19.2", - "@esbuild/win32-x64": "0.19.2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/esbuild-loader/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==", + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } + "license": "MIT" }, - "node_modules/esbuild-plugin-alias": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz", - "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==", - "dev": true + "node_modules/@types/js-levenshtein": { + "version": "1.1.1", + "license": "MIT" }, - "node_modules/esbuild-register": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz", - "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==", + "node_modules/@types/jsdom": { + "version": "20.0.1", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.3.4" - }, - "peerDependencies": { - "esbuild": ">=0.12 <1" + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } + "node_modules/@types/json-schema": { + "version": "7.0.12", + "dev": true, + "license": "MIT" }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" }, - "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/@types/lodash": { + "version": "4.14.195", + "dev": true, + "license": "MIT" }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/@types/mdx": { + "version": "2.0.8", "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } + "license": "MIT" }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/@types/mime": { + "version": "1.3.2", "dev": true, - "engines": { - "node": ">=4.0" - } + "license": "MIT" }, - "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "node_modules/@types/mime-types": { + "version": "2.1.2", "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "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.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "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", - "import-fresh": "^3.0.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", - "strip-json-comments": "^3.1.0", - "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" - } + "license": "MIT" }, - "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "node_modules/@types/minimatch": { + "version": "5.1.2", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } + "license": "MIT" }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "node_modules/@types/ms": { + "version": "0.7.31", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.3.3", + "license": "MIT" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.4", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" + "@types/node": "*", + "form-data": "^3.0.0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/npmlog": { + "version": "4.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pretty-hrtime": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.14", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, - "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==", + "node_modules/@types/react-dom": { + "version": "18.2.6", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@types/react": "*" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "node_modules/@types/react-gtm-module": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.1", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "@types/mime": "^1", + "@types/node": "*" } }, - "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==", + "node_modules/@types/serve-index": { + "version": "1.9.1", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@types/express": "*" } }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "node_modules/@types/serve-static": { + "version": "1.15.2", "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dev": true, + "node_modules/@types/set-cookie-parser": { + "version": "2.4.2", + "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "@types/node": "*" } }, - "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==", + "node_modules/@types/sockjs": { + "version": "0.3.33", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "@types/node": "*" } }, - "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==", + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/styled-components": { + "version": "5.1.26", "dev": true, + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" } }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "node_modules/@types/stylis": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "@types/node": "*" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "node_modules/@types/yargs": { + "version": "17.0.24", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "@types/yargs-parser": "*" } }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.61.0", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/type-utils": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "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" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "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==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "esutils": "^2.0.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.3", "dev": true, + "license": "ISC", "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "lru-cache": "^6.0.0" }, "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-storybook": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.12.tgz", - "integrity": "sha512-XbIvrq6hNVG6rpdBr+eBw63QhOMLpZneQVSooEDow8aQCWGCk/5vqtap1yxpVydNfSxi3S/3mBBRLQqKUqQRww==", - "dev": true, - "dependencies": { - "@storybook/csf": "^0.0.1", - "@typescript-eslint/utils": "^5.45.0", - "requireindex": "^1.1.0", - "ts-dedent": "^2.2.0" + "semver": "bin/semver.js" }, "engines": { - "node": "12.x || 14.x || >= 16" - }, - "peerDependencies": { - "eslint": ">=6" + "node": ">=10" } }, - "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "lodash": "^4.17.15" - } + "license": "ISC" }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.0.tgz", - "integrity": "sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.61.0", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^5.58.0" + "@typescript-eslint/utils": "5.61.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "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==", + "node_modules/@typescript-eslint/parser": { + "version": "5.61.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", + "debug": "^4.3.4" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "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==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.61.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "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==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.61.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@typescript-eslint/typescript-estree": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "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" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "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/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==", + "node_modules/@typescript-eslint/types": { + "version": "5.61.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.61.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/eslint/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==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.3", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/eslint/node_modules/has-flag": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { "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" - } + "license": "ISC" }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/eslint/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==", + "node_modules/@typescript-eslint/utils": { + "version": "5.61.0", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint/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==", + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "yocto-queue": "^0.1.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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==", + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.3", "dev": true, + "license": "ISC", "dependencies": { - "p-limit": "^3.0.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.61.0", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "5.61.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } + "license": "MIT" }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", "dev": true, - "engines": { - "node": ">=4.0" - } + "license": "MIT" }, - "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==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } + "license": "MIT" }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", "dev": true, - "engines": { - "node": ">=4.0" + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", "dev": true, - "engines": { - "node": ">=4.0" - } + "license": "MIT" }, - "node_modules/estree-to-babel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", - "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" - }, - "engines": { - "node": ">=8.3.0" + "@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/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", "dev": true, - "engines": { - "node": ">= 0.6" + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "dev": true, + "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "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/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "@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/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", "dev": true, - "engines": { - "node": ">= 0.8.0" + "license": "MIT", + "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/expect": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-AV+HaBtnDJ2YEUhPPo25HyUHBLaetM+y/Dq6pEC8VPQyt1dK+k8MfGkMy46djy2bddcqESc1kl4/K1uLWSfk9g==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.6.0", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@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/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", "dev": true, + "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", "dev": true, - "dependencies": { - "ms": "2.0.0" + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", "dev": true, - "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" + "license": "MIT", + "engines": { + "node": ">=14.15.0" }, - "bin": { - "extract-zip": "cli.js" + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/extract-zip/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node_modules/@xmldom/xmldom": { + "version": "0.8.9", + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "node_modules/@yarnpkg/esbuild-plugin-pnp": { + "version": "3.0.0-rc.15", "dev": true, + "license": "BSD-2-Clause", "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" + "tslib": "^2.4.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=14.15.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.0" } }, - "node_modules/fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "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/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/@yarnpkg/fslib": { + "version": "2.10.3", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, "engines": { - "node": ">= 4.9.1" + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } + "license": "0BSD" }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "websocket-driver": ">=0.5.1" + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "dependencies": { - "bser": "2.1.1" - } + "license": "0BSD" }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "license": "(Unlicense OR Apache-2.0)", + "optional": true }, - "node_modules/fetch-retry": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", - "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==", - "dev": true + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "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==", + "node_modules/acorn": { + "version": "8.10.0", "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.4.0" } }, - "node_modules/file-system-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", - "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "node_modules/acorn-globals": { + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { - "fs-extra": "11.1.1", - "ramda": "0.29.0" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, - "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==", + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "8.2.0", "dev": true, - "dependencies": { - "minimatch": "^5.0.1" + "license": "MIT", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/filelist/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==", + "node_modules/acorn-import-assertions": { + "version": "1.9.0", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "license": "MIT", + "peerDependencies": { + "acorn": "^8" } }, - "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==", + "node_modules/acorn-jsx": { + "version": "5.3.2", "dev": true, - "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" + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/acorn-walk": { + "version": "7.2.0", "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=0.4.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/address": { + "version": "1.2.2", "dev": true, - "dependencies": { - "ms": "2.0.0" + "license": "MIT", + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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==", + "node_modules/agent-base": { + "version": "6.0.2", "dev": true, + "license": "MIT", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "debug": "4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "node": ">= 6.0.0" } }, - "node_modules/find-cache-dir/node_modules/make-dir": { + "node_modules/aggregate-error": { "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==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/aggregate-error/node_modules/indent-string": { + "version": "4.0.0", "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/ajv": { + "version": "8.12.0", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/flow-parser": { - "version": "0.211.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.211.0.tgz", - "integrity": "sha512-Ftqkqisn4MA8u+1I7KGYz35y/RtLsRETsK4qrH6KkDUjxnC4mgq3CcXbckHpGyfTErqMyVhJnlJ56feEn9Cn7A==", - "dev": true, - "engines": { - "node": ">=0.4.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "node_modules/ajv-formats": { + "version": "2.1.1", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" }, "peerDependenciesMeta": { - "debug": { + "ajv": { "optional": 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": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "node_modules/ajv-keywords": { + "version": "5.1.0", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", - "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", - "dev": true, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" + "node": ">=8" }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fork-ts-checker-webpack-plugin/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==", + "node_modules/ansi-html-community": { + "version": "0.0.8", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" } }, - "node_modules/fork-ts-checker-webpack-plugin/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" - }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/fork-ts-checker-webpack-plugin/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, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/fork-ts-checker-webpack-plugin/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/app-root-dir": { + "version": "1.0.2", + "dev": true, + "license": "MIT" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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==", + "node_modules/aproba": { + "version": "2.0.0", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "license": "ISC" }, - "node_modules/fork-ts-checker-webpack-plugin/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==", + "node_modules/are-we-there-yet": { + "version": "2.0.0", "dev": true, + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { "node": ">=10" } }, - "node_modules/fork-ts-checker-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==", + "node_modules/argparse": { + "version": "2.0.1", "dev": 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" - } + "license": "Python-2.0" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/aria-hidden": { + "version": "1.2.3", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "tslib": "^2.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/fork-ts-checker-webpack-plugin/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==", + "node_modules/aria-query": { + "version": "5.3.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "dequal": "^2.0.3" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/array-flatten": { + "version": "2.1.2", "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "license": "MIT" }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "node_modules/array-includes": { + "version": "3.1.6", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" }, "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" + "node": ">= 0.4" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/array-union": { + "version": "2.1.0", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/array-uniq": { + "version": "1.0.3", + "dev": true, + "license": "MIT", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/array.prototype.flat": { + "version": "1.3.1", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13482,117 +12294,89 @@ "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==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" } }, - "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==", + "node_modules/assert": { + "version": "2.1.0", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, - "node_modules/get-npm-tarball-url": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz", - "integrity": "sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==", + "node_modules/ast-types": { + "version": "0.14.2", "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, "engines": { - "node": ">=12.17" + "node": ">=4" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/ast-types-flow": { + "version": "0.0.7", "dev": true, - "engines": { - "node": ">=8.0.0" - } + "license": "ISC" }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "node_modules/astral-regex": { + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/async": { + "version": "3.2.4", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/async-limiter": { + "version": "1.0.1", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -13600,672 +12384,508 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "node_modules/axe-core": { + "version": "4.7.2", "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "license": "MPL-2.0", + "engines": { + "node": ">=4" } }, - "node_modules/giget": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.2.tgz", - "integrity": "sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==", + "node_modules/axobject-query": { + "version": "3.2.1", "dev": true, + "license": "Apache-2.0", "dependencies": { - "colorette": "^2.0.19", - "defu": "^6.1.2", - "https-proxy-agent": "^5.0.1", - "mri": "^1.2.0", - "node-fetch-native": "^1.0.2", - "pathe": "^1.1.0", - "tar": "^6.1.13" - }, - "bin": { - "giget": "dist/cli.mjs" + "dequal": "^2.0.3" } }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "dev": true + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/babel-jest": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "@jest/transform": "^29.6.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "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==", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/glob-promise": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-6.0.3.tgz", - "integrity": "sha512-m+kxywR5j/2Z2V9zvHKfwwL5Gp7gIFEBX+deTB9w2lJB+wSuw9kcS43VfvTAMk8TXL5JCl/cCjsR+tgNVspGyA==", + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@types/glob": "^8.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "type": "individual", - "url": "https://github.com/sponsors/ahmadnassri" - }, - "peerDependencies": { - "glob": "^8.0.3" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/glob-promise/node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "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==", - "dev": true + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/glob/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==", + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "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==", + "node_modules/babel-loader": { + "version": "9.1.2", "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/babel-plugin-add-react-displayname": { + "version": "0.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "define-properties": "^1.1.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", "dev": true, + "license": "MIT", "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" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10", + "npm": ">=6" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "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/babel-plugin-named-exports-order": { + "version": "0.0.2", + "dev": true, + "license": "MIT" }, - "node_modules/graphql": { - "version": "16.7.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.7.1.tgz", - "integrity": "sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/gunzip-maybe": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", - "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.5", "dev": true, + "license": "MIT", "dependencies": { - "browserify-zlib": "^0.1.4", - "is-deflate": "^1.0.0", - "is-gzip": "^1.0.0", - "peek-stream": "^1.1.0", - "pumpify": "^1.3.3", - "through2": "^2.0.3" + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.32.2" }, - "bin": { - "gunzip-maybe": "bin.js" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.3", "dev": true, + "license": "MIT", "dependencies": { - "duplexer": "^0.1.2" + "@babel/helper-define-polyfill-provider": "^0.4.3" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "node_modules/babel-plugin-react-docgen": { + "version": "4.2.1", "dev": true, + "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" } }, - "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==", + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", "dev": true, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "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" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/headers-polyfill": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.1.2.tgz", - "integrity": "sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==" - }, - "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==", - "dev": true, - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/babel-preset-react-app": { + "version": "10.0.1", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/balanced-match": { + "version": "1.0.2", "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, + "node_modules/base64-js": { + "version": "1.5.1", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/mdevils" + "url": "https://github.com/sponsors/feross" }, { "type": "patreon", - "url": "https://patreon.com/mdevils" + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "node_modules/better-opn": { + "version": "3.0.2", "dev": true, + "license": "MIT", "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" + "open": "^8.0.4" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/big-integer": { + "version": "1.6.51", "dev": true, + "license": "Unlicense", "engines": { - "node": ">= 12" + "node": ">=0.6" } }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "node_modules/big.js": { + "version": "5.2.2", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/html-webpack-plugin": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", - "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "license": "MIT", "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" + "node": ">=8" } }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], + "node_modules/bl": { + "version": "4.1.0", + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/body-parser": { + "version": "1.20.1", "dev": true, + "license": "MIT", "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 0.8" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", "dev": true, + "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "ms": "2.0.0" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/boolbase": { + "version": "1.0.0", "dev": true, + "license": "ISC" + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "big-integer": "^1.6.44" }, "engines": { - "node": ">= 6" + "node": ">= 5.10.0" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "engines": { - "node": ">=10.17.0" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "node": ">=8" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/browser-assert": { + "version": "1.2.1", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.1.4", + "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "pako": "~0.2.0" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/bser": { + "version": "2.1.1", "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/buffer": { + "version": "5.7.1", "funding": [ { "type": "github", @@ -14279,1391 +12899,1140 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/buffer-crc32": { + "version": "0.2.13", "dev": true, + "license": "MIT", "engines": { - "node": ">= 4" + "node": "*" } }, - "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==", + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "7.14.0", "dev": true, + "license": "ISC", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" }, "engines": { - "node": ">=6" + "node": ">=10.12.0" + } + }, + "node_modules/c8/node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/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==", + "node_modules/c8/node_modules/locate-path": { + "version": "6.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { + "node_modules/c8/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, + "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "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==", + "node_modules/c8/node_modules/p-locate": { + "version": "5.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "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==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/inquirer": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "node_modules/call-bind": { + "version": "1.0.2", + "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, - "engines": { - "node": ">=12.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inquirer/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" - }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/inquirer/node_modules/chalk": { + "node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/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/camelize": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inquirer/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/caniuse-lite": { + "version": "1.0.30001549", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/inquirer/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==", + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/inquirer/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==", + "node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "node_modules/char-regex": { + "version": "1.0.2", "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "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": ">= 0.4" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "node_modules/chownr": { + "version": "2.0.0", "dev": true, + "license": "ISC", "engines": { - "node": ">=10.13.0" + "node": ">=10" } }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "node_modules/chrome-trace-event": { + "version": "1.0.3", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=6.0" } }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "node_modules/ci-info": { + "version": "3.8.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.2", + "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "source-map": "~0.6.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/clean-stack": { + "version": "2.2.0", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "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==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/clean-webpack-plugin": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "del": "^4.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" } }, - "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==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "restore-cursor": "^3.1.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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/cli-table3": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, "engines": { - "node": ">= 0.4" + "node": "10.* || >= 12.*" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "node_modules/cli-truncate": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/is-deflate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", - "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", - "dev": true - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", "dev": true, - "bin": { - "is-docker": "cli.js" + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "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-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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "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" - }, + "node_modules/cli-width": { + "version": "3.0.0", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", + "node_modules/cliui": { + "version": "7.0.4", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/clone": { + "version": "1.0.4", + "license": "MIT", "engines": { - "node": ">=8" - } - }, - "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": ">=0.8" } }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "node_modules/clone-deep": { + "version": "4.0.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/co": { + "version": "4.6.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/is-node-process": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", - "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" - }, - "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/collect-v8-coverage": { + "version": "1.0.2", + "dev": true, + "license": "MIT" }, - "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==", + "node_modules/color-convert": { + "version": "1.9.3", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "color-name": "1.1.3" } }, - "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==", + "node_modules/color-name": { + "version": "1.1.3", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "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==", + "node_modules/color-support": { + "version": "1.1.3", "dev": true, - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" + "license": "ISC", + "bin": { + "color-support": "bin.js" } }, - "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==", + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", "dev": true, + "license": "MIT", "dependencies": { - "path-is-inside": "^1.0.2" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "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==", + "node_modules/commander": { + "version": "2.20.3", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/is-plain-obj": { + "node_modules/common-path-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/commondir": { + "version": "1.0.1", "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "dev": true, + "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "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==", + "node_modules/compression": { + "version": "1.7.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": ">= 0.8.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "2.0.0" } }, - "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==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "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==", + "node_modules/concat-map": { + "version": "0.0.1", "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "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==", + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "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==", + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "safe-buffer": "~5.1.0" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "node_modules/confusing-browser-globals": { + "version": "1.0.11", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/is-what": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.15.tgz", - "integrity": "sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==", + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "node": ">=0.8" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/content-disposition": { + "version": "0.5.4", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "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/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/content-type": { + "version": "1.0.5", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", + "node_modules/convert-source-map": { + "version": "1.9.0", "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } + "license": "MIT" }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "node_modules/cookie": { + "version": "0.5.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/cookie-signature": { + "version": "1.0.6", "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "node_modules/copy-anything": { + "version": "3.0.5", "dev": true, + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "is-what": "^4.1.8" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/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": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/istanbul-lib-report/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==", + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">= 14.15.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/istanbul-lib-report/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==", + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "node_modules/core-js-compat": { + "version": "3.33.0", "dev": true, + "license": "MIT", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" + "browserslist": "^4.22.1" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "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==", + "node_modules/core-js-pure": { + "version": "3.31.1", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, + "hasInstallScript": true, + "license": "MIT", "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "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==", + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@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" - }, - "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==", + "node_modules/cross-spawn": { + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "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==", - "dev": true - }, - "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==", + "node_modules/crypto-random-string": { + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "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==", + "node_modules/css-color-keywords": { + "version": "1.0.0", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.0.tgz", - "integrity": "sha512-do1J9gGrQ68E4UfMz/4OM71p9qCqQxu32N/9ZfeYFSSlx0uUOuxeyZxtJZNaUTW12ZA11ERhmBjBhy1Ho96R4g==", + "node_modules/css-loader": { + "version": "6.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^29.6.0", - "@jest/types": "^29.6.0", - "import-local": "^3.0.2", - "jest-cli": "^29.6.0" - }, - "bin": { - "jest": "bin/jest.js" + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 12.13.0" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-changed-files/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==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.3", "dev": true, + "license": "ISC", "dependencies": { - "yocto-queue": "^0.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.0.tgz", - "integrity": "sha512-LtG45qEKhse2Ws5zNR4DnZATReLGQXzBZGZnJ0DU37p6d4wDhu41vvczCQ3Ou+llR6CRYDBshsubV7H4jZvIkw==", + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/expect": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.0", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "ISC" }, - "node_modules/jest-circus/node_modules/ansi-styles": { + "node_modules/css-select": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/css-to-react-native": { + "version": "3.2.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">= 6" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/jest-circus/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==", + "node_modules/cssesc": { + "version": "3.0.0", "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/jest-circus/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/cssom": { + "version": "0.5.0", + "dev": true, + "license": "MIT" }, - "node_modules/jest-circus/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==", + "node_modules/cssstyle": { + "version": "2.3.0", "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, "engines": { "node": ">=8" } }, - "node_modules/jest-circus/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==", + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "3.0.2", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "punycode": "^2.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=12" } }, - "node_modules/jest-circus/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==", - "dev": true - }, - "node_modules/jest-circus/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==", + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/jest-cli": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.0.tgz", - "integrity": "sha512-WvZIaanK/abkw6s01924DQ2QLwM5Q4Y4iPbSDb9Zg6smyXGqqcPQ7ft9X8D7B0jICz312eSzM6UlQNxuZJBrMw==", - "dev": true, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", "dependencies": { - "@jest/core": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "ms": "2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=6.0" }, "peerDependenciesMeta": { - "node-notifier": { + "supports-color": { "optional": true } } }, - "node_modules/jest-cli/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==", + "node_modules/decimal.js": { + "version": "10.4.3", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "license": "MIT" }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/dedent": { + "version": "0.7.0", "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" - } + "license": "MIT" }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/deep-equal": { + "version": "2.2.1", "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/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==", + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } + "license": "MIT" }, - "node_modules/jest-cli/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/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/jest-cli/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==", + "node_modules/deepmerge": { + "version": "4.3.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-cli/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==", + "node_modules/default-browser-id": { + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/default-gateway": { + "version": "6.0.3", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "execa": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-config": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.0.tgz", - "integrity": "sha512-fKA4jM91PDqWVkMpb1FVKxIuhg3hC6hgaen57cr1rRZkR96dCatvJZsk3ik7/GNu9ERj9wgAspOmyvkFoGsZhA==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.0", - "@jest/types": "^29.6.0", - "babel-jest": "^29.6.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.0", - "jest-environment-node": "^29.6.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-runner": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">=8" } }, - "node_modules/jest-config/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==", + "node_modules/define-properties": { + "version": "1.2.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/defu": { + "version": "6.1.2", "dev": true, + "license": "MIT" + }, + "node_modules/del": { + "version": "4.1.1", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@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": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6" } }, - "node_modules/jest-config/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==", + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "array-uniq": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-config/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/jest-config/node_modules/glob": { + "node_modules/del/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15679,1312 +14048,1179 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-config/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/jest-config/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/del/node_modules/globby": { + "version": "6.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "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": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-config/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==", - "dev": true - }, - "node_modules/jest-config/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==", + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/jest-diff": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.0.tgz", - "integrity": "sha512-ZRm7cd2m9YyZ0N3iMyuo1iUiprxQ/MFpYWXzEEj7hjzL3WnDffKW8192XBDcrAI8j7hnrM1wed3bL/oEnYF/8w==", + "node_modules/delayed-stream": { + "version": "1.0.0", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.4.0" } }, - "node_modules/jest-diff/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==", + "node_modules/delegates": { + "version": "1.0.0", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/dequal": { + "version": "2.0.3", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6" } }, - "node_modules/jest-diff/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==", + "node_modules/destroy": { + "version": "1.2.0", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/jest-diff/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/jest-diff/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==", + "node_modules/detect-indent": { + "version": "6.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/detect-newline": { + "version": "3.1.0", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/detect-node": { + "version": "2.1.0", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "license": "MIT" }, - "node_modules/jest-diff/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==", - "dev": true + "node_modules/detect-node-es": { + "version": "1.1.0", + "dev": true, + "license": "MIT" }, - "node_modules/jest-diff/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==", + "node_modules/detect-package-manager": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "execa": "^5.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "node_modules/detect-port": { + "version": "1.5.1", "dev": true, + "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "address": "^1.0.1", + "debug": "4" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" } }, - "node_modules/jest-each": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.0.tgz", - "integrity": "sha512-d0Jem4RBAlFUyV6JSXPSHVUpNo5RleSj+iJEy1G3+ZCrzHDjWs/1jUfrbnJKHdJdAx5BCEce/Ju379WqHhQk4w==", + "node_modules/diff-sequences": { + "version": "29.4.3", "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.0", - "pretty-format": "^29.6.0" - }, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/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==", + "node_modules/dir-glob": { + "version": "3.0.1", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "path-type": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/dns-equal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6" } }, - "node_modules/jest-each/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==", + "node_modules/doctrine": { + "version": "3.0.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "esutils": "^2.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=6.0.0" } }, - "node_modules/jest-each/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/jest-each/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==", + "node_modules/dom-accessibility-api": { + "version": "0.5.16", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/dom-converter": { + "version": "0.2.0", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "utila": "~0.4" } }, - "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/dom-serializer": { + "version": "1.4.1", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/jest-each/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==", - "dev": true + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/jest-each/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==", + "node_modules/domexception": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/jest-environment-jsdom": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.0.tgz", - "integrity": "sha512-/cOhoyv+uMbOh4nQPyqtkPas/uUxr5AbK6TPqMMFyj1qEJURY78RhqgBjOFIX02+Lvu5V0RWLq2qKY1dHubFOQ==", + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/fake-timers": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.6.0", - "jest-util": "^29.6.0", - "jsdom": "^20.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=12" } }, - "node_modules/jest-environment-jsdom/node_modules/jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", + "node_modules/domhandler": { + "version": "4.3.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" + "domelementtype": "^2.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/jest-environment-node": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.0.tgz", - "integrity": "sha512-BOf5Q2/nFCdBOnyBM5c5/6DbdQYgc+0gyUQ8l8qhUAB8O7pM+4QJXIXJsRZJaxd5SHV6y5VArTVhOfogoqcP8Q==", + "node_modules/domutils": { + "version": "2.8.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/fake-timers": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-mock": "^29.6.0", - "jest-util": "^29.6.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/jest-environment-node/node_modules/jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", + "node_modules/dot-case": { + "version": "3.0.4", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, + "node_modules/dotenv": { + "version": "16.3.1", + "license": "BSD-2-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "node_modules/jest-haste-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.0.tgz", - "integrity": "sha512-dY1DKufptj7hcJSuhpqlYPGcnN3XjlOy/g0jinpRTMsbb40ivZHiuIPzeminOZkrek8C+oDxC54ILGO3vMLojg==", + "node_modules/dotenv-defaults": { + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.0", - "jest-worker": "^29.6.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "dotenv": "^8.2.0" } }, - "node_modules/jest-haste-map/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==", + "node_modules/dotenv-defaults/node_modules/dotenv": { + "version": "8.6.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-haste-map/node_modules/jest-worker": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", + "node_modules/dotenv-expand": { + "version": "10.0.0", "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/jest-haste-map/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==", + "node_modules/dotenv-webpack": { + "version": "8.0.1", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "dotenv-defaults": "^2.0.2" }, "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "peerDependencies": { + "webpack": "^4 || ^5" } }, - "node_modules/jest-leak-detector": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.0.tgz", - "integrity": "sha512-JdV6EZOPxHR1gd6ccxjNowuROkT2jtGU5G/g58RcJX1xe5mrtLj0g6/ZkyMoXF4cs+tTkHMFX6pcIrB1QPQwCw==", + "node_modules/duplexer": { + "version": "0.1.2", "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/duplexify": { + "version": "3.7.1", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/jest-leak-detector/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==", - "dev": true + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" }, - "node_modules/jest-matcher-utils": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.0.tgz", - "integrity": "sha512-oSlqfGN+sbkB2Q5um/zL7z80w84FEAcLKzXBZIPyRk2F2Srg1ubhrHVKW68JCvb2+xKzAeGw35b+6gciS24PHw==", + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/jest-matcher-utils/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==", + "node_modules/eastasianwidth": { + "version": "0.2.0", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } + "license": "MIT" }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/ee-first": { + "version": "1.1.1", "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" - } + "license": "MIT" }, - "node_modules/jest-matcher-utils/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==", + "node_modules/ejs": { + "version": "3.1.9", "dev": true, + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-matcher-utils/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/electron-to-chromium": { + "version": "1.4.556", + "dev": true, + "license": "ISC" }, - "node_modules/jest-matcher-utils/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==", + "node_modules/emittery": { + "version": "0.13.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/emoji-regex": { + "version": "9.2.2", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/encodeurl": { + "version": "1.0.2", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/jest-matcher-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==", - "dev": true - }, - "node_modules/jest-matcher-utils/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==", + "node_modules/end-of-stream": { + "version": "1.4.4", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "once": "^1.4.0" } }, - "node_modules/jest-message-util": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.0.tgz", - "integrity": "sha512-mkCp56cETbpoNtsaeWVy6SKzk228mMi9FPHSObaRIhbR2Ujw9PqjW/yqVHD2tN1bHbC8ol6h3UEo7dOPmIYwIA==", + "node_modules/endent": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" } }, - "node_modules/jest-message-util/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==", + "node_modules/enhanced-resolve": { + "version": "5.15.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10.13.0" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/entities": { + "version": "2.2.0", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, + "license": "BSD-2-Clause", "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/jest-message-util/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==", + "node_modules/envinfo": { + "version": "7.10.0", "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/jest-message-util/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/jest-message-util/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==", + "node_modules/error-ex": { + "version": "1.3.2", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/error-stack-parser": { + "version": "2.1.4", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "stackframe": "^1.3.4" } }, - "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/es-abstract": { + "version": "1.21.2", "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/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==", - "dev": true - }, - "node_modules/jest-message-util/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==", + "node_modules/es-get-iterator": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "license": "MIT" }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/es-module-lexer": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "node_modules/es-shim-unscopables": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "has": "^1.0.3" } }, - "node_modules/jest-mock/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==", + "node_modules/es-to-primitive": { + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-mock/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/esbuild": { + "version": "0.17.19", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" + "node": ">=12" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, - "node_modules/jest-mock/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==", + "node_modules/esbuild-loader": { + "version": "4.0.2", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "esbuild": "^0.19.0", + "get-tsconfig": "^4.7.0", + "loader-utils": "^2.0.4", + "webpack-sources": "^1.4.3" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "url": "https://github.com/esbuild-kit/esbuild-loader?sponsor=1" + }, + "peerDependencies": { + "webpack": "^4.40.0 || ^5.0.0" } }, - "node_modules/jest-mock/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/jest-mock/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==", + "node_modules/esbuild-loader/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.2", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/jest-mock/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==", + "node_modules/esbuild-loader/node_modules/esbuild": { + "version": "0.19.2", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=8" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "node": ">=12" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "optionalDependencies": { + "@esbuild/android-arm": "0.19.2", + "@esbuild/android-arm64": "0.19.2", + "@esbuild/android-x64": "0.19.2", + "@esbuild/darwin-arm64": "0.19.2", + "@esbuild/darwin-x64": "0.19.2", + "@esbuild/freebsd-arm64": "0.19.2", + "@esbuild/freebsd-x64": "0.19.2", + "@esbuild/linux-arm": "0.19.2", + "@esbuild/linux-arm64": "0.19.2", + "@esbuild/linux-ia32": "0.19.2", + "@esbuild/linux-loong64": "0.19.2", + "@esbuild/linux-mips64el": "0.19.2", + "@esbuild/linux-ppc64": "0.19.2", + "@esbuild/linux-riscv64": "0.19.2", + "@esbuild/linux-s390x": "0.19.2", + "@esbuild/linux-x64": "0.19.2", + "@esbuild/netbsd-x64": "0.19.2", + "@esbuild/openbsd-x64": "0.19.2", + "@esbuild/sunos-x64": "0.19.2", + "@esbuild/win32-arm64": "0.19.2", + "@esbuild/win32-ia32": "0.19.2", + "@esbuild/win32-x64": "0.19.2" } }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "node_modules/esbuild-loader/node_modules/webpack-sources": { + "version": "1.4.3", "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/jest-resolve": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.0.tgz", - "integrity": "sha512-+hrpY4LzAONoZA/rvB6rnZLkOSA6UgJLpdCWrOZNSgGxWMumzRLu7dLUSCabAHzoHIDQ9qXfr3th1zYNJ0E8sQ==", + "node_modules/esbuild-plugin-alias": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild-register": { + "version": "3.4.2", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "debug": "^4.3.4" }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.0.tgz", - "integrity": "sha512-eOfPog9K3hJdJk/3i6O6bQhXS+3uXhMDkLJGX+xmMPp7T1d/zdcFofbDnHgNoEkhD/mSimC5IagLEP7lpLLu/A==", + "node_modules/escape-html": { + "version": "1.0.3", "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.0" - }, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.8.0" } }, - "node_modules/jest-resolve/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==", + "node_modules/escodegen": { + "version": "2.1.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-convert": "^2.0.1" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=8" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "8.44.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "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.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "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", + "import-fresh": "^3.0.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", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-resolve/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==", + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" } }, - "node_modules/jest-resolve/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-import-resolver-node": { + "version": "0.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } }, - "node_modules/jest-resolve/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==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/jest-resolve/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==", + "node_modules/eslint-module-utils": { + "version": "2.8.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "debug": "^3.2.7" }, "engines": { - "node": ">=8" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/jest-runner": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.0.tgz", - "integrity": "sha512-4fZuGV2lOxS2BiqEG9/AI8E6O+jo+QZjMVcgi1x5E6aDql0Gd/EFIbUQ0pSS09y8cya1vJB/qC2xsE468jqtSg==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.6.0", - "@jest/environment": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.0", - "jest-haste-map": "^29.6.0", - "jest-leak-detector": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-resolve": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-util": "^29.6.0", - "jest-watcher": "^29.6.0", - "jest-worker": "^29.6.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ms": "^2.1.1" } }, - "node_modules/jest-runner/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==", + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "color-convert": "^2.0.1" + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" }, "engines": { - "node": ">=10" + "node": ">=4" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/jest-runner/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==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "ms": "^2.1.1" } }, - "node_modules/jest-runner/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/jest-runner/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==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-runner/node_modules/jest-worker": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@typescript-eslint/experimental-utils": "^5.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "node_modules/jest-runner/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==", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" }, "engines": { - "node": ">=10" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/jest-runner/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==", + "node_modules/eslint-plugin-react": { + "version": "7.32.2", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" }, "engines": { - "node": ">=10" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "license": "MIT", + "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/jest-runner/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==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "has-flag": "^4.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.0.tgz", - "integrity": "sha512-5FavYo3EeXLHIvnJf+r7Cj0buePAbe4mzRB9oeVxDS0uVmouSBjWeGgyRjZkw7ArxOoZI8gO6f8SGMJ2HFlwwg==", + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/fake-timers": "^29.6.0", - "@jest/globals": "^29.6.0", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-mock": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4.0" } }, - "node_modules/jest-runtime/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==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-plugin-storybook": { + "version": "0.6.12", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@storybook/csf": "^0.0.1", + "@typescript-eslint/utils": "^5.45.0", + "requireindex": "^1.1.0", + "ts-dedent": "^2.2.0" }, "engines": { - "node": ">=10" + "node": "12.x || 14.x || >= 16" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "eslint": ">=6" } }, - "node_modules/jest-runtime/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==", + "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { + "version": "0.0.1", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "lodash": "^4.17.15" } }, - "node_modules/jest-runtime/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/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.0", "dev": true, + "license": "MIT", "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" + "@typescript-eslint/utils": "^5.58.0" }, "engines": { - "node": "*" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" } }, - "node_modules/jest-runtime/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==", + "node_modules/eslint-scope": { + "version": "5.1.1", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.0.0" } }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/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" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-snapshot": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.0.tgz", - "integrity": "sha512-H3kUE9NwWDEDoutcOSS921IqdlkdjgnMdj1oMyxAHNflscdLc9dB8OudZHV6kj4OHJxbMxL8CdI5DlwYrs4wQg==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.0", - "semver": "^7.5.3" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { + "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, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16995,11 +15231,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/chalk": { + "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, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17011,11 +15246,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { + "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, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17023,178 +15257,144 @@ "node": ">=7.0.0" } }, - "node_modules/jest-snapshot/node_modules/color-name": { + "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 + "dev": true, + "license": "MIT" }, - "node_modules/jest-snapshot/node_modules/has-flag": { + "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot/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==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "yallist": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4.0" } }, - "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot/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==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", "dev": true, + "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=10" + "node": ">=10.13.0" } }, - "node_modules/jest-snapshot/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==", + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot/node_modules/yallist": { + "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.0.tgz", - "integrity": "sha512-S0USx9YwcvEm4pQ5suisVm/RVxBmi0GFR7ocJhIeaCuW5AXnAnffXbaVKvIFodyZNOc9ygzVtTxmBf40HsHXaA==", "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-util/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==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-util/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==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/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/jest-util/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": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-util/node_modules/supports-color": { + "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, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17202,876 +15402,611 @@ "node": ">=8" } }, - "node_modules/jest-validate": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.0.tgz", - "integrity": "sha512-MLTrAJsb1+W7svbeZ+A7pAnyXMaQrjvPDKCy7OlfsfB6TMVc69v7WjUWfiR6r3snULFWZASiKgvNVDuATta1dg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/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==", + "node_modules/espree": { + "version": "9.6.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-convert": "^2.0.1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/esprima": { + "version": "4.0.1", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/jest-validate/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==", + "node_modules/esquery": { + "version": "1.5.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "color-name": "~1.1.4" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10" } }, - "node_modules/jest-validate/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/jest-validate/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==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4.0" } }, - "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4.0" } }, - "node_modules/jest-validate/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==", - "dev": true + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "node_modules/jest-validate/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==", + "node_modules/estree-to-babel": { + "version": "3.2.1", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" }, "engines": { - "node": ">=8" + "node": ">=8.3.0" } }, - "node_modules/jest-watcher": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.0.tgz", - "integrity": "sha512-LdsQqFNX60mRdRRe+zsELnYRH1yX6KL+ukbh+u6WSQeTheZZe1TlLJNKRQiZ7e0VbvMkywmMWL/KV35noOJCcw==", + "node_modules/esutils": { + "version": "2.0.3", "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.0", - "string-length": "^4.0.1" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-watcher/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==", + "node_modules/etag": { + "version": "1.8.1", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eventemitter3": { + "version": "4.0.7", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.8.x" } }, - "node_modules/jest-watcher/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==", + "node_modules/execa": { + "version": "5.1.1", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-watcher/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/jest-watcher/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==", + "node_modules/exit": { + "version": "0.1.2", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/jest-watcher/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==", + "node_modules/expect": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/expect-utils": "^29.6.0", + "@types/node": "*", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/express": { + "version": "4.18.2", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.10.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==", + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "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==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "engines": { - "node": ">=0.10.0" + "ms": "2.0.0" } }, - "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/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/extend": { + "version": "3.0.2", "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=4" } }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "node_modules/extract-zip": { + "version": "1.7.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" + "extract-zip": "cli.js" } }, - "node_modules/jscodeshift/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==", + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "ms": "2.0.0" } }, - "node_modules/jscodeshift/node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/jscodeshift/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", "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" - } + "license": "MIT" }, - "node_modules/jscodeshift/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==", + "node_modules/fast-glob": { + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@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": ">=7.0.0" + "node": ">=8.6.0" } }, - "node_modules/jscodeshift/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/fast-json-parse": { + "version": "1.0.3", + "dev": true, + "license": "MIT" }, - "node_modules/jscodeshift/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==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/jscodeshift/node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", "dev": true, - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } + "license": "MIT" }, - "node_modules/jscodeshift/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==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4.9.1" } }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "node_modules/fastq": { + "version": "1.15.0", "dev": true, + "license": "ISC", "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "reusify": "^1.0.4" } }, - "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "node_modules/faye-websocket": { + "version": "0.11.4", "dev": true, + "license": "Apache-2.0", "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=0.8.0" } }, - "node_modules/jsdom/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/fb-watchman": { + "version": "2.0.2", "dev": true, + "license": "Apache-2.0", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "bser": "2.1.1" } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "node_modules/fd-slicer": { + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" + "pend": "~1.2.0" } }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "node_modules/fetch-retry": { + "version": "5.0.6", "dev": true, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, + "node_modules/figures": { + "version": "3.2.0", + "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "node": ">=8" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "node_modules/file-entry-cache": { + "version": "6.0.1", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/file-system-cache": { + "version": "2.3.0", "dev": true, - "engines": { - "node": ">=6" + "license": "MIT", + "dependencies": { + "fs-extra": "11.1.1", + "ramda": "0.29.0" } }, - "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.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "node_modules/filelist": { + "version": "1.0.4", "dev": true, + "license": "Apache-2.0", "dependencies": { - "language-subtag-registry": "~0.3.2" + "minimatch": "^5.0.1" } }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "balanced-match": "^1.0.0" } }, - "node_modules/lazy-universal-dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz", - "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", "dev": true, + "license": "ISC", "dependencies": { - "app-root-dir": "^1.0.2", - "dotenv": "^16.0.0", - "dotenv-expand": "^10.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=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==", - "dev": true, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "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==", + "node_modules/finalhandler": { + "version": "1.2.0", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "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==", - "dev": true + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/lint-staged": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.3.tgz", - "integrity": "sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==", + "node_modules/find-cache-dir": { + "version": "3.3.2", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "5.2.0", - "cli-truncate": "^3.1.0", - "commander": "^10.0.0", - "debug": "^4.3.4", - "execa": "^7.0.0", - "lilconfig": "2.1.0", - "listr2": "^5.0.7", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.3", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.2.2" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/lint-staged" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/find-up": { + "version": "4.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "node_modules/flat-cache": { + "version": "3.0.4", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "node_modules/flatted": { + "version": "3.2.7", "dev": true, - "engines": { - "node": ">=14.18.0" - } + "license": "ISC" }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/flow-parser": { + "version": "0.218.1", "dev": true, + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/follow-redirects": { + "version": "1.15.2", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, + "node_modules/for-each": { + "version": "0.3.3", + "license": "MIT", "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-callable": "^1.1.3" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/foreground-child": { + "version": "2.0.0", "dev": true, + "license": "ISC", "dependencies": { - "mimic-fn": "^4.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "8.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, "engines": { - "node": ">=12" + "node": ">=12.13.0", + "yarn": ">=1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", "dev": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/listr2": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", - "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, + "license": "MIT", "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "ajv": "^6.9.1" } }, - "node_modules/listr2/node_modules/ansi-styles": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18082,27 +16017,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/listr2/node_modules/color-convert": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18110,1242 +16043,1082 @@ "node": ">=7.0.0" } }, - "node_modules/listr2/node_modules/color-name": { + "node_modules/fork-ts-checker-webpack-plugin/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 + "dev": true, + "license": "MIT" }, - "node_modules/listr2/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", "dev": true, + "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "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==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "engines": { - "node": ">=6.11.5" - } + "license": "MIT" }, - "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==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8.9.0" + "node": ">=10" } }, - "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==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "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==", - "dev": true - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.invokemap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", - "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", - "dev": true - }, - "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.pullall": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", - "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", - "dev": true - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.5.3", + "dev": true, + "license": "ISC", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/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==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 6" } }, - "node_modules/log-symbols/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" - }, + "node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">= 0.6" } }, - "node_modules/log-symbols/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/log-symbols/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==", + "node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/log-symbols/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==", + "node_modules/fs-constants": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.14" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "node_modules/fs-minipass": { + "version": "2.1.0", "dev": true, + "license": "ISC", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/log-update/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==", + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", "dev": true, + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-update/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==", + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "ISC" + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=7.0.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/log-update/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/function-bind": { + "version": "1.1.1", + "license": "MIT" }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/function.prototype.name": { + "version": "1.1.5", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/functions-have-names": { + "version": "1.2.3", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/gauge": { + "version": "3.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=10" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", "dev": true, - "dependencies": { - "tslib": "^2.0.3" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, - "bin": { - "lz-string": "bin/bin.js" + "node_modules/get-intrinsic": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/get-nonce": { + "version": "1.0.1", "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/get-npm-tarball-url": { + "version": "2.0.3", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "engines": { + "node": ">=12.17" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "node_modules/get-package-type": { + "version": "0.1.0", "dev": true, - "dependencies": { - "tmpl": "1.0.5" + "license": "MIT", + "engines": { + "node": ">=8.0.0" } }, - "node_modules/map-or-similar": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", - "dev": true + "node_modules/get-port": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/markdown-to-jsx": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz", - "integrity": "sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==", + "node_modules/get-stream": { + "version": "6.0.1", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=10" }, - "peerDependencies": { - "react": ">= 0.14.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "node_modules/get-symbol-description": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "unist-util-visit": "^2.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "node_modules/get-tsconfig": { + "version": "4.7.0", "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/giget": { + "version": "1.1.3", "dev": true, - "engines": { - "node": ">= 0.6" + "license": "MIT", + "dependencies": { + "colorette": "^2.0.20", + "defu": "^6.1.2", + "https-proxy-agent": "^7.0.2", + "mri": "^1.2.0", + "node-fetch-native": "^1.4.0", + "pathe": "^1.1.1", + "tar": "^6.2.0" + }, + "bin": { + "giget": "dist/cli.mjs" } }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "node_modules/giget/node_modules/agent-base": { + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { - "fs-monkey": "^1.0.4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 14" } }, - "node_modules/memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "node_modules/giget/node_modules/https-proxy-agent": { + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { - "map-or-similar": "^1.5.0" + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/github-slugger": { + "version": "1.5.0", "dev": true, - "engines": { - "node": ">= 8" - } + "license": "ISC" }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/glob": { + "version": "8.1.0", "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8.6" + "node": ">= 6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/glob-promise": { + "version": "6.0.3", "dev": true, - "bin": { - "mime": "cli.js" + "license": "MIT", + "dependencies": { + "@types/glob": "^8.0.0" }, "engines": { - "node": ">=4" + "node": ">=16" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, + "peerDependencies": { + "glob": "^8.0.3" } }, - "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==", + "node_modules/glob-promise/node_modules/@types/glob": { + "version": "8.1.0", "dev": true, - "engines": { - "node": ">= 0.6" + "license": "MIT", + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" } }, - "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==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "balanced-match": "^1.0.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/globals": { + "version": "11.12.0", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/globalthis": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "define-properties": "^1.1.3" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/globby": { + "version": "11.1.0", "dev": true, + "license": "MIT", + "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", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", "dev": true, + "license": "MIT" + }, + "node_modules/graphql": { + "version": "16.8.1", + "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/gunzip-maybe": { + "version": "1.4.2", "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "browserify-zlib": "^0.1.4", + "is-deflate": "^1.0.0", + "is-gzip": "^1.0.0", + "peek-stream": "^1.1.0", + "pumpify": "^1.3.3", + "through2": "^2.0.3" }, - "engines": { - "node": ">= 8" + "bin": { + "gunzip-maybe": "bin.js" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/gzip-size": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "duplexer": "^0.1.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/handle-thing": { + "version": "2.0.1", + "dev": true, + "license": "MIT" }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/handlebars": { + "version": "4.7.7", "dev": true, + "license": "MIT", "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" }, "bin": { - "mkdirp": "bin/cmd.js" + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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/msw": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/msw/-/msw-1.2.3.tgz", - "integrity": "sha512-Fqy/TaLKR32x4IkMwudJHJysBzVM/v/lSoMPS9f3QaHLOmb3xHN9YurSUnRt+2eEvNXLjVPij1wMBQtLmTbKsg==", - "hasInstallScript": true, - "dependencies": { - "@mswjs/cookies": "^0.2.2", - "@mswjs/interceptors": "^0.17.5", - "@open-draft/until": "^1.0.3", - "@types/cookie": "^0.4.1", - "@types/js-levenshtein": "^1.1.1", - "chalk": "4.1.1", - "chokidar": "^3.4.2", - "cookie": "^0.4.2", - "graphql": "^15.0.0 || ^16.0.0", - "headers-polyfill": "^3.1.2", - "inquirer": "^8.2.0", - "is-node-process": "^1.2.0", - "js-levenshtein": "^1.1.6", - "node-fetch": "^2.6.7", - "outvariant": "^1.4.0", - "path-to-regexp": "^6.2.0", - "strict-event-emitter": "^0.4.3", - "type-fest": "^2.19.0", - "yargs": "^17.3.1" - }, - "bin": { - "msw": "cli/index.js" - }, + "node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mswjs" - }, - "peerDependencies": { - "typescript": ">= 4.4.x <= 5.1.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=4" } }, - "node_modules/msw-storybook-addon": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/msw-storybook-addon/-/msw-storybook-addon-1.8.0.tgz", - "integrity": "sha512-dw3vZwqjixmiur0vouRSOax7wPSu9Og2Hspy9JZFHf49bZRjwDiLF0Pfn2NXEkGviYJOJiGxS1ejoTiUwoSg4A==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "is-node-process": "^1.0.1" + "get-intrinsic": "^1.1.1" }, - "peerDependencies": { - "msw": ">=0.35.0 <2.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/msw/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" - }, + "node_modules/has-proto": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/msw/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/msw/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/msw/node_modules/color-convert": { + "node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/headers-polyfill": { + "version": "3.1.2", + "license": "MIT" + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "react-is": "^16.7.0" } }, - "node_modules/msw/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/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" }, - "node_modules/msw/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" + "node_modules/hpack.js": { + "version": "2.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/msw/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/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/msw/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" }, - "node_modules/msw/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==", + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/msw/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/msw/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/html-entities": { + "version": "2.4.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { "node": ">=12" } }, - "node_modules/msw/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 12" } }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/html-tags": { + "version": "3.3.1", "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "license": "MIT", + "engines": { + "node": ">=8" }, - "bin": { - "multicast-dns": "cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "node_modules/html-webpack-plugin": { + "version": "5.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "node_modules/htmlparser2": { + "version": "6.1.0", "dev": true, "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/ai" + "url": "https://github.com/sponsors/fb55" } ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "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/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true + "node_modules/http-deceiver": { + "version": "1.2.7", + "dev": true, + "license": "MIT" }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/http-errors": { + "version": "2.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "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==", - "dev": true + "node_modules/http-parser-js": { + "version": "0.5.8", + "dev": true, + "license": "MIT" }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/http-proxy": { + "version": "1.18.1", "dev": true, + "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "minimatch": "^3.0.2" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 0.10.5" + "node": ">= 6" } }, - "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=12.0.0" }, "peerDependencies": { - "encoding": "^0.1.0" + "@types/express": "^4.17.13" }, "peerDependenciesMeta": { - "encoding": { + "@types/express": { "optional": true } } }, - "node_modules/node-fetch-native": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.2.0.tgz", - "integrity": "sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==", - "dev": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">= 6.13.0" + "node": ">= 6" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "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==", + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": ">=10.17.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/husky": { + "version": "8.0.3", "dev": true, - "dependencies": { - "path-key": "^3.0.0" + "license": "MIT", + "bin": { + "husky": "lib/bin.js" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/icss-utils": { + "version": "5.1.0", "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz", - "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, + "license": "ISC", "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >= 14" }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "node_modules/ignore": { + "version": "5.2.4", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 4" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "node_modules/import-fresh": { + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", - "dev": true - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/import-local": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" + "node": ">=0.8.19" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/inflight": { + "version": "1.0.6", "dev": true, + "license": "ISC", "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" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.5", + "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.0.0" } }, - "node_modules/ora/node_modules/ansi-styles": { + "node_modules/inquirer/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==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19356,10 +17129,9 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ora/node_modules/chalk": { + "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19371,10 +17143,9 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ora/node_modules/color-convert": { + "node_modules/inquirer/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==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19382,23 +17153,20 @@ "node": ">=7.0.0" } }, - "node_modules/ora/node_modules/color-name": { + "node_modules/inquirer/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==" + "license": "MIT" }, - "node_modules/ora/node_modules/has-flag": { + "node_modules/inquirer/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==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ora/node_modules/supports-color": { + "node_modules/inquirer/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==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19406,2604 +17174,2162 @@ "node": ">=8" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/internal-slot": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/outvariant": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", - "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==" - }, - "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==", + "node_modules/interpret": { + "version": "3.1.1", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "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==", + "node_modules/invariant": { + "version": "2.2.4", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "loose-envify": "^1.0.0" } }, - "node_modules/p-map": { + "node_modules/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ipaddr.js": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 10" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "node_modules/is-absolute-url": { + "version": "3.0.3", "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "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==", - "dev": true, + "node_modules/is-arguments": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/is-array-buffer": { + "version": "3.0.2", "dev": true, + "license": "MIT", "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "dev": true, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", "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" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse5/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/is-core-module": { + "version": "2.12.1", "dev": true, - "engines": { - "node": ">= 0.8" + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, + "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "node_modules/is-deflate": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/is-docker": { + "version": "2.2.1", "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dev": true, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", "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==", - "dev": true - }, - "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, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "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==", + "node_modules/is-generator-fn": { + "version": "2.1.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "dev": true - }, - "node_modules/peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", - "dev": true, + "node_modules/is-generator-function": { + "version": "1.0.10", + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" + "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==", + "node_modules/is-gzip": { + "version": "1.0.0", "dev": true, + "license": "MIT", "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==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, + "node_modules/is-interactive": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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==", + "node_modules/is-map": { + "version": "2.0.2", "dev": true, - "engines": { - "node": ">= 6" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-nan": { + "version": "1.3.2", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "node_modules/is-negative-zero": { + "version": "2.0.2", "dev": true, - "dependencies": { - "@babel/runtime": "^7.17.8" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.12.0" } }, - "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "node_modules/is-number-object": { + "version": "1.0.7", "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" - } - ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "node_modules/is-path-cwd": { + "version": "2.2.0", "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=6" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "node_modules/is-path-in-cwd": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "is-path-inside": "^2.1.0" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=6" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "path-is-inside": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=6" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "node_modules/is-plain-object": { + "version": "2.0.4", "dev": true, + "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "isobject": "^3.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "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==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", "dev": true, - "engines": { - "node": ">= 0.8.0" - } + "license": "MIT" }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/is-set": { + "version": "2.0.2", "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "call-bind": "^1.0.2" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-stream": { + "version": "2.0.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/is-symbol": { + "version": "1.0.4", "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { - "node": ">= 0.6.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "node_modules/is-typed-array": { + "version": "1.1.10", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/is-weakmap": { + "version": "2.0.1", "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-weakref": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/is-weakset": { + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": ">= 0.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/is-what": { + "version": "4.1.15", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/is-wsl": { + "version": "2.2.0", "dev": true, + "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/isarray": { + "version": "1.0.0", "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" } }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/puppeteer-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", - "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", + "node_modules/istanbul-lib-report": { + "version": "3.0.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/mime-types": "^2.1.0", - "debug": "^4.1.0", - "extract-zip": "^1.6.6", - "https-proxy-agent": "^4.0.0", - "mime": "^2.0.3", - "mime-types": "^2.1.25", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^6.1.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8.16.0" + "node": ">=8" } }, - "node_modules/puppeteer-core/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "node_modules/puppeteer-core/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", "dev": true, + "license": "MIT", "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" + "semver": "^6.0.0" }, "engines": { - "node": "*" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/puppeteer-core/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "5", - "debug": "4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "node_modules/puppeteer-core/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", "dev": true, - "bin": { - "mime": "cli.js" + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=10" } }, - "node_modules/puppeteer-core/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/istanbul-reports": { + "version": "3.1.5", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "glob": "^7.1.3" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/puppeteer-core/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "node_modules/jackspeak": { + "version": "2.3.6", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "async-limiter": "~1.0.0" + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "node_modules/jake": { + "version": "10.8.7", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] + "license": "Apache-2.0", + "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/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.0.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ramda": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", - "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", "dev": true, + "license": "MIT" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/jest": { + "version": "29.6.0", "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "@jest/core": "^29.6.0", + "@jest/types": "^29.6.0", + "import-local": "^3.0.2", + "jest-cli": "^29.6.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-colorful": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", - "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true, + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/react-docgen": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", - "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", + "node_modules/jest-changed-files": { + "version": "29.5.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.7.5", - "@babel/generator": "^7.12.11", - "@babel/runtime": "^7.7.6", - "ast-types": "^0.14.2", - "commander": "^2.19.0", - "doctrine": "^3.0.0", - "estree-to-babel": "^3.1.0", - "neo-async": "^2.6.1", - "node-dir": "^0.1.10", - "strip-indent": "^3.0.0" - }, - "bin": { - "react-docgen": "bin/react-docgen.js" + "execa": "^5.0.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">=8.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/react-docgen-typescript": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", - "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", "dev": true, - "peerDependencies": { - "typescript": ">= 4.3.x" + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-docgen/node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "node_modules/jest-circus": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "min-indent": "^1.0.0" + "@jest/environment": "^29.6.0", + "@jest/expect": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.0", + "jest-matcher-utils": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-runtime": "^29.6.0", + "jest-snapshot": "^29.6.0", + "jest-util": "^29.6.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "react": "^18.2.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-element-to-jsx-string": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", - "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@base2/pretty-print-object": "1.0.1", - "is-plain-object": "5.0.0", - "react-is": "18.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", - "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/react-element-to-jsx-string/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, - "node_modules/react-ga4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz", - "integrity": "sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ==" - }, - "node_modules/react-inspector": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", - "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0 || ^18.0.0" - } + "license": "MIT" }, - "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==", - "dev": true - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/react-router": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz", - "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==", + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@remix-run/router": "1.7.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, - "peerDependencies": { - "react": ">=16.8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-router-dom": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz", - "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==", + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "@remix-run/router": "1.7.1", - "react-router": "6.14.1" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/jest-cli": { + "version": "29.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "@jest/core": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/types": "^29.6.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.0", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=8.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/recast": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.2.tgz", - "integrity": "sha512-Qv6cPfVZyMOtPszK6PgW70pUgm7gPlFitAPf0Q69rlOA0zLw2XdDcNmPbVGYicFGT9O8I7TZ/0ryJD+6COvIPw==", + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "assert": "^2.0.0", - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/recast/node_modules/ast-types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", "dev": true, + "license": "ISC", "dependencies": { - "resolve": "^1.20.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=12" } }, - "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==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "regenerate": "^1.4.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } + "license": "MIT" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "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==", + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "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" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.2", "dev": true, + "license": "MIT", "dependencies": { - "jsesc": "~0.5.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, - "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==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "engines": { + "node": ">=12" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.10" + "node": ">=12" } }, - "node_modules/remark-external-links": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", - "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "node_modules/jest-config": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "extend": "^3.0.0", - "is-absolute-url": "^3.0.0", - "mdast-util-definitions": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "unist-util-visit": "^2.0.0" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.0", + "@jest/types": "^29.6.0", + "babel-jest": "^29.6.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.0", + "jest-environment-node": "^29.6.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.0", + "jest-runner": "^29.6.0", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/remark-slug": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==", - "dev": true - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=0.10.5" - } + "license": "MIT" }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", "dev": true, + "license": "ISC", "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "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" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, + "license": "MIT", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/jest-config/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/jest-diff": { + "version": "29.6.0", "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.0" + }, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "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" + "color-name": "~1.1.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=7.0.0" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.12.0" + "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==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "node_modules/jest-docblock": { + "version": "29.4.3", "dev": true, + "license": "MIT", "dependencies": { - "xmlchars": "^2.2.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">=v12.22.7" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "node_modules/jest-each": { + "version": "29.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "@jest/types": "^29.6.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.6.0", + "pretty-format": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 12.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "node-forge": "^1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.8.0" + "node": ">=7.0.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "license": "MIT" }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/serve-favicon/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serve-favicon/node_modules/safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", "dev": true, - "dependencies": { - "ms": "2.0.0" - } + "license": "MIT" }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "node_modules/jest-environment-jsdom": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "@jest/environment": "^29.6.0", + "@jest/fake-timers": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.6.0", + "jest-util": "^29.6.0", + "jsdom": "^20.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "29.6.0", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-util": "^29.6.0" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "node_modules/jest-environment-node": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "@jest/environment": "^29.6.0", + "@jest/fake-timers": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-mock": "^29.6.0", + "jest-util": "^29.6.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/jest-environment-node/node_modules/jest-mock": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^6.0.2" + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-util": "^29.6.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", - "dev": true + "node_modules/jest-get-type": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "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==", + "node_modules/jest-haste-map": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "@jest/types": "^29.6.0", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.0", + "jest-worker": "^29.6.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "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==", + "node_modules/jest-haste-map/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "@types/node": "*", + "jest-util": "^29.6.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "8.1.1", "dev": true, + "license": "MIT", "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" + "has-flag": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/shelljs/node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/shelljs/node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/jest-leak-detector": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "resolve": "^1.1.6" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.0" }, "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "semver": "~7.0.0" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.2.0", "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "license": "MIT" }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "node_modules/jest-matcher-utils": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "chalk": "^4.0.0", + "jest-diff": "^29.6.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" + "color-convert": "^2.0.1" }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-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" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "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==", - "dev": true - }, - "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==", + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "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==", + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "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==", + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.2.0", "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "license": "MIT" }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "node_modules/jest-message-util": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "escape-string-regexp": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "internal-slot": "^1.0.4" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/store2": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", - "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", - "dev": true - }, - "node_modules/storybook": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.0.26.tgz", - "integrity": "sha512-N6+/QBIahTnOJ3mQFNh+PIimjw+yUUoBlnMq8kE1Rg6QFi8ErEK8xte6uppiTh+7ShpqeLhp9ipuDV6DwJ9Aqg==", + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, - "dependencies": { - "@storybook/cli": "7.0.26" - }, - "bin": { - "sb": "index.js", - "storybook": "index.js" + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/strict-event-emitter": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", - "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.6.19" + "node": ">=8" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "node_modules/jest-mock": { + "version": "27.5.1", "dev": true, + "license": "MIT", "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "@jest/types": "^27.5.1", + "@types/node": "*" }, "engines": { - "node": ">=10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "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==", + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.5.1", + "dev": true, + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/string-width/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==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.5", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/yargs-parser": "*" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "node_modules/jest-mock/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "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==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "node_modules/jest-mock/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-mock/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "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==", + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", "dev": true, + "license": "MIT", "engines": { "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "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==", + "node_modules/jest-regex-util": { + "version": "29.4.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "node_modules/jest-resolve": { + "version": "29.6.0", "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, - "peerDependencies": { - "webpack": "^5.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/styled-components": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.0.2.tgz", - "integrity": "sha512-CRWTuYme0W4zVqzXpODByyocgVbBpRoXmaEgPGb67dvweV1igp7Ik4Z5C9e83wZ2l2hPg/XKV7cjuNxhRlC7Mg==", + "node_modules/jest-resolve-dependencies": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/cli": "^7.21.0", - "@babel/core": "^7.21.0", - "@babel/helper-module-imports": "^7.18.6", - "@babel/plugin-external-helpers": "^7.18.6", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@babel/traverse": "^7.21.2", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/unitless": "^0.8.0", - "@types/stylis": "^4.0.2", - "css-to-react-native": "^3.2.0", - "csstype": "^3.1.2", - "postcss": "^8.4.23", - "shallowequal": "^1.1.0", - "stylis": "^4.3.0", - "tslib": "^2.5.0" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.6.0" }, "engines": { - "node": ">= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "babel-plugin-styled-components": ">= 2", - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" - }, - "peerDependenciesMeta": { - "babel-plugin-styled-components": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/stylis": { + "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==", - "dev": true - }, - "node_modules/superjson": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.13.1.tgz", - "integrity": "sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==", "dev": true, + "license": "MIT", "dependencies": { - "copy-anything": "^3.0.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "engines": { - "node": ">= 0.4" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/synchronous-promise": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", - "dev": true + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "node_modules/jest-runner": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "@jest/console": "^29.6.0", + "@jest/environment": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.6.0", + "jest-haste-map": "^29.6.0", + "jest-leak-detector": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-resolve": "^29.6.0", + "jest-runtime": "^29.6.0", + "jest-util": "^29.6.0", + "jest-watcher": "^29.6.0", + "jest-worker": "^29.6.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/telejson": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.1.0.tgz", - "integrity": "sha512-jFJO4P5gPebZAERPkJsqMAQ0IMA1Hi0AoSfxpnUaV6j6R2SZqlpkbS20U6dEUtA3RUYt2Ak/mTlkQzHH9Rv/hA==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "rimraf": "~2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=7.0.0" } }, - "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==", + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "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" - }, + "license": "MIT", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": ">=8" } }, - "node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" + "@types/node": "*", + "jest-util": "^29.6.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tempy/node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", "dev": true, + "license": "MIT", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/tempy/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" @@ -22012,138 +19338,107 @@ "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==", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "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" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "node_modules/jest-runtime": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "@jest/environment": "^29.6.0", + "@jest/fake-timers": "^29.6.0", + "@jest/globals": "^29.6.0", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-mock": "^29.6.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.0", + "jest-snapshot": "^29.6.0", + "jest-util": "^29.6.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.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": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "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==", + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/test-exclude/node_modules/glob": { + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -22159,187 +19454,220 @@ "url": "https://github.com/sponsors/isaacs" } }, - "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/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/jest-runtime/node_modules/jest-mock": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-util": "^29.6.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/jest-snapshot": { + "version": "29.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=0.6.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/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==", + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8.0" + "node": ">=7.0.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=8" } }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.3", "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=6.10" + "node": ">=10" } }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.1.tgz", - "integrity": "sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw==", + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", "dev": true, + "license": "ISC" + }, + "node_modules/jest-util": { + "version": "29.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^4.1.2" + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { + "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -22350,11 +19678,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { + "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -22366,11 +19693,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-convert": { + "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -22378,26 +19704,23 @@ "node": ">=7.0.0" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-name": { + "node_modules/jest-util/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 + "dev": true, + "license": "MIT" }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/has-flag": { + "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": { + "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -22405,1056 +19728,1029 @@ "node": ">=8" } }, - "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, + "node_modules/jest-validate": { + "version": "29.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "@jest/types": "^29.6.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.0" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tsconfig-paths/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==", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "minimist": "^1.2.0" + "color-convert": "^2.0.1" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^1.8.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6" + "node": ">=10" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.8.0" + "node": ">=7.0.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "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==", + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.6.0", "dev": true, + "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14.17" + "node": ">=8" } }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "node_modules/jest-watcher": { + "version": "29.6.0", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">=0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, - "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==", + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "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==", + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "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==", + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "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==", + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "crypto-random-string": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "node_modules/jest-worker": { + "version": "27.5.1", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=0.10.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" }, - "node_modules/unplugin": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-0.10.2.tgz", - "integrity": "sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==", + "node_modules/js-yaml": { + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.8.0", - "chokidar": "^3.5.3", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.4.5" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/jscodeshift": { + "version": "0.14.0", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" }, "bin": { - "update-browserslist-db": "cli.js" + "jscodeshift": "bin/jscodeshift.js" }, "peerDependencies": { - "browserslist": ">= 4.21.0" + "@babel/preset-env": "^7.1.6" } }, - "node_modules/upload-images-converter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upload-images-converter/-/upload-images-converter-2.0.2.tgz", - "integrity": "sha512-cltVwZ+RU70Qx8heZrSj8OpQhR9mFHZ6CXudosKkFlM91Iiznl8Oluw/x+9DTnSKkvipvkf1oCvyVw5UPIpZ1Q==" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/jscodeshift/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "punycode": "^2.1.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/jscodeshift/node_modules/ast-types": { + "version": "0.15.2", "dev": true, + "license": "MIT", "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "node_modules/use-resize-observer": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@juggle/resize-observer": "^3.3.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "16.8.0 - 18", - "react-dom": "16.8.0 - 18" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "node_modules/jscodeshift/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/jscodeshift/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">= 0.4.0" - } + "license": "MIT" }, - "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==", + "node_modules/jscodeshift/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "node_modules/jscodeshift/node_modules/recast": { + "version": "0.21.5", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" }, "engines": { - "node": ">=10.12.0" + "node": ">= 4" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/jscodeshift/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "node_modules/jsdom": { + "version": "20.0.3", "dev": true, + "license": "MIT", "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", "xml-name-validator": "^4.0.0" }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "makeerror": "1.0.12" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "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==", + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "punycode": "^2.1.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=12" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "defaults": "^1.0.3" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "dependencies": { - "util": "^0.12.3" + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" }, - "optionalDependencies": { - "@zxing/text-encoding": "0.9.0" + "engines": { + "node": ">=4" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" }, - "node_modules/webpack": { - "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "node_modules/json-schema-traverse": { + "version": "1.0.0", "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@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.14.5", - "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.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", "bin": { - "webpack": "bin/webpack.js" + "json5": "lib/cli.js" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "node": ">=6" } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", - "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", + "node_modules/jsonfile": { + "version": "6.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "is-plain-object": "^5.0.0", - "lodash.debounce": "^4.0.8", - "lodash.escape": "^4.0.1", - "lodash.flatten": "^4.4.0", - "lodash.invokemap": "^4.6.0", - "lodash.pullall": "^4.2.0", - "lodash.uniqby": "^4.7.0", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" + "universalify": "^2.0.0" }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { - "node": ">= 10.13.0" + "node": ">=4.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "node_modules/kind-of": { + "version": "6.0.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/kleur": { + "version": "3.0.3", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/lazy-universal-dotenv": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "engines": { - "node": ">=10" + "license": "Apache-2.0", + "dependencies": { + "app-root-dir": "^1.0.2", + "dotenv": "^16.0.0", + "dotenv-expand": "^10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/leven": { + "version": "3.1.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "node_modules/levn": { + "version": "0.4.1", "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "node_modules/lilconfig": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "13.2.3", "dev": true, + "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" + "chalk": "5.2.0", + "cli-truncate": "^3.1.0", + "commander": "^10.0.0", + "debug": "^4.3.4", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.3", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.2.2" }, "bin": { - "webpack-cli": "bin/cli.js" + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=14.15.0" + "node": "^14.13.1 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/webpack-cli/node_modules/commander": { + "node_modules/lint-staged/node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "node_modules/lint-staged/node_modules/execa": { + "version": "7.1.1", "dev": true, + "license": "MIT", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, + "license": "Apache-2.0", "engines": { - "node": ">= 12.13.0" + "node": ">=14.18.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-hot-middleware": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz", - "integrity": "sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==", + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-html-community": "0.0.8", - "html-entities": "^2.1.0", - "strip-ansi": "^6.0.0" + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", "dev": true, + "license": "MIT", "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-virtual-modules": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", - "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", - "dev": true - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", "dev": true, - "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" + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack/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==", + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.1", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "license": "ISC", + "engines": { + "node": ">= 14" } }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "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==", + "node_modules/listr2": { + "version": "5.0.8", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.8.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.13.1 || >=16.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/p-map": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "node_modules/whatwg-mimetype": { + "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/loader-utils": { + "version": "2.0.4", "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">= 8" + "node": ">=8.9.0" } }, - "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==", + "node_modules/locate-path": { + "version": "5.0.0", "dev": true, + "license": "MIT", "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" + "p-locate": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "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==", + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.invokemap": { + "version": "4.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.pullall": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/wildcard": { + "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { + "node_modules/log-update/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -23465,10 +20761,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { + "node_modules/log-update/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -23476,2221 +20772,8028 @@ "node": ">=7.0.0" } }, - "node_modules/wrap-ansi/node_modules/color-name": { + "node_modules/log-update/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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", "dev": true, - "engines": { - "node": ">=10.0.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/lower-case": { + "version": "2.0.2", "dev": true, - "engines": { - "node": ">=0.4" + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/lz-string": { + "version": "1.5.0", "dev": true, - "engines": { - "node": ">= 6" + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" } }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/make-dir": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", "dev": true, - "engines": { - "node": ">=10" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/makeerror": { + "version": "1.0.12", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "tmpl": "1.0.5" } }, - "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==", + "node_modules/map-or-similar": { + "version": "1.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-to-jsx": { + "version": "7.2.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } - } - }, - "dependencies": { - "@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 }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "node_modules/mdast-util-to-string": { + "version": "1.1.0", "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@aw-web-design/x-default-browser": { - "version": "1.4.88", - "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.88.tgz", - "integrity": "sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA==", + "node_modules/media-typer": { + "version": "0.3.0", "dev": true, - "requires": { - "default-browser-id": "3.0.0" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "@babel/cli": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.6.tgz", - "integrity": "sha512-Be3/RfEDmkMRGT1+ru5nTkfcvWz5jDOYg1V9rXqTz2u9Qt96O1ryboGvxVBp7wOnYWDB8DNHIWb6DThrpudfOw==", + "node_modules/memfs": { + "version": "3.5.3", "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - }, + "license": "Unlicense", "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" } }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "node_modules/memoizerific": { + "version": "1.11.3", "dev": true, - "requires": { - "@babel/highlight": "^7.22.5" + "license": "MIT", + "dependencies": { + "map-or-similar": "^1.5.0" } }, - "@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", - "dev": true + "node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT" }, - "@babel/core": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", - "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", + "node_modules/merge-stream": { + "version": "2.0.0", "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.6", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2" - } + "license": "MIT" }, - "@babel/eslint-parser": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.6.tgz", - "integrity": "sha512-KAom7E7d6bAh5/PflF3luynWlDLOIqfX+ZJcL0LRs6/6rtXJmJxPiWuIGfxNPtcWdtQ5lSSJbKbQlz/c/R60Ng==", + "node_modules/merge2": { + "version": "1.4.1", "dev": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "eslint-visitor-keys": "^2.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">= 8" } }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "node_modules/methods": { + "version": "1.1.2", "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "@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==", + "node_modules/micromatch": { + "version": "4.0.5", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "node_modules/mime": { + "version": "1.6.0", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" } }, - "@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "node_modules/mime-db": { + "version": "1.52.0", "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz", - "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==", + "node_modules/mime-types": { + "version": "2.1.35", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz", - "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "regexpu-core": "^5.3.1" + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", - "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", + "node_modules/min-indent": { + "version": "1.0.1", "dev": true, - "requires": { - "@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" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC" }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@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==", + "node_modules/minimist": { + "version": "1.2.8", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "node_modules/minipass": { + "version": "5.0.0", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "ISC", + "engines": { + "node": ">=8" } }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "node_modules/minizlib": { + "version": "2.1.2", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@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==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" - } + "license": "ISC" }, - "@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "node_modules/mkdirp": { + "version": "0.5.6", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "@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==", + "node_modules/mkdirp-classic": { + "version": "0.5.3", "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } + "license": "MIT" }, - "@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==", + "node_modules/mri": { + "version": "1.2.0", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "@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==", + "node_modules/mrmime": { + "version": "1.0.1", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">=10" } }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true + "node_modules/msw": { + "version": "1.2.3", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@mswjs/cookies": "^0.2.2", + "@mswjs/interceptors": "^0.17.5", + "@open-draft/until": "^1.0.3", + "@types/cookie": "^0.4.1", + "@types/js-levenshtein": "^1.1.1", + "chalk": "4.1.1", + "chokidar": "^3.4.2", + "cookie": "^0.4.2", + "graphql": "^15.0.0 || ^16.0.0", + "headers-polyfill": "^3.1.2", + "inquirer": "^8.2.0", + "is-node-process": "^1.2.0", + "js-levenshtein": "^1.1.6", + "node-fetch": "^2.6.7", + "outvariant": "^1.4.0", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.4.3", + "type-fest": "^2.19.0", + "yargs": "^17.3.1" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.4.x <= 5.1.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "node_modules/msw-storybook-addon": { + "version": "1.8.0", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "license": "MIT", + "dependencies": { + "is-node-process": "^1.0.1" + }, + "peerDependencies": { + "msw": ">=0.35.0 <2.0.0" } }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "node_modules/msw/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "node_modules/msw/node_modules/chalk": { + "version": "4.1.1", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "@babel/parser": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", - "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", - "dev": true + "node_modules/msw/node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "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.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "node_modules/msw/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "node_modules/msw/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/msw/node_modules/cookie": { + "version": "0.4.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "@babel/plugin-external-helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.22.5.tgz", - "integrity": "sha512-ngnNEWxmykPk82mH4ajZT0qTztr3Je6hrMuKAslZVM8G1YZTENJSYwrIGtt6KOtznug3exmAtF4so/nPqJuA4A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "node_modules/msw/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "node_modules/msw/node_modules/path-to-regexp": { + "version": "6.2.1", + "license": "MIT" + }, + "node_modules/msw/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/msw/node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "node_modules/msw/node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "@babel/plugin-proposal-decorators": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.6.tgz", - "integrity": "sha512-cgskJ9W7kxTk/wBM16JNHhlTkeyDK6slMJg1peaI4LM3y2HtTv+6I85sW9UXSUZilndIBvDBETA1BRoOYdxWKw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.22.5" + "node_modules/msw/node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "node_modules/multicast-dns": { + "version": "7.2.5", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "node_modules/mute-stream": { + "version": "0.0.8", + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.6", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "node_modules/natural-compare": { + "version": "1.4.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } + "license": "MIT" }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "node_modules/natural-compare-lite": { + "version": "1.4.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "node_modules/negotiator": { + "version": "0.6.3", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "node_modules/neo-async": { + "version": "2.6.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "node_modules/no-case": { + "version": "3.0.4", "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "node_modules/node-abort-controller": { + "version": "3.1.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } + "license": "MIT" }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "node_modules/node-dir": { + "version": "0.1.17", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/node-fetch": { + "version": "2.6.12", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "@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==", - "dev": true + "node_modules/node-fetch-native": { + "version": "1.4.0", + "dev": true, + "license": "MIT" }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "node_modules/node-forge": { + "version": "1.3.1", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" } }, - "@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==", + "node_modules/node-int64": { + "version": "0.4.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "license": "MIT" }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "node_modules/node-releases": { + "version": "2.0.13", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "license": "MIT" }, - "@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==", + "node_modules/normalize-package-data": { + "version": "2.5.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "@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==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "@babel/plugin-syntax-decorators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", - "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "@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==", + "node_modules/npm-run-path": { + "version": "4.0.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "@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==", + "node_modules/npmlog": { + "version": "5.0.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" } }, - "@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "node_modules/nth-check": { + "version": "2.1.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "node_modules/nwsapi": { + "version": "2.2.6", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } + "license": "MIT" }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "node_modules/object-assign": { + "version": "4.1.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "@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==", + "node_modules/object-inspect": { + "version": "1.12.3", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@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==", + "node_modules/object-is": { + "version": "1.1.5", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "@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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@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==", + "node_modules/object.entries": { + "version": "1.1.6", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" } }, - "@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==", + "node_modules/object.fromentries": { + "version": "2.0.6", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@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==", + "node_modules/object.hasown": { + "version": "1.1.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@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==", + "node_modules/object.values": { + "version": "1.1.6", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@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==", + "node_modules/objectorarray": { + "version": "1.0.5", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "license": "ISC" }, - "@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==", + "node_modules/obuf": { + "version": "1.1.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "license": "MIT" }, - "@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==", + "node_modules/on-finished": { + "version": "2.4.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "node_modules/on-headers": { + "version": "1.0.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "@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==", + "node_modules/once": { + "version": "1.4.0", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "node_modules/opener": { + "version": "1.5.2", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "node_modules/optionator": { + "version": "0.9.3", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "license": "MIT", + "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" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outvariant": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "2.3.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "node_modules/p-locate": { + "version": "4.1.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "node_modules/p-map": { + "version": "2.1.0", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "node_modules/p-retry": { + "version": "4.6.2", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "node_modules/p-try": { + "version": "2.2.0", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "node_modules/pako": { + "version": "0.2.9", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "license": "MIT" + }, + "node_modules/param-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "node_modules/parent-module": { + "version": "1.0.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "node_modules/parse-json": { + "version": "5.2.0", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "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" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "node_modules/parse5": { + "version": "7.1.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "node_modules/parseurl": { + "version": "1.3.3", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "node_modules/pascal-case": { + "version": "3.1.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "node_modules/path-browserify": { + "version": "1.0.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "node_modules/path-is-absolute": { + "version": "1.0.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "node_modules/path-is-inside": { + "version": "1.0.2", "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "node_modules/path-parse": { + "version": "1.0.7", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "dev": true, + "license": "BlueOak-1.0.0", + "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" } }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "ISC", + "engines": { + "node": "14 || >=16.14" } }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "node_modules/path-to-regexp": { + "version": "0.1.7", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "node_modules/pathe": { + "version": "1.1.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT" + }, + "node_modules/peek-stream": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "node_modules/pend": { + "version": "1.2.0", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "node_modules/pidtree": { + "version": "0.6.0", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polished": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "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" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer-core": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "engines": { + "node": ">=8.16.0" + } + }, + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "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/puppeteer-core/node_modules/https-proxy-agent": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/pure-rand": { + "version": "6.0.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/ramda": { + "version": "0.29.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-colorful": { + "version": "5.6.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-docgen": { + "version": "5.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "bin": { + "react-docgen": "bin/react-docgen.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 4.3.x" + } + }, + "node_modules/react-docgen/node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-element-to-jsx-string": { + "version": "15.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "18.1.0" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "18.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/react-ga4": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/react-inspector": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.14.1", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.7.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.14.1", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.7.1", + "react-router": "6.14.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.4", + "dev": true, + "license": "MIT", + "dependencies": { + "assert": "^2.0.0", + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/ast-types": { + "version": "0.16.1", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-external-links": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remove-accents": { + "version": "0.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/renderkid": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.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-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "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/run-async": { + "version": "2.4.1", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/store2": { + "version": "2.14.2", + "dev": true, + "license": "(MIT OR GPL-3.0)" + }, + "node_modules/storybook": { + "version": "7.4.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/cli": "7.4.6" + }, + "bin": { + "sb": "index.js", + "storybook": "index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/strict-event-emitter": { + "version": "0.4.6", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/styled-components": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/cli": "^7.21.0", + "@babel/core": "^7.21.0", + "@babel/helper-module-imports": "^7.18.6", + "@babel/plugin-external-helpers": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@babel/traverse": "^7.21.2", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/unitless": "^0.8.0", + "@types/stylis": "^4.0.2", + "css-to-react-native": "^3.2.0", + "csstype": "^3.1.2", + "postcss": "^8.4.23", + "shallowequal": "^1.1.0", + "stylis": "^4.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "babel-plugin-styled-components": ">= 2", + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "babel-plugin-styled-components": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/superjson": { + "version": "1.13.1", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/synchronous-promise": { + "version": "2.0.17", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "dev": true, + "license": "ISC" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/telejson": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "memoizerific": "^1.11.3" + } + }, + "node_modules/temp": { + "version": "0.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/temp/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "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/temp/node_modules/rimraf": { + "version": "2.6.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/tempy": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "del": "^6.0.0", + "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/del": { + "version": "6.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.18.2", + "dev": true, + "license": "BSD-2-Clause", + "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.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "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/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "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/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "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/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tocbot": { + "version": "4.21.2", + "dev": true, + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.0", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.1.6", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.10.0", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.5.0" + } + }, + "node_modules/unplugin/node_modules/webpack-virtual-modules": { + "version": "0.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/untildify": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upload-images-converter": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-resize-observer": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@juggle/resize-observer": "^3.3.1" + }, + "peerDependencies": { + "react": "16.8.0 - 18", + "react-dom": "16.8.0 - 18" + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/votogether-design-system": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/votogether-design-system/-/votogether-design-system-0.0.14.tgz", + "integrity": "sha512-HQ/jHkSRpmwh09d7FPcJOcfNfQZziRxFbTvZk0F0PbSWRhTJ0K1YZboi0wufUrmA4m6BcRwZ7zZOupoM1VzNIg==", + "dev": true, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-encoding": { + "version": "1.1.5", + "license": "MIT", + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "5.88.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@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.14.5", + "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.7", + "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-bundle-analyzer": { + "version": "4.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "is-plain-object": "^5.0.0", + "lodash.debounce": "^4.0.8", + "lodash.escape": "^4.0.1", + "lodash.flatten": "^4.4.0", + "lodash.invokemap": "^4.6.0", + "lodash.pullall": "^4.2.0", + "lodash.uniqby": "^4.7.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-hot-middleware": { + "version": "2.25.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "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/websocket-driver": { + "version": "0.7.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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-collection": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "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.9", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/ws": { + "version": "8.13.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.1", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@aw-web-design/x-default-browser": { + "version": "1.4.126", + "dev": true, + "requires": { + "default-browser-id": "3.0.0" + } + }, + "@babel/cli": { + "version": "7.22.6", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.2.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "dev": true + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "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" + } + }, + "slash": { + "version": "2.0.0", + "dev": true + } + } + }, + "@babel/code-frame": { + "version": "7.22.13", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "@babel/compat-data": { + "version": "7.23.2", + "dev": true + }, + "@babel/core": { + "version": "7.23.2", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.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" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "dev": true + } + } + }, + "@babel/eslint-parser": { + "version": "7.22.6", + "dev": true, + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "eslint-visitor-keys": "^2.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "regexpu-core": "^5.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.3", + "dev": true, + "requires": { + "@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" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.0", + "dev": true, + "requires": { + "@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" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.20", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.15", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.20", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + } + }, + "@babel/helpers": { + "version": "7.23.2", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + } + }, + "@babel/highlight": { + "version": "7.22.20", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.0", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + } + }, + "@babel/plugin-external-helpers": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.22.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/plugin-syntax-decorators": "^7.22.5" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "dev": true, + "requires": {} + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.23.2", + "dev": true, + "requires": { + "@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" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } + "@babel/plugin-transform-modules-systemjs": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.22.6", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.23.2", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.2", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@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.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@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.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.23.2", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.23.0", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.23.0", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.23.0", + "@babel/plugin-transform-modules-commonjs": "^7.23.0", + "@babel/plugin-transform-modules-systemjs": "^7.23.0", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.23.0", + "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.23.0", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-flow": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-flow-strip-types": "^7.22.5" + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + } + }, + "@babel/preset-typescript": { + "version": "7.22.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" + } + }, + "@babel/register": { + "version": "7.22.15", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.6", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.15", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.23.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.23.0", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@base2/pretty-print-object": { + "version": "1.0.1", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true, + "optional": true + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@emotion/is-prop-valid": { + "version": "1.2.1", + "dev": true, + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "dev": true + }, + "@emotion/unitless": { + "version": "0.8.1", + "dev": true + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.0", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "globals": { + "version": "13.20.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.44.0", + "dev": true + }, + "@fal-works/esbuild-plugin-global-externals": { + "version": "2.1.2", + "dev": true + }, + "@floating-ui/core": { + "version": "1.5.0", + "dev": true, + "requires": { + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/dom": { + "version": "1.5.3", + "dev": true, + "requires": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "@floating-ui/react-dom": { + "version": "2.0.2", + "dev": true, + "requires": { + "@floating-ui/dom": "^1.5.1" + } + }, + "@floating-ui/utils": { + "version": "0.1.6", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jest/console": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/console": "^29.6.0", + "@jest/reporters": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.6.0", + "jest-haste-map": "^29.6.0", + "jest-message-util": "^29.6.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.0", + "jest-resolve-dependencies": "^29.6.0", + "jest-runner": "^29.6.0", + "jest-runtime": "^29.6.0", + "jest-snapshot": "^29.6.0", + "jest-util": "^29.6.0", + "jest-validate": "^29.6.0", + "jest-watcher": "^29.6.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "pretty-format": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } + }, + "react-is": { + "version": "18.2.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-mock": "^29.6.0" + }, + "dependencies": { + "jest-mock": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-util": "^29.6.0" + } + } + } + }, + "@jest/expect": { + "version": "29.6.0", + "dev": true, + "requires": { + "expect": "^29.6.0", + "jest-snapshot": "^29.6.0" + } + }, + "@jest/expect-utils": { + "version": "29.6.0", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/fake-timers": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.0", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.0", + "jest-mock": "^29.6.0", + "jest-util": "^29.6.0" + }, + "dependencies": { + "jest-mock": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-util": "^29.6.0" + } + } + } + }, + "@jest/globals": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/environment": "^29.6.0", + "@jest/expect": "^29.6.0", + "@jest/types": "^29.6.0", + "jest-mock": "^29.6.0" + }, + "dependencies": { + "jest-mock": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/types": "^29.6.0", + "@types/node": "*", + "jest-util": "^29.6.0" + } + } + } + }, + "@jest/reporters": { + "version": "29.6.0", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.0", + "@jest/test-result": "^29.6.0", + "@jest/transform": "^29.6.0", + "@jest/types": "^29.6.0", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.0", + "jest-util": "^29.6.0", + "jest-worker": "^29.6.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "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" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "jest-worker": { + "version": "29.6.0", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.6.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "29.6.0", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/console": "^29.6.0", + "@jest/types": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/test-result": "^29.6.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.6.0", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.0", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.0", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "write-file-atomic": { + "version": "4.0.2", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "@jest/types": { + "version": "29.6.0", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + } + } + }, + "@juggle/resize-observer": { + "version": "3.4.0", + "dev": true + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true + }, + "@mdx-js/react": { + "version": "2.3.0", + "dev": true, + "requires": { + "@types/mdx": "^2.0.0", + "@types/react": ">=16" + } + }, + "@mswjs/cookies": { + "version": "0.2.2", + "requires": { + "@types/set-cookie-parser": "^2.4.0", + "set-cookie-parser": "^2.4.6" + } + }, + "@mswjs/interceptors": { + "version": "0.17.9", + "requires": { + "@open-draft/until": "^1.0.3", + "@types/debug": "^4.1.7", + "@xmldom/xmldom": "^0.8.3", + "debug": "^4.3.3", + "headers-polyfill": "^3.1.0", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.2.4", + "web-encoding": "^1.1.5" + }, + "dependencies": { + "strict-event-emitter": { + "version": "0.2.8", + "requires": { + "events": "^3.3.0" + } + } + } + }, + "@ndelangen/get-tarball": { + "version": "3.0.9", + "dev": true, + "requires": { + "gunzip-maybe": "^1.4.2", + "pump": "^3.0.0", + "tar-fs": "^2.1.1" + } + }, + "@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "dev": true, + "optional": true + }, + "@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "dev": true, + "requires": { + "eslint-scope": "5.1.1" + } + }, + "@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@open-draft/until": { + "version": "1.0.3" + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "optional": true + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.10", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.7.4", + "dev": true + } + } + }, + "@polka/url": { + "version": "1.0.0-next.23", + "dev": true }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "@radix-ui/number": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@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==", + "@radix-ui/primitive": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "@radix-ui/react-arrow": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" } }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "@radix-ui/react-collection": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" } }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "@radix-ui/react-compose-refs": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "@radix-ui/react-context": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "@radix-ui/react-direction": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "@radix-ui/react-dismissable-layer": { + "version": "1.0.4", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" } }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "@radix-ui/react-focus-guards": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "@radix-ui/react-focus-scope": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" } }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "@radix-ui/react-id": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" } }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "@radix-ui/react-popper": { + "version": "1.1.2", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "@radix-ui/react-portal": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" } }, - "@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "@radix-ui/react-primitive": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" } }, - "@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "@radix-ui/react-roving-focus": { + "version": "1.0.4", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" } }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "@radix-ui/react-select": { + "version": "1.2.2", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.22.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.2", + "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + } + }, + "@radix-ui/react-separator": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "@radix-ui/react-slot": { + "version": "1.0.2", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "@radix-ui/react-toggle": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" } }, - "@babel/plugin-transform-runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.6.tgz", - "integrity": "sha512-+AGkst7Kqq3QUflKGkhWWMRb9vaKamoreNmYc+sjsIpOp+TsyU0exhp3RlwjQa/HdlKkPt3AMDwfg8Hpt9Vwqg==", + "@radix-ui/react-toggle-group": { + "version": "1.0.4", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-toggle": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "@radix-ui/react-toolbar": { + "version": "1.0.4", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-separator": "1.0.3", + "@radix-ui/react-toggle-group": "1.0.4" } }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "@radix-ui/react-use-callback-ref": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "@radix-ui/react-use-controllable-state": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "@radix-ui/react-use-layout-effect": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", - "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", + "@radix-ui/react-use-previous": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "@radix-ui/react-use-rect": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" } }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "@radix-ui/react-use-size": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "@radix-ui/react-visually-hidden": { + "version": "1.0.3", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" } }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "@radix-ui/rect": { + "version": "1.0.1", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/runtime": "^7.13.10" } }, - "@babel/preset-env": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.6.tgz", - "integrity": "sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@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.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@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.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.5", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.31.0" - } + "@remix-run/router": { + "version": "1.7.1" }, - "@babel/preset-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", - "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-flow-strip-types": "^7.22.5" - } + "@rushstack/eslint-patch": { + "version": "1.3.2", + "dev": true }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } + "@sinclair/typebox": { + "version": "0.27.8", + "dev": true }, - "@babel/preset-react": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", - "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "@sinonjs/commons": { + "version": "3.0.0", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.5", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + "type-detect": "4.0.8" } }, - "@babel/preset-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", - "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", + "@sinonjs/fake-timers": { + "version": "10.3.0", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-typescript": "^7.22.5" + "@sinonjs/commons": "^3.0.0" } }, - "@babel/register": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", - "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", + "@storybook/addon-actions": { + "version": "7.4.6", "dev": true, "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^6.0.0", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0", + "uuid": "^9.0.0" }, "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "@storybook/channels": { + "version": "7.4.6", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "@storybook/client-logger": { + "version": "7.4.6", "dev": true, "requires": { - "locate-path": "^3.0.0" + "@storybook/global": "^5.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "@storybook/components": { + "version": "7.4.6", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "@storybook/core-events": { + "version": "7.4.6", "dev": true, "requires": { - "p-limit": "^2.0.0" + "ts-dedent": "^2.0.0" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "@storybook/preview-api": { + "version": "7.4.6", "dev": true, "requires": { - "find-up": "^3.0.0" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } - } - } - }, - "@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==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", - "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.6", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@base2/pretty-print-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", - "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", - "dev": true - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@emotion/memoize": "^0.8.1" - } - }, - "@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", - "dev": true - }, - "@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", - "dev": true - }, - "@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==", - "dev": true - }, - "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "dev": true, - "optional": true - }, - "@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, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + }, + "@storybook/router": { + "version": "7.4.6", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" } }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "@storybook/theming": { + "version": "7.4.6", "dev": true, "requires": { - "type-fest": "^0.20.2" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" } }, - "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==", + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "9.0.1", + "dev": true + }, + "yallist": { + "version": "4.0.0", "dev": true } } }, - "@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", - "dev": true - }, - "@fal-works/esbuild-plugin-global-externals": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz", - "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@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 - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "@storybook/addon-backgrounds": { + "version": "7.4.6", "dev": true, "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@storybook/channels": { + "version": "7.4.6", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "@storybook/components": { + "version": "7.4.6", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" } + }, + "@storybook/theming": { + "version": "7.4.6", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true } } }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.0.tgz", - "integrity": "sha512-anb6L1yg7uPQpytNVA5skRaXy3BmrsU8icRhTVNbWdjYWDDfy8M1Kq5HIVRpYoABdbpqsc5Dr+jtu4+qWRQBiQ==", - "dev": true, - "requires": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "slash": "^3.0.0" + "@storybook/addon-controls": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/blocks": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "dev": true, + "optional": true + }, + "@storybook/channels": { + "version": "7.4.6", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "@storybook/client-logger": { + "version": "7.4.6", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@storybook/global": "^5.0.0" } }, - "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==", + "@storybook/components": { + "version": "7.4.6", "dev": true, "requires": { - "color-name": "~1.1.4" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" } }, - "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==", + "@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", "dev": true }, - "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 + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } }, - "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==", + "@storybook/router": { + "version": "7.4.6", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" } - } - } - }, - "@jest/core": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.0.tgz", - "integrity": "sha512-5dbMHfY/5R9m8NbgmB3JlxQqooZ/ooPSOiwEQZZ+HODwJTbIu37seVcZNBK29aMdXtjvTRB3f6LCvkKq+r8uQA==", - "dev": true, - "requires": { - "@jest/console": "^29.6.0", - "@jest/reporters": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.0", - "jest-haste-map": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-resolve-dependencies": "^29.6.0", - "jest-runner": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "jest-watcher": "^29.6.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { + }, + "@storybook/theming": { + "version": "7.4.6", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "@types/node": { + "version": "16.18.58", + "dev": true + }, "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, "requires": { "color-convert": "^2.0.1" } }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -25699,8 +28802,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -25708,429 +28809,425 @@ }, "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 }, + "esbuild": { + "version": "0.18.20", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "dev": true, + "requires": { + "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" + } + }, "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 }, - "pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", + "locate-path": { + "version": "6.0.0", "dev": true, "requires": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } + "p-locate": "^5.0.0" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "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==", + "minimatch": { + "version": "9.0.3", "dev": true, "requires": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" } - } - } - }, - "@jest/environment": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.0.tgz", - "integrity": "sha512-bUZLYUxYlUIsslBbxII0fq0kr1+friI3Gty+cRLmocGB1jdcAHs7FS8QdCDqedE8q4DZE1g/AJHH6OJZBLGGsg==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-mock": "^29.6.0" - }, - "dependencies": { - "jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", + }, + "p-limit": { + "version": "3.1.0", "dev": true, "requires": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" + "yocto-queue": "^0.1.0" } - } - } - }, - "@jest/expect": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-a7pISPW28Q3c0/pLwz4mQ6tbAI+hc8/0CJp9ix6e9U4dQ6TiHQX82CT5DV5BMWaw8bFH4E6zsfZxXdn6Ka23Bw==", - "dev": true, - "requires": { - "expect": "^29.6.0", - "jest-snapshot": "^29.6.0" - } - }, - "@jest/expect-utils": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.0.tgz", - "integrity": "sha512-LLSQQN7oypMSETKoPWpsWYVKJd9LQWmSDDAc4hUQ4JocVC7LAMy9R3ZMhlnLwbcFvQORZnZR7HM893Px6cJhvA==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3" - } - }, - "@jest/fake-timers": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.0.tgz", - "integrity": "sha512-nuCU46AsZoskthWSDS2Aj6LARgyNcp5Fjx2qxsO/fPl1Wp1CJ+dBDqs0OkEcJK8FBeV/MbjH5efe79M2sHcV+A==", - "dev": true, - "requires": { - "@jest/types": "^29.6.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.0", - "jest-mock": "^29.6.0", - "jest-util": "^29.6.0" - }, - "dependencies": { - "jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", + }, + "p-locate": { + "version": "5.0.0", "dev": true, "requires": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" + "p-limit": "^3.0.2" } - } - } - }, - "@jest/globals": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.0.tgz", - "integrity": "sha512-IQQ3hZ2D/hwEwXSMv5GbfhzdH0nTQR3KPYxnuW6gYWbd6+7/zgMz7Okn6EgBbNtJNONq03k5EKA6HqGyzRbpeg==", - "dev": true, - "requires": { - "@jest/environment": "^29.6.0", - "@jest/expect": "^29.6.0", - "@jest/types": "^29.6.0", - "jest-mock": "^29.6.0" - }, - "dependencies": { - "jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", + }, + "pkg-dir": { + "version": "5.0.0", "dev": true, "requires": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" + "find-up": "^5.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } + }, + "yallist": { + "version": "4.0.0", + "dev": true } } }, - "@jest/reporters": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.0.tgz", - "integrity": "sha512-dWEq4HI0VvHcAD6XTtyBKKARLytyyWPIy1SvGOcU91106MfvHPdxZgupFwVHd8TFpZPpA3SebYjtwS5BUS76Rw==", + "@storybook/addon-docs": { + "version": "7.4.6", "dev": true, "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "jest-worker": "^29.6.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/csf-plugin": "7.4.6", + "@storybook/csf-tools": "7.4.6", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.4.6", + "@storybook/postinstall": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/react-dom-shim": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@storybook/channels": { + "version": "7.4.6", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "@storybook/client-logger": { + "version": "7.4.6", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@storybook/global": "^5.0.0" } }, - "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==", + "@storybook/components": { + "version": "7.4.6", "dev": true, "requires": { - "color-name": "~1.1.4" + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" } }, - "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==", + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", "dev": true }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "@storybook/preview-api": { + "version": "7.4.6", "dev": true, "requires": { - "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" + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" } }, - "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 + "@storybook/react-dom-shim": { + "version": "7.4.6", + "dev": true, + "requires": {} }, - "jest-worker": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", + "@storybook/theming": { + "version": "7.4.6", "dev": true, "requires": { - "@types/node": "*", - "jest-util": "^29.6.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" } }, - "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==", + "@storybook/types": { + "version": "7.4.6", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" } } } }, - "@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.0.tgz", - "integrity": "sha512-9qLb7xITeyWhM4yatn2muqfomuoCTOhv0QV9i7XiIyYi3QLfnvPv5NeJp5u0PZeutAOROMLKakOkmoAisOr3YQ==", - "dev": true, - "requires": { - "@jest/console": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.0.tgz", - "integrity": "sha512-HYCS3LKRQotKWj2mnA3AN13PPevYZu8MJKm12lzYojpJNnn6kI/3PWmr1At/e3tUu+FHQDiOyaDVuR4EV3ezBw==", - "dev": true, - "requires": { - "@jest/test-result": "^29.6.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.0.tgz", - "integrity": "sha512-bhP/KxPo3e322FJ0nKAcb6WVK76ZYyQd1lWygJzoSqP8SYMSLdxHqP4wnPTI4WvbB8PKPDV30y5y7Tya4RHOBA==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.0", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@storybook/addon-essentials": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/addon-actions": "7.4.6", + "@storybook/addon-backgrounds": "7.4.6", + "@storybook/addon-controls": "7.4.6", + "@storybook/addon-docs": "7.4.6", + "@storybook/addon-highlight": "7.4.6", + "@storybook/addon-measure": "7.4.6", + "@storybook/addon-outline": "7.4.6", + "@storybook/addon-toolbars": "7.4.6", + "@storybook/addon-viewport": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", + "ts-dedent": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@esbuild/darwin-arm64": { + "version": "0.18.20", "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "optional": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "@storybook/channels": { + "version": "7.4.6", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" } }, - "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==", + "@storybook/client-logger": { + "version": "7.4.6", "dev": true, "requires": { - "color-name": "~1.1.4" + "@storybook/global": "^5.0.0" } }, - "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==", + "@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", "dev": true }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } }, - "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 + "@storybook/router": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + } }, - "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==", + "@storybook/theming": { + "version": "7.4.6", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" } }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "@storybook/types": { + "version": "7.4.6", "dev": true, "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" } - } - } - }, - "@jest/types": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.0.tgz", - "integrity": "sha512-8XCgL9JhqbJTFnMRjEAO+TuW251+MoMd5BSzLiE3vvzpQ8RlBxy8NoyNkDhs3K3OL3HeVinlOl9or5p7GTeOLg==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { + }, + "@types/node": { + "version": "16.18.58", + "dev": true + }, "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, "requires": { "color-convert": "^2.0.1" } }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -26139,8 +29236,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -26148,268 +29243,90 @@ }, "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 }, - "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 + "esbuild": { + "version": "0.18.20", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } }, - "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==", + "find-up": { + "version": "5.0.0", "dev": true, "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@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==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@juggle/resize-observer": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", - "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", - "dev": true - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@mdx-js/react": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", - "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==", - "dev": true, - "requires": { - "@types/mdx": "^2.0.0", - "@types/react": ">=16" - } - }, - "@mswjs/cookies": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.2.2.tgz", - "integrity": "sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==", - "requires": { - "@types/set-cookie-parser": "^2.4.0", - "set-cookie-parser": "^2.4.6" - } - }, - "@mswjs/interceptors": { - "version": "0.17.9", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.17.9.tgz", - "integrity": "sha512-4LVGt03RobMH/7ZrbHqRxQrS9cc2uh+iNKSj8UWr8M26A2i793ju+csaB5zaqYltqJmA2jUq4VeYfKmVqvsXQg==", - "requires": { - "@open-draft/until": "^1.0.3", - "@types/debug": "^4.1.7", - "@xmldom/xmldom": "^0.8.3", - "debug": "^4.3.3", - "headers-polyfill": "^3.1.0", - "outvariant": "^1.2.1", - "strict-event-emitter": "^0.2.4", - "web-encoding": "^1.1.5" - }, - "dependencies": { - "strict-event-emitter": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz", - "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==", - "requires": { - "events": "^3.3.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } - } - } - }, - "@ndelangen/get-tarball": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", - "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", - "dev": true, - "requires": { - "gunzip-maybe": "^1.4.2", - "pump": "^3.0.0", - "tar-fs": "^2.1.1" - } - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "requires": { - "eslint-scope": "5.1.1" - } - }, - "@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@open-draft/until": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", - "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==" - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", - "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + }, + "foreground-child": { + "version": "3.1.1", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "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==", + "glob": { + "version": "10.3.10", "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "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" } }, - "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==", + "has-flag": { + "version": "4.0.0", "dev": true }, "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, "requires": { "p-locate": "^5.0.0" } }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, "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, "requires": { "yocto-queue": "^0.1.0" @@ -26417,208 +29334,111 @@ }, "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, "requires": { "p-limit": "^3.0.2" } }, - "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==", + "pkg-dir": { + "version": "5.0.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "find-up": "^5.0.0" } }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", "dev": true } } }, - "@polka/url": { - "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true - }, - "@remix-run/router": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz", - "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==" - }, - "@rushstack/eslint-patch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", - "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==", - "dev": true - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0" - } - }, - "@storybook/addon-actions": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.0.26.tgz", - "integrity": "sha512-vVoqE0Zw0g1PPnGfho8vRwjpXhQCpRNBQ/2U83/CSodHWL/MBYENG0XMby90TC72M26gNmEh0dn1YCUXvLdiew==", + "@storybook/addon-highlight": { + "version": "7.4.6", "dev": true, "requires": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "polished": "^4.2.2", - "prop-types": "^15.7.2", - "react-inspector": "^6.0.0", - "telejson": "^7.0.3", - "ts-dedent": "^2.0.0", - "uuid": "^9.0.0" + "@storybook/preview-api": "7.4.6" }, "dependencies": { - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "dev": true + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } } } }, - "@storybook/addon-backgrounds": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.0.26.tgz", - "integrity": "sha512-sjTkOnSsVBBl1GruVVsNKWEuLCbKjkNun1mzIklfYAiHz9hTZIhe9MA2SGZoDozMUDIXQqSoMDEc3rnDtfqsnQ==", - "dev": true, - "requires": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "memoizerific": "^1.11.3", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-controls": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.0.26.tgz", - "integrity": "sha512-mp1WuOYCPvR33orHn0XPABY5roF9Le8HnZwTpvfkrRMeMqLnYLnkCTZqY3JN/IOVlyQuYdqodP5CPDHNDLmvVg==", - "dev": true, - "requires": { - "@storybook/blocks": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/manager-api": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "lodash": "^4.17.21", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-docs": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.0.26.tgz", - "integrity": "sha512-C8DOwfmPBWDUS1IJbyJxykgVVHVzSSL+JFh3FwtF0hsqwjlNW4OvGDFbz0oAxyxs4V46xVcvh4E95e3GkW36BQ==", - "dev": true, - "requires": { - "@babel/core": "^7.20.2", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@jest/transform": "^29.3.1", - "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/csf-plugin": "7.0.26", - "@storybook/csf-tools": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.0.26", - "@storybook/postinstall": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/react-dom-shim": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", - "fs-extra": "^11.1.0", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-essentials": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.0.26.tgz", - "integrity": "sha512-r+IOtxbIqlCKO8fDgLppubYm+GEW3ZDxjPwXMQdDGem9ENpz0QLKb49r89+UYqnnaYjuYKjDNUOqy0gX2HfUXQ==", - "dev": true, - "requires": { - "@storybook/addon-actions": "7.0.26", - "@storybook/addon-backgrounds": "7.0.26", - "@storybook/addon-controls": "7.0.26", - "@storybook/addon-docs": "7.0.26", - "@storybook/addon-highlight": "7.0.26", - "@storybook/addon-measure": "7.0.26", - "@storybook/addon-outline": "7.0.26", - "@storybook/addon-toolbars": "7.0.26", - "@storybook/addon-viewport": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/manager-api": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/preview-api": "7.0.26", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-highlight": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.0.26.tgz", - "integrity": "sha512-+I+MoM7yXCA3YR2FwTSxSs6/IBpcc3Ey88WboGthR23ERmsgZOtum1S7KZ6cffNCOq4U0LzPkjKX2bICytFrIQ==", - "dev": true, - "requires": { - "@storybook/core-events": "7.0.26", - "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.0.26" - } - }, "@storybook/addon-interactions": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.0.26.tgz", - "integrity": "sha512-trIbPFLdxF6XgGORhx8eSGmGZ/4/AekJyFluf2lgutGi4TPL5Xzrx3o1kTFPVdLAPplBuDIlVI4HSGHHH2zeTw==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -26638,8 +29458,6 @@ }, "@storybook/addon-links": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.0.26.tgz", - "integrity": "sha512-og+8AUAUpHsT+MVjhdQmRNJw9RUkHn5FFoou003b9V4UlPPNDYTo/tNEqOhUXn2l/ESAROJlR/q/8Qjdes24pA==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -26655,70 +29473,589 @@ } }, "@storybook/addon-measure": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.0.26.tgz", - "integrity": "sha512-iAnI6q3GB8uSydK+S4m4ANpy0GpMpHhmU0oBtu6OmyyzHUH1RJ7/fGfBnzx6YT+rIOlqSFocxYGn74ylsp33Wg==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/types": "7.0.26" + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", + "tiny-invariant": "^1.3.1" + }, + "dependencies": { + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/components": { + "version": "7.4.6", + "dev": true, + "requires": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + } + }, + "@storybook/theming": { + "version": "7.4.6", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } } }, "@storybook/addon-outline": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.0.26.tgz", - "integrity": "sha512-oL7D0IWO0M6hMw5cWEC6JdKXlGadlVIdhIrVN+0gdFxuxCHTGpebQ02DCvyfls29UssEOxPaO1XMdu9tDlctbg==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/types": "7.0.26", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", "ts-dedent": "^2.0.0" + }, + "dependencies": { + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/components": { + "version": "7.4.6", + "dev": true, + "requires": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + } + }, + "@storybook/theming": { + "version": "7.4.6", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } } }, "@storybook/addon-toolbars": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.0.26.tgz", - "integrity": "sha512-DrwqcWuCLjaTNFtAYUxO2VaLrr2ibhB3ZQwW7J6a4YFCJaV49wempGPq3BzTWvrPUtMxGp7J3ZusdH9jBgCzjA==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26" + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6" + }, + "dependencies": { + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/components": { + "version": "7.4.6", + "dev": true, + "requires": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + } + }, + "@storybook/theming": { + "version": "7.4.6", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } } }, "@storybook/addon-viewport": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.0.26.tgz", - "integrity": "sha512-veAYxnR11sojXC7tlnBZ/USiafhWCsZNvjxmywl/XCh3MeDGFFDb2NN1s/7irAYXfNMOhgPGZED19BN9cQ8QRQ==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", "memoizerific": "^1.11.3", "prop-types": "^15.7.2" + }, + "dependencies": { + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/components": { + "version": "7.4.6", + "dev": true, + "requires": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + } + }, + "@storybook/theming": { + "version": "7.4.6", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "dev": true + } } }, "@storybook/addons": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.0.26.tgz", - "integrity": "sha512-zn7vdgXkQ4DpCJaawJsNPnh0NzXVXd2qfVtzYWWKT4eyj43VXxoVX2Z4woAD8h6G57JJg67+7hChRebUmd284A==", "dev": true, "requires": { "@storybook/manager-api": "7.0.26", @@ -26728,8 +30065,6 @@ }, "@storybook/api": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.0.26.tgz", - "integrity": "sha512-czS5iWE3Px3e0sXjgt1T+LDiT6Tl4gXYPmHIaWpKGDCh4W2zrGolOvB0WqDt3IKhDGnXxaJF5jn705OGBQOptw==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -26737,22 +30072,20 @@ } }, "@storybook/blocks": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.0.26.tgz", - "integrity": "sha512-VNYB6Y1Ocja8HVg4Bm1w7LvqRSEc9aLVD8BnI8BInHvekvxhaxTkfpA18qds7d8+RmerrJqAUhGx0jkIB/cvwA==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/channels": "7.0.26", - "@storybook/client-logger": "7.0.26", - "@storybook/components": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/components": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", - "@storybook/docs-tools": "7.0.26", + "@storybook/docs-tools": "7.4.6", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/theming": "7.0.26", - "@storybook/types": "7.0.26", + "@storybook/manager-api": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -26761,15 +30094,202 @@ "memoizerific": "^1.11.3", "polished": "^4.2.2", "react-colorful": "^5.1.2", - "telejson": "^7.0.3", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2" }, "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "dev": true, + "optional": true + }, + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/components": { + "version": "7.4.6", + "dev": true, + "requires": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/docs-tools": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-common": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/types": "7.4.6", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + } + }, + "@storybook/manager-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.4.6", + "@storybook/theming": "7.4.6", + "@storybook/types": "7.4.6", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", + "dev": true + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + } + }, + "@storybook/theming": { + "version": "7.4.6", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.4.6", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "@types/node": { + "version": "16.18.58", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "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, "requires": { "color-name": "~1.1.4" @@ -26777,40 +30297,375 @@ }, "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 + }, + "esbuild": { + "version": "0.18.20", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "dev": true, + "requires": { + "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" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "pkg-dir": { + "version": "5.0.0", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "semver": { + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", "dev": true } } }, "@storybook/builder-manager": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.0.26.tgz", - "integrity": "sha512-1Uk3dL3Yu5AuimfHAghBHs11wf7B+a+277astqLx7HSeh3L49zcDZS4NhGHKmtQjsEorbvmtty3s16q2k+fM8A==", + "version": "7.4.6", "dev": true, "requires": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.0.26", - "@storybook/manager": "7.0.26", - "@storybook/node-logger": "7.0.26", + "@storybook/core-common": "7.4.6", + "@storybook/manager": "7.4.6", + "@storybook/node-logger": "7.4.6", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", "browser-assert": "^1.2.1", "ejs": "^3.1.8", - "esbuild": "^0.17.0", + "esbuild": "^0.18.0", "esbuild-plugin-alias": "^0.2.1", "express": "^4.17.3", "find-cache-dir": "^3.0.0", "fs-extra": "^11.1.0", "process": "^0.11.10", "util": "^0.12.4" + }, + "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "dev": true, + "optional": true + }, + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", + "dev": true + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "@types/node": { + "version": "16.18.58", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "esbuild": { + "version": "0.18.20", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "dev": true, + "requires": { + "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" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "pkg-dir": { + "version": "5.0.0", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@storybook/builder-webpack5": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.0.26.tgz", - "integrity": "sha512-LfntlZKm0PB6hrgXd7IlzjuCLzjQezYHt3GQfZRxzu7MAu/bgu7xtr7lMaIJOQd2ckpvEN7xhJ89t2mvdk5y0A==", "dev": true, "requires": { "@babel/core": "^7.12.10", @@ -26860,14 +30715,10 @@ "dependencies": { "@types/node": { "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", "dev": true }, "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -26878,14 +30729,11 @@ }, "ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "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, "requires": { "color-convert": "^2.0.1" @@ -26893,8 +30741,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -26903,8 +30749,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -26912,14 +30756,10 @@ }, "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 }, "fork-ts-checker-webpack-plugin": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.3.0.tgz", - "integrity": "sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", @@ -26938,8 +30778,6 @@ "dependencies": { "fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -26951,20 +30789,14 @@ }, "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 }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -26972,8 +30804,6 @@ }, "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==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -26983,8 +30813,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -26992,8 +30820,6 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -27001,16 +30827,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@storybook/channel-postmessage": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-7.0.26.tgz", - "integrity": "sha512-ZvFLr/tUD9dWIjQtIn1JXHjqrbOP/uEEOqzwpKSVj0Cl4Vgc12s8hecbzBufkOF7fwLsFvfieSi7ENOmjoncdQ==", "dev": true, "requires": { "@storybook/channels": "7.0.26", @@ -27023,8 +30845,6 @@ }, "@storybook/channel-websocket": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-7.0.26.tgz", - "integrity": "sha512-c+0VcZf78RGnT/pWrH85yydt0azRKAHZF3SHWKM4+W8qOFr0Mk0+jqhPh1uoUoPDpBZDTKS/nzXY8cwUVwF/eA==", "dev": true, "requires": { "@storybook/channels": "7.0.26", @@ -27035,27 +30855,27 @@ }, "@storybook/channels": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.0.26.tgz", - "integrity": "sha512-Br3XILhrtuL5Sdp91I04kKjJzSqU/N8gGL6B6nIfnuaHUvGMDuMCHAB+g7aoiyH5dnpDZ6yBVGNwtYAyJA+0Og==", "dev": true }, "@storybook/cli": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.0.26.tgz", - "integrity": "sha512-sZ136wRUYTdhhm/thegFoI47wOzl2X+K9eaiTTp0ARwnIUhXAPDQ0MKOD36hKbCX5T/pBE7r++7WoEReIbUDqQ==", + "version": "7.4.6", "dev": true, "requires": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/core-server": "7.0.26", - "@storybook/csf-tools": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/telemetry": "7.0.26", - "@storybook/types": "7.0.26", + "@storybook/codemod": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/core-server": "7.4.6", + "@storybook/csf-tools": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/telemetry": "7.4.6", + "@storybook/types": "7.4.6", "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", "commander": "^6.2.1", "cross-spawn": "^7.0.3", @@ -27077,27 +30897,107 @@ "puppeteer-core": "^2.1.1", "read-pkg-up": "^7.0.1", "semver": "^7.3.7", - "shelljs": "^0.8.5", - "simple-update-notifier": "^1.0.0", + "simple-update-notifier": "^2.0.0", "strip-json-comments": "^3.0.1", "tempy": "^1.0.1", "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2" }, "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "dev": true, + "optional": true + }, + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", + "dev": true + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "@types/node": { + "version": "16.18.58", + "dev": true + }, "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, "requires": { "color-convert": "^2.0.1" } }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -27106,8 +31006,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -27115,42 +31013,73 @@ }, "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 }, "commander": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, + "esbuild": { + "version": "0.18.20", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, "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, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "dev": true, + "requires": { + "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" + } + }, "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 - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "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, "requires": { "p-locate": "^5.0.0" @@ -27158,37 +31087,20 @@ }, "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==", "dev": true, "requires": { "yallist": "^4.0.0" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "minimatch": { + "version": "9.0.3", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "brace-expansion": "^2.0.1" } }, "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, "requires": { "yocto-queue": "^0.1.0" @@ -27196,119 +31108,44 @@ }, "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, "requires": { "p-limit": "^3.0.2" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "pkg-dir": { + "version": "5.0.0", "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } + "find-up": "^5.0.0" } }, "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.5.4", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, + "signal-exit": { + "version": "4.1.0", + "dev": true + }, "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, "requires": { "has-flag": "^4.0.0" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@storybook/client-api": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-7.0.26.tgz", - "integrity": "sha512-55Oy5Es8ACABWT01iddUJHt8oT4VnuCvec/FUC4iN7ITiOGjk7YzZB3NftmD6C5+pVQC99buspuwg7IFxmj+Aw==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -27317,26 +31154,23 @@ }, "@storybook/client-logger": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.0.26.tgz", - "integrity": "sha512-OMVLbgceoeuM8sWOfTX/9a4zCrH78G32hg7x8yXLZnRJ9OLaHJHzUM0Onc4MLudqVUdaKH0c8ejpBXUyIr1rJQ==", "dev": true, "requires": { "@storybook/global": "^5.0.0" } }, "@storybook/codemod": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.0.26.tgz", - "integrity": "sha512-H9sV59FfGrGzGM+UZQclNglnc4cOkQvvF3EOWlR3BfDhx+STSB9VbCR308ygjUYw2TXZ2s5seCvHtVvA2yhILA==", + "version": "7.4.6", "dev": true, "requires": { - "@babel/core": "~7.21.0", - "@babel/preset-env": "~7.21.0", - "@babel/types": "~7.21.2", + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/types": "7.0.26", + "@storybook/csf-tools": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^11.0.2", "jscodeshift": "^0.14.0", @@ -27345,186 +31179,50 @@ "recast": "^0.23.1" }, "dependencies": { - "@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/preset-env": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz", - "integrity": "sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-plugin-utils": "^7.21.5", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@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.20.0", - "@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-transform-arrow-functions": "^7.21.5", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.21.5", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.5", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.5", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.21.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.21.5", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.5", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "@storybook/channels": { + "version": "7.4.6", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", + "dev": true + }, + "@storybook/types": { + "version": "7.4.6", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" } } } }, "@storybook/components": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.0.26.tgz", - "integrity": "sha512-n0TVWEF4Bc9JAyEIaN0PqwglbaYYRcPVG7ka+5wgGmBiuDlWI1SXd4EXxv2u0mVibHvtkHvOn6/GaZ1vG45p6g==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -27539,8 +31237,6 @@ }, "@storybook/core-client": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.0.26.tgz", - "integrity": "sha512-1DA8mLnr0f6EuL74859IDK99a7CGNgMIN0/cAVNgYxq0WA4j+9ajsJ+/RIAgnS2NLVLR9kbezUtBEx4/H88IRA==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -27549,8 +31245,6 @@ }, "@storybook/core-common": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.0.26.tgz", - "integrity": "sha512-rojZblzB0egNXX0bZ7R3TuPDiBSIhxpZCrorrDMHOZ8F+zuBxyTiZ0yMxEDn7i46T2n1vX+hUHhwZVxZrLn/ZQ==", "dev": true, "requires": { "@storybook/node-logger": "7.0.26", @@ -27578,14 +31272,10 @@ "dependencies": { "@types/node": { "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", "dev": true }, "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, "requires": { "color-convert": "^2.0.1" @@ -27593,8 +31283,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -27603,8 +31291,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -27612,14 +31298,10 @@ }, "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 }, "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, "requires": { "locate-path": "^6.0.0", @@ -27628,14 +31310,10 @@ }, "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 }, "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, "requires": { "p-locate": "^5.0.0" @@ -27643,8 +31321,6 @@ }, "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, "requires": { "yocto-queue": "^0.1.0" @@ -27652,8 +31328,6 @@ }, "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, "requires": { "p-limit": "^3.0.2" @@ -27661,8 +31335,6 @@ }, "pkg-dir": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, "requires": { "find-up": "^5.0.0" @@ -27670,8 +31342,6 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -27681,36 +31351,32 @@ }, "@storybook/core-events": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.0.26.tgz", - "integrity": "sha512-ckZszphEAYs9wp8tPVhayEMzk8JxCiQfzbq0S45sbdqdTrl40PmsOjv5iPNaUYElI/Stfz+v4gDCEUfOsxyC+w==", "dev": true }, "@storybook/core-server": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.0.26.tgz", - "integrity": "sha512-QieqH19jBPZafxJVmCVK6GTYkRN/CJ8RQUvyRH2KNhqXP0tHYfL51FlU70ldo/vHX6Ax4Cje5hx/Nln9+DOMNg==", + "version": "7.4.6", "dev": true, "requires": { - "@aw-web-design/x-default-browser": "1.4.88", + "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.0.26", - "@storybook/core-common": "7.0.26", - "@storybook/core-events": "7.0.26", + "@storybook/builder-manager": "7.4.6", + "@storybook/channels": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/core-events": "7.4.6", "@storybook/csf": "^0.1.0", - "@storybook/csf-tools": "7.0.26", + "@storybook/csf-tools": "7.4.6", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.0.26", - "@storybook/node-logger": "7.0.26", - "@storybook/preview-api": "7.0.26", - "@storybook/telemetry": "7.0.26", - "@storybook/types": "7.0.26", + "@storybook/manager": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/preview-api": "7.4.6", + "@storybook/telemetry": "7.4.6", + "@storybook/types": "7.4.6", "@types/detect-port": "^1.3.0", "@types/node": "^16.0.0", - "@types/node-fetch": "^2.5.7", "@types/pretty-hrtime": "^1.0.0", "@types/semver": "^7.3.4", - "better-opn": "^2.1.1", + "better-opn": "^3.0.2", "chalk": "^4.1.0", "cli-table3": "^0.6.1", "compression": "^1.7.4", @@ -27720,39 +31386,134 @@ "globby": "^11.0.2", "ip": "^2.0.0", "lodash": "^4.17.21", - "node-fetch": "^2.6.7", "open": "^8.4.0", "pretty-hrtime": "^1.0.3", "prompts": "^2.4.0", "read-pkg-up": "^7.0.1", "semver": "^7.3.7", - "serve-favicon": "^2.5.0", - "telejson": "^7.0.3", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1", "ts-dedent": "^2.0.0", + "util": "^0.12.4", "util-deprecate": "^1.0.2", "watchpack": "^2.2.0", "ws": "^8.2.3" }, "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "dev": true, + "optional": true + }, + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", + "dev": true + }, + "@storybook/preview-api": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.4.6", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", + "version": "16.18.58", "dev": true }, "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, "requires": { "color-convert": "^2.0.1" } }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -27761,8 +31522,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -27770,118 +31529,135 @@ }, "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 }, + "esbuild": { + "version": "0.18.20", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "dev": true, + "requires": { + "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" + } + }, "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 }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } }, "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==", "dev": true, "requires": { "yallist": "^4.0.0" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "minimatch": { + "version": "9.0.3", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "brace-expansion": "^2.0.1" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "p-limit": { + "version": "3.1.0", "dev": true, "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" } }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "pkg-dir": { + "version": "5.0.0", "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "find-up": "^5.0.0" } }, "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.5.4", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, + "signal-exit": { + "version": "4.1.0", + "dev": true + }, "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, "requires": { "has-flag": "^4.0.0" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@storybook/core-webpack": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.0.26.tgz", - "integrity": "sha512-mIi+D+15sGRh8CWE7mMgvxX8KRfrACcR+AuEDi9rfQBB2PX0Okkrh6GAxPWjjeFFG7DF4RXdkusgC8/seYCTXg==", "dev": true, "requires": { "@storybook/core-common": "7.0.26", @@ -27893,16 +31669,12 @@ "dependencies": { "@types/node": { "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", "dev": true } } }, "@storybook/csf": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", - "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", "dev": true, "requires": { "type-fest": "^2.19.0" @@ -27910,98 +31682,77 @@ "dependencies": { "type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true } } }, "@storybook/csf-plugin": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.0.26.tgz", - "integrity": "sha512-D+wZvKlFxI/Vur8SRvkwKujOdV8ZL6xKiCX/07nFJXhhZoaeM+E78xPCL613Hj15GloujMkAnv7CT2rCiFJYow==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/csf-tools": "7.0.26", - "unplugin": "^0.10.2" + "@storybook/csf-tools": "7.4.6", + "unplugin": "^1.3.1" } }, "@storybook/csf-tools": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.0.26.tgz", - "integrity": "sha512-O8WJNOkvgrGV6gS/5ERkgqiXOxoXMuHtzdJpIM9DHPhzkSxB1Inl3WrX/dRRDNtmiHf87hBUuzhgo7YR7z4tuQ==", + "version": "7.4.6", "dev": true, "requires": { - "@babel/generator": "~7.21.1", - "@babel/parser": "~7.21.2", - "@babel/traverse": "~7.21.2", - "@babel/types": "~7.21.2", + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", "@storybook/csf": "^0.1.0", - "@storybook/types": "7.0.26", + "@storybook/types": "7.4.6", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" }, "dependencies": { - "@babel/generator": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", - "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", + "@storybook/channels": { + "version": "7.4.6", "dev": true, "requires": { - "@babel/types": "^7.21.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" } }, - "@babel/parser": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", - "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", - "dev": true + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } }, - "@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "@storybook/core-events": { + "version": "7.4.6", "dev": true, "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "ts-dedent": "^2.0.0" } }, - "@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "@storybook/types": { + "version": "7.4.6", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.21.5", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" } } } }, "@storybook/docs-mdx": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", - "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", "dev": true }, "@storybook/docs-tools": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.0.26.tgz", - "integrity": "sha512-Ibpm/OTR2XmJgix5w+wMYbDwN0zp5e/pcqSHy36OvkBOG588IKSSzYdBjGdTLPHWBoehp2Kyndw/5dL/09ftXA==", "dev": true, "requires": { "@babel/core": "^7.12.10", @@ -28015,14 +31766,10 @@ }, "@storybook/global": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", - "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", "dev": true }, "@storybook/instrumenter": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.0.26.tgz", - "integrity": "sha512-7Ty0LTslgkm5RyH6CqTAKhWz/cF6wq/sNdMYKwvVZHWNZ2LKMtXD0RWM2caCPruAGOQ9+52H+3s4TZGKaPSSWQ==", "dev": true, "requires": { "@storybook/channels": "7.0.26", @@ -28033,15 +31780,11 @@ } }, "@storybook/manager": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.0.26.tgz", - "integrity": "sha512-mxjU/pmHr8xL96HCipqazvZWQkxBPCbpZ2+YsJuJoLFN4m7RoOK21VK0euBW24NlSg7Vp57XGQcrJCv6xUTKMg==", + "version": "7.4.6", "dev": true }, "@storybook/manager-api": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.0.26.tgz", - "integrity": "sha512-/2p6lU7r30qMXob/UnzRL9yq7XjoE+YQXv1KhrcePfMBARbelYw9RYhYT/AkXGtb9/Fa95uG3lNvoDLC1IQfMQ==", "dev": true, "requires": { "@storybook/channels": "7.0.26", @@ -28063,8 +31806,6 @@ "dependencies": { "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -28072,8 +31813,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -28081,22 +31820,16 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@storybook/mdx2-csf": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", - "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", "dev": true }, "@storybook/node-logger": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.0.26.tgz", - "integrity": "sha512-3Jqv3fRb8+Mn/aNl4IztgUAS/pvouVzpfHDc8+6KYAoFMeDXwHVlfF/+gRCpd/fbYaTHGrycIs5G48bC190Dgg==", "dev": true, "requires": { "@types/npmlog": "^4.1.2", @@ -28107,8 +31840,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -28116,8 +31847,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -28126,8 +31855,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -28135,20 +31862,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -28157,15 +31878,11 @@ } }, "@storybook/postinstall": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.0.26.tgz", - "integrity": "sha512-NhJBpQ+49RWF63UkdwrEwBLJBjAZeTlruPWfXGUb343iaGNNTsD3jajbToFHncibewH83yk6MeGfiyUva60oJw==", + "version": "7.4.6", "dev": true }, "@storybook/preset-react-webpack": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.0.26.tgz", - "integrity": "sha512-uJTW7of4eF8upoP2W0N5FVi1DG2f6CXkkI5qX4WmYFAmCtShor75EZTcv50QF4GOKJs9NlHDgC2+i6gT24u1rg==", "dev": true, "requires": { "@babel/preset-flow": "^7.18.6", @@ -28188,14 +31905,10 @@ "dependencies": { "@types/node": { "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", "dev": true }, "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -28203,8 +31916,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -28212,22 +31923,16 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@storybook/preview": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.0.26.tgz", - "integrity": "sha512-9Uaxl/MEMYqjLlKAeAF2ATuaM0yQagXUfu2bEOpuor2ys9XoisDkvB7jfsCVqMZHeQ+mCdYyBICHhgqzxcO2Zg==", "dev": true }, "@storybook/preview-api": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.0.26.tgz", - "integrity": "sha512-uJwA4errBOZOoDF2T7Z2oLqjAYvvjMr31sTsOoT0niJtWr29RQp8yS6VoSrsuh+y3FAVqBEl5pS+DX3IGLjvxw==", "dev": true, "requires": { "@storybook/channel-postmessage": "7.0.26", @@ -28249,8 +31954,6 @@ }, "@storybook/react": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.0.26.tgz", - "integrity": "sha512-+YK/1vF2Pd/PX7Ss5yPCIh9hee7iMVbu86gdjV9n9r6G244jQ7HLtdA01JKfq92/UgoysSWUjUECrxrUvcsh5w==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -28278,34 +31981,24 @@ "dependencies": { "@types/estree": { "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "@types/node": { "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", "dev": true }, "acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true } } }, "@storybook/react-docgen-typescript-plugin": { "version": "1.0.6--canary.9.0c3f3b7.0", - "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", - "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", "dev": true, "requires": { "debug": "^4.1.1", @@ -28319,14 +32012,11 @@ }, "@storybook/react-dom-shim": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.26.tgz", - "integrity": "sha512-heobG4IovYAD9fo7qmUHylCSQjDd1eXDCOaTiy+XVKobHAJgkz1gKqbaFSP6KLkPE4cKyScku2K9mY0tcKIhMw==", - "dev": true + "dev": true, + "requires": {} }, "@storybook/react-webpack5": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.0.26.tgz", - "integrity": "sha512-46LmHKEW5LNp13/rBUaEznTX35ZO8cuuVBlC7ySCR1+SGBJif3EBBe8VMyEI3FO48nwrenK9m+FtLqu5TDocCA==", "dev": true, "requires": { "@storybook/builder-webpack5": "7.0.26", @@ -28337,16 +32027,12 @@ "dependencies": { "@types/node": { "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", "dev": true } } }, "@storybook/router": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.0.26.tgz", - "integrity": "sha512-OfLittKxdahsgKsmQFoBX9q5tN/aqKMhhc/WbW88UPAQCUcEuazB0CwM+LI9YXY+n5L+vpLI4lGlgaqvPy4hHw==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -28356,8 +32042,6 @@ }, "@storybook/store": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-7.0.26.tgz", - "integrity": "sha512-gJ9LDv8Mos8kPHj7SDEpBxQVL756j+15XUqBeBjgK+/TihnzIFeeX9QaTLo+As8bhgF/P2MVR+v0Qv9Zlm9MgQ==", "dev": true, "requires": { "@storybook/client-logger": "7.0.26", @@ -28365,35 +32049,113 @@ } }, "@storybook/telemetry": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.0.26.tgz", - "integrity": "sha512-TgvtARAiD+SNyWJJfQdPiWW5JQkbX1UdHKEqEhoJXsGDkEi2Zpb+1tdeP1qZ3Gfbd1K0/LDpXGcqLv6/deSEdg==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/client-logger": "7.0.26", - "@storybook/core-common": "7.0.26", + "@storybook/client-logger": "7.4.6", + "@storybook/core-common": "7.4.6", + "@storybook/csf-tools": "7.4.6", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", "fs-extra": "^11.1.0", - "isomorphic-unfetch": "^3.1.0", - "nanoid": "^3.3.1", "read-pkg-up": "^7.0.1" }, "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "dev": true, + "optional": true + }, + "@storybook/channels": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/client-logger": "7.4.6", + "@storybook/core-events": "7.4.6", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/core-common": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/core-events": "7.4.6", + "@storybook/node-logger": "7.4.6", + "@storybook/types": "7.4.6", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.4.6", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.4.6", + "dev": true + }, + "@storybook/types": { + "version": "7.4.6", + "dev": true, + "requires": { + "@storybook/channels": "7.4.6", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "@types/node": { + "version": "16.18.58", + "dev": true + }, "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, "requires": { "color-convert": "^2.0.1" } }, + "brace-expansion": { + "version": "2.0.1", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -28402,8 +32164,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -28411,92 +32171,117 @@ }, "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 }, + "esbuild": { + "version": "0.18.20", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "dev": true, + "requires": { + "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" + } + }, "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 }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "minimatch": { + "version": "9.0.3", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "brace-expansion": "^2.0.1" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "p-limit": { + "version": "3.1.0", "dev": true, "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } + "yocto-queue": "^0.1.0" } }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "p-locate": { + "version": "5.0.0", "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "p-limit": "^3.0.2" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "pkg-dir": { + "version": "5.0.0", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true } } }, "@storybook/testing-library": { "version": "0.0.14-next.2", - "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.0.14-next.2.tgz", - "integrity": "sha512-i/SLSGm0o978ELok/SB4Qg1sZ3zr+KuuCkzyFqcCD0r/yf+bG35aQGkFqqxfSAdDxuQom0NO02FE+qys5Eapdg==", "dev": true, "requires": { "@storybook/client-logger": "^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0", @@ -28508,8 +32293,6 @@ }, "@storybook/theming": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.0.26.tgz", - "integrity": "sha512-7hxpT2yq+xZonSsEZHOF+HDHx6GE0qlys3EQ63K9XCJ8VeBnq9M5zHvMK9iXl90093ufxpvWsfDWgtja2zvmTw==", "dev": true, "requires": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", @@ -28520,8 +32303,6 @@ }, "@storybook/types": { "version": "7.0.26", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.0.26.tgz", - "integrity": "sha512-5RBi6agtDglNXdffmw4+Fyv2dUdlIdeOdUj0O5+JRYajTxfHdurZd9r/42z4OstN+ORDkLA/svt8Q9JyRpIb6Q==", "dev": true, "requires": { "@storybook/channels": "7.0.26", @@ -28532,22 +32313,16 @@ }, "@tanstack/match-sorter-utils": { "version": "8.8.4", - "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz", - "integrity": "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==", "dev": true, "requires": { "remove-accents": "0.4.2" } }, "@tanstack/query-core": { - "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.35.3.tgz", - "integrity": "sha512-PS+WEjd9wzKTyNjjQymvcOe1yg8f3wYc6mD+vb6CKyZAKvu4sIJwryfqfBULITKCla7P9C4l5e9RXePHvZOZeQ==" + "version": "4.35.3" }, "@tanstack/react-query": { "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.35.3.tgz", - "integrity": "sha512-UgTPioip/rGG3EQilXfA2j4BJkhEQsR+KAbF+KIuvQ7j4MkgnTCJF01SfRpIRNtQTlEfz/+IL7+jP8WA8bFbsw==", "requires": { "@tanstack/query-core": "4.35.3", "use-sync-external-store": "^1.2.0" @@ -28555,8 +32330,6 @@ }, "@tanstack/react-query-devtools": { "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.35.3.tgz", - "integrity": "sha512-UvLT7qPzCuCZ3NfjwsOqDUVN84JvSOuW6ukrjZmSqgjPqVxD6ra/HUp1CEOatQY2TRvKCp8y1lTVu+trXM30fg==", "dev": true, "requires": { "@tanstack/match-sorter-utils": "^8.7.0", @@ -28566,8 +32339,6 @@ }, "@testing-library/dom": { "version": "8.20.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", - "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", @@ -28582,8 +32353,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -28591,8 +32360,6 @@ }, "aria-query": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "requires": { "deep-equal": "^2.0.5" @@ -28600,8 +32367,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -28610,8 +32375,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -28619,20 +32382,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -28642,8 +32399,6 @@ }, "@testing-library/react": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", - "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", "dev": true, "requires": { "@babel/runtime": "^7.12.5", @@ -28653,8 +32408,6 @@ "dependencies": { "@testing-library/dom": { "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.1.tgz", - "integrity": "sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", @@ -28669,8 +32422,6 @@ }, "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, "requires": { "color-convert": "^2.0.1" @@ -28678,8 +32429,6 @@ }, "aria-query": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "requires": { "deep-equal": "^2.0.5" @@ -28687,8 +32436,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -28697,8 +32444,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -28706,20 +32451,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -28729,8 +32468,6 @@ }, "@testing-library/user-event": { "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", "dev": true, "requires": { "@babel/runtime": "^7.12.5" @@ -28738,20 +32475,14 @@ }, "@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@types/aria-query": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", - "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", "dev": true }, "@types/babel__core": { "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, "requires": { "@babel/parser": "^7.20.7", @@ -28763,8 +32494,6 @@ }, "@types/babel__generator": { "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -28772,8 +32501,6 @@ }, "@types/babel__template": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -28782,8 +32509,6 @@ }, "@types/babel__traverse": { "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "requires": { "@babel/types": "^7.20.7" @@ -28791,8 +32516,6 @@ }, "@types/body-parser": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "requires": { "@types/connect": "*", @@ -28801,8 +32524,6 @@ }, "@types/bonjour": { "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, "requires": { "@types/node": "*" @@ -28810,8 +32531,6 @@ }, "@types/connect": { "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "requires": { "@types/node": "*" @@ -28819,8 +32538,6 @@ }, "@types/connect-history-api-fallback": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dev": true, "requires": { "@types/express-serve-static-core": "*", @@ -28828,46 +32545,43 @@ } }, "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + "version": "0.4.1" + }, + "@types/cross-spawn": { + "version": "6.0.3", + "dev": true, + "requires": { + "@types/node": "*" + } }, "@types/debug": { "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", "requires": { "@types/ms": "*" } }, "@types/detect-port": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.3.tgz", - "integrity": "sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==", "dev": true }, "@types/doctrine": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", - "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", "dev": true }, "@types/ejs": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.2.tgz", - "integrity": "sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==", + "version": "3.1.3", + "dev": true + }, + "@types/emscripten": { + "version": "1.39.8", "dev": true }, "@types/escodegen": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", - "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", "dev": true }, "@types/eslint": { "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", "dev": true, "requires": { "@types/estree": "*", @@ -28876,8 +32590,6 @@ }, "@types/eslint-scope": { "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, "requires": { "@types/eslint": "*", @@ -28886,14 +32598,10 @@ }, "@types/estree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "dev": true }, "@types/express": { "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, "requires": { "@types/body-parser": "*", @@ -28904,8 +32612,6 @@ }, "@types/express-serve-static-core": { "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", "dev": true, "requires": { "@types/node": "*", @@ -28916,14 +32622,10 @@ }, "@types/find-cache-dir": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", - "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", "dev": true }, "@types/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -28932,8 +32634,6 @@ }, "@types/graceful-fs": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, "requires": { "@types/node": "*" @@ -28941,8 +32641,6 @@ }, "@types/hoist-non-react-statics": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", "dev": true, "requires": { "@types/react": "*", @@ -28951,20 +32649,14 @@ }, "@types/html-minifier-terser": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, "@types/http-errors": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", "dev": true }, "@types/http-proxy": { "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", "dev": true, "requires": { "@types/node": "*" @@ -28972,14 +32664,10 @@ }, "@types/istanbul-lib-coverage": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "dev": true }, "@types/istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" @@ -28987,8 +32675,6 @@ }, "@types/istanbul-reports": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" @@ -28996,8 +32682,6 @@ }, "@types/jest": { "version": "29.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.2.tgz", - "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", "dev": true, "requires": { "expect": "^29.0.0", @@ -29006,14 +32690,10 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -29023,21 +32703,15 @@ }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true } } }, "@types/js-levenshtein": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", - "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==" + "version": "1.1.1" }, "@types/jsdom": { "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, "requires": { "@types/node": "*", @@ -29047,60 +32721,40 @@ }, "@types/json-schema": { "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, "@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 }, "@types/lodash": { "version": "4.14.195", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", - "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", "dev": true }, "@types/mdx": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz", - "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==", + "version": "2.0.8", "dev": true }, "@types/mime": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "@types/mime-types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", - "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "version": "2.1.2", "dev": true }, "@types/minimatch": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + "version": "0.7.31" }, "@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" + "version": "20.3.3" }, "@types/node-fetch": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", "dev": true, "requires": { "@types/node": "*", @@ -29108,57 +32762,39 @@ } }, "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "version": "2.4.2", "dev": true }, "@types/npmlog": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", - "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==", "dev": true }, "@types/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, "@types/prettier": { "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "@types/pretty-hrtime": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", - "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", "dev": true }, "@types/prop-types": { "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", "dev": true }, "@types/qs": { "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, "@types/range-parser": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, "@types/react": { "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", - "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", "dev": true, "requires": { "@types/prop-types": "*", @@ -29168,8 +32804,6 @@ }, "@types/react-dom": { "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", - "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", "dev": true, "requires": { "@types/react": "*" @@ -29177,32 +32811,22 @@ }, "@types/react-gtm-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/react-gtm-module/-/react-gtm-module-2.0.1.tgz", - "integrity": "sha512-T/DN9gAbCYk5wJ1nxf4pSwmXz4d1iVjM++OoG+mwMfz9STMAotGjSb65gJHOS5bPvl6vLSsJnuC+y/43OQrltg==", "dev": true }, "@types/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, "@types/scheduler": { "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", "dev": true }, "@types/semver": { "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", "dev": true }, "@types/send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", "dev": true, "requires": { "@types/mime": "^1", @@ -29211,8 +32835,6 @@ }, "@types/serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, "requires": { "@types/express": "*" @@ -29220,8 +32842,6 @@ }, "@types/serve-static": { "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dev": true, "requires": { "@types/http-errors": "*", @@ -29231,16 +32851,12 @@ }, "@types/set-cookie-parser": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz", - "integrity": "sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==", "requires": { "@types/node": "*" } }, "@types/sockjs": { "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, "requires": { "@types/node": "*" @@ -29248,14 +32864,10 @@ }, "@types/stack-utils": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/styled-components": { "version": "5.1.26", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz", - "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==", "dev": true, "requires": { "@types/hoist-non-react-statics": "*", @@ -29265,26 +32877,18 @@ }, "@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==", "dev": true }, "@types/tough-cookie": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", "dev": true }, "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "version": "2.0.8", "dev": true }, "@types/ws": { "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dev": true, "requires": { "@types/node": "*" @@ -29292,8 +32896,6 @@ }, "@types/yargs": { "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -29301,14 +32903,10 @@ }, "@types/yargs-parser": { "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "@typescript-eslint/eslint-plugin": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", - "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.4.0", @@ -29325,8 +32923,6 @@ "dependencies": { "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -29334,8 +32930,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -29343,16 +32937,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@typescript-eslint/experimental-utils": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.61.0.tgz", - "integrity": "sha512-r4RTnwTcaRRVUyKb7JO4DiOGmcMCat+uNs6HqJBfX7K2nlq5TagYZShhbhAw7hFT3bHaYgxMw6pKP0fhu05VMA==", "dev": true, "requires": { "@typescript-eslint/utils": "5.61.0" @@ -29360,8 +32950,6 @@ }, "@typescript-eslint/parser": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz", - "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.61.0", @@ -29372,8 +32960,6 @@ }, "@typescript-eslint/scope-manager": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", - "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", "dev": true, "requires": { "@typescript-eslint/types": "5.61.0", @@ -29382,8 +32968,6 @@ }, "@typescript-eslint/type-utils": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", - "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", "dev": true, "requires": { "@typescript-eslint/typescript-estree": "5.61.0", @@ -29394,14 +32978,10 @@ }, "@typescript-eslint/types": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", - "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", - "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", "dev": true, "requires": { "@typescript-eslint/types": "5.61.0", @@ -29415,8 +32995,6 @@ "dependencies": { "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -29424,8 +33002,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -29433,16 +33009,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@typescript-eslint/utils": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", - "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", @@ -29457,8 +33029,6 @@ "dependencies": { "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -29466,8 +33036,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -29475,16 +33043,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "@typescript-eslint/visitor-keys": { "version": "5.61.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", - "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", "dev": true, "requires": { "@typescript-eslint/types": "5.61.0", @@ -29493,8 +33057,6 @@ }, "@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==", "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -29503,26 +33065,18 @@ }, "@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==", "dev": true }, "@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==", "dev": true }, "@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==", "dev": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", @@ -29532,14 +33086,10 @@ }, "@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==", "dev": true }, "@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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.6", @@ -29550,8 +33100,6 @@ }, "@webassemblyjs/ieee754": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" @@ -29559,8 +33107,6 @@ }, "@webassemblyjs/leb128": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "requires": { "@xtuc/long": "4.2.2" @@ -29568,14 +33114,10 @@ }, "@webassemblyjs/utf8": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, "@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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.6", @@ -29590,8 +33132,6 @@ }, "@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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.6", @@ -29603,8 +33143,6 @@ }, "@webassemblyjs/wasm-opt": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.6", @@ -29615,8 +33153,6 @@ }, "@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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.6", @@ -29629,8 +33165,6 @@ }, "@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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.6", @@ -29639,64 +33173,75 @@ }, "@webpack-cli/configtest": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/serve": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true + "dev": true, + "requires": {} }, "@xmldom/xmldom": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.9.tgz", - "integrity": "sha512-4VSbbcMoxc4KLjb1gs96SRmi7w4h1SF+fCoiK0XaQX62buCc1G5d0DC5bJ9xJBNPDSVCmIrcl8BiYxzjrqaaJA==" + "version": "0.8.9" }, "@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, "@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==", "dev": true }, "@yarnpkg/esbuild-plugin-pnp": { "version": "3.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", - "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", "dev": true, "requires": { "tslib": "^2.4.0" } }, + "@yarnpkg/fslib": { + "version": "2.10.3", + "dev": true, + "requires": { + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "@yarnpkg/libzip": { + "version": "2.3.0", + "dev": true, + "requires": { + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, "@zxing/text-encoding": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", "optional": true }, "abab": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, "accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { "mime-types": "~2.1.34", @@ -29705,14 +33250,10 @@ }, "acorn": { "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true }, "acorn-globals": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "requires": { "acorn": "^8.1.0", @@ -29721,40 +33262,30 @@ "dependencies": { "acorn-walk": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true } } }, "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==", - "dev": true + "dev": true, + "requires": {} }, "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 + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "address": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "dev": true }, "agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" @@ -29762,8 +33293,6 @@ }, "aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { "clean-stack": "^2.0.0", @@ -29772,16 +33301,12 @@ "dependencies": { "indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true } } }, "ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -29792,8 +33317,6 @@ }, "ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "requires": { "ajv": "^8.0.0" @@ -29801,8 +33324,6 @@ }, "ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.3" @@ -29810,34 +33331,24 @@ }, "ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "version": "0.21.3" } } }, "ansi-html-community": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "5.0.1" }, "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==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -29845,8 +33356,6 @@ }, "anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -29854,20 +33363,14 @@ }, "app-root-dir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", - "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", "dev": true }, "aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "are-we-there-yet": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -29876,14 +33379,17 @@ }, "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 }, + "aria-hidden": { + "version": "1.2.3", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } + }, "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, "requires": { "dequal": "^2.0.3" @@ -29891,8 +33397,6 @@ }, "array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29901,14 +33405,10 @@ }, "array-flatten": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, "array-includes": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29920,20 +33420,14 @@ }, "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==", "dev": true }, "array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, "array.prototype.flat": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29944,8 +33438,6 @@ }, "array.prototype.flatmap": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29956,8 +33448,6 @@ }, "array.prototype.tosorted": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29968,21 +33458,18 @@ } }, "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "version": "2.1.0", "dev": true, "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" } }, "ast-types": { "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", "dev": true, "requires": { "tslib": "^2.0.1" @@ -29990,49 +33477,33 @@ }, "ast-types-flow": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, "astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "version": "1.0.5" }, "axe-core": { "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", "dev": true }, "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, "requires": { "dequal": "^2.0.3" @@ -30040,14 +33511,11 @@ }, "babel-core": { "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true + "dev": true, + "requires": {} }, "babel-jest": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.0.tgz", - "integrity": "sha512-Jj8Bq2yKsk11XLk06Nm8SdvYkAcecH+GuhxB8DnK5SncjHnJ88TQjSnGgE7jpajpnSvz9DZ6X8hXrDkD/6/TPQ==", "dev": true, "requires": { "@jest/transform": "^29.6.0", @@ -30061,8 +33529,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -30070,8 +33536,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -30080,8 +33544,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -30089,20 +33551,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -30112,8 +33568,6 @@ }, "babel-loader": { "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", - "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", "dev": true, "requires": { "find-cache-dir": "^3.3.2", @@ -30122,14 +33576,10 @@ }, "babel-plugin-add-react-displayname": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", - "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", "dev": true }, "babel-plugin-istanbul": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -30141,8 +33591,6 @@ }, "babel-plugin-jest-hoist": { "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -30153,8 +33601,6 @@ }, "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==", "dev": true, "requires": { "@babel/runtime": "^7.12.5", @@ -30164,44 +33610,34 @@ }, "babel-plugin-named-exports-order": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", - "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", "dev": true }, "babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", - "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", + "version": "0.4.6", "dev": true, "requires": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", - "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", + "version": "0.8.5", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.1", - "core-js-compat": "^3.31.0" + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.32.2" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", - "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", + "version": "0.5.3", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.1" + "@babel/helper-define-polyfill-provider": "^0.4.3" } }, "babel-plugin-react-docgen": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", - "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", "dev": true, "requires": { "ast-types": "^0.14.2", @@ -30211,14 +33647,10 @@ }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", "dev": true }, "babel-preset-current-node-syntax": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -30237,8 +33669,6 @@ }, "babel-preset-jest": { "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dev": true, "requires": { "babel-plugin-jest-hoist": "^29.5.0", @@ -30247,8 +33677,6 @@ }, "babel-preset-react-app": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", "dev": true, "requires": { "@babel/core": "^7.16.0", @@ -30271,63 +33699,35 @@ }, "balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "version": "1.5.1" }, "batch": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, "better-opn": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", - "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==", + "version": "3.0.2", "dev": true, "requires": { - "open": "^7.0.3" - }, - "dependencies": { - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - } + "open": "^8.0.4" } }, "big-integer": { "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "dev": true }, "big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "version": "2.2.0" }, "bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -30336,8 +33736,6 @@ }, "body-parser": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, "requires": { "bytes": "3.1.2", @@ -30356,14 +33754,10 @@ "dependencies": { "bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -30371,16 +33765,12 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "bonjour-service": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dev": true, "requires": { "array-flatten": "^2.1.2", @@ -30391,14 +33781,10 @@ }, "boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "bplist-parser": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "dev": true, "requires": { "big-integer": "^1.6.44" @@ -30406,8 +33792,6 @@ }, "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, "requires": { "balanced-match": "^1.0.0", @@ -30416,43 +33800,33 @@ }, "braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { "fill-range": "^7.0.1" } }, "browser-assert": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", - "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", "dev": true }, "browserify-zlib": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", "dev": true, "requires": { "pako": "~0.2.0" } }, "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.22.1", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" } }, "bser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { "node-int64": "^0.4.0" @@ -30460,8 +33834,6 @@ }, "buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -30469,26 +33841,18 @@ }, "buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, "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==", "dev": true }, "bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true }, "c8": { "version": "7.14.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", - "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", @@ -30507,8 +33871,6 @@ "dependencies": { "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, "requires": { "locate-path": "^6.0.0", @@ -30517,8 +33879,6 @@ }, "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, "requires": { "p-locate": "^5.0.0" @@ -30526,8 +33886,6 @@ }, "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, "requires": { "yocto-queue": "^0.1.0" @@ -30535,8 +33893,6 @@ }, "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, "requires": { "p-limit": "^3.0.2" @@ -30546,8 +33902,6 @@ }, "call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -30555,14 +33909,10 @@ }, "callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "requires": { "pascal-case": "^3.1.2", @@ -30571,32 +33921,22 @@ }, "camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "camelize": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", "dev": true }, "caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "version": "1.0.30001549", "dev": true }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -30606,19 +33946,13 @@ }, "char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "version": "0.7.0" }, "chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -30632,32 +33966,22 @@ }, "chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, "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==", "dev": true }, "ci-info": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true }, "cjs-module-lexer": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "clean-css": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -30665,14 +33989,10 @@ }, "clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, "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==", "dev": true, "requires": { "del": "^4.1.1" @@ -30680,21 +34000,15 @@ }, "cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==" + "version": "2.9.0" }, "cli-table3": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -30703,8 +34017,6 @@ }, "cli-truncate": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "requires": { "slice-ansi": "^5.0.0", @@ -30713,14 +34025,10 @@ "dependencies": { "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 }, "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, "requires": { "eastasianwidth": "^0.2.0", @@ -30730,8 +34038,6 @@ }, "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, "requires": { "ansi-regex": "^6.0.1" @@ -30740,14 +34046,10 @@ } }, "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "version": "3.0.0" }, "cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -30756,14 +34058,10 @@ } }, "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + "version": "1.0.4" }, "clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { "is-plain-object": "^2.0.4", @@ -30773,20 +34071,14 @@ }, "co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, "collect-v8-coverage": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "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==", "dev": true, "requires": { "color-name": "1.1.3" @@ -30794,26 +34086,18 @@ }, "color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" @@ -30821,26 +34105,18 @@ }, "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==", "dev": true }, "common-path-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, "commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "compressible": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { "mime-db": ">= 1.43.0 < 2" @@ -30848,8 +34124,6 @@ }, "compression": { "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", @@ -30863,8 +34137,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -30872,28 +34144,20 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -30904,8 +34168,6 @@ "dependencies": { "readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -30919,14 +34181,10 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -30936,26 +34194,18 @@ }, "confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, "connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { "safe-buffer": "5.2.1" @@ -30963,32 +34213,22 @@ }, "content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true }, "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==", "dev": true }, "cookie": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true }, "cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, "copy-anything": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", "dev": true, "requires": { "is-what": "^4.1.8" @@ -30996,8 +34236,6 @@ }, "copy-webpack-plugin": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dev": true, "requires": { "fast-glob": "^3.2.11", @@ -31010,8 +34248,6 @@ "dependencies": { "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, "requires": { "is-glob": "^4.0.3" @@ -31019,8 +34255,6 @@ }, "globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "requires": { "dir-glob": "^3.0.1", @@ -31032,37 +34266,27 @@ }, "slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true } } }, "core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "version": "3.33.0", "dev": true, "requires": { - "browserslist": "^4.21.5" + "browserslist": "^4.22.1" } }, "core-js-pure": { "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz", - "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==", "dev": true }, "core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cosmiconfig": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -31074,8 +34298,6 @@ }, "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, "requires": { "path-key": "^3.1.0", @@ -31085,20 +34307,14 @@ }, "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==", "dev": true }, "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==", "dev": true }, "css-loader": { "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", "dev": true, "requires": { "icss-utils": "^5.1.0", @@ -31113,8 +34329,6 @@ "dependencies": { "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -31122,8 +34336,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -31131,16 +34343,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "css-select": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { "boolbase": "^1.0.0", @@ -31152,8 +34360,6 @@ }, "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==", "dev": true, "requires": { "camelize": "^1.0.0", @@ -31163,26 +34369,18 @@ }, "css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, "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 }, "cssom": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "cssstyle": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { "cssom": "~0.3.6" @@ -31190,28 +34388,20 @@ "dependencies": { "cssom": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true } } }, "csstype": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "dev": true }, "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 }, "data-urls": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "requires": { "abab": "^2.0.6", @@ -31221,8 +34411,6 @@ "dependencies": { "tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "requires": { "punycode": "^2.1.1" @@ -31230,14 +34418,10 @@ }, "webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, "whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "requires": { "tr46": "^3.0.0", @@ -31248,28 +34432,20 @@ }, "debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } }, "decimal.js": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "dedent": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "deep-equal": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", - "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", @@ -31294,28 +34470,20 @@ "dependencies": { "isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "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 }, "deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true }, "default-browser-id": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", "dev": true, "requires": { "bplist-parser": "^0.2.0", @@ -31324,8 +34492,6 @@ }, "default-gateway": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "requires": { "execa": "^5.0.0" @@ -31333,22 +34499,16 @@ }, "defaults": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { "clone": "^1.0.2" } }, "define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, "define-properties": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "requires": { "has-property-descriptors": "^1.0.0", @@ -31357,14 +34517,10 @@ }, "defu": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", - "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", "dev": true }, "del": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { "@types/glob": "^7.1.1", @@ -31378,8 +34534,6 @@ "dependencies": { "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==", "dev": true, "requires": { "array-uniq": "^1.0.1" @@ -31387,8 +34541,6 @@ }, "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -31401,8 +34553,6 @@ }, "globby": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, "requires": { "array-union": "^1.0.1", @@ -31414,16 +34564,12 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true } } }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -31433,56 +34579,42 @@ }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true }, "destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, "detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, "detect-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "detect-node-es": { + "version": "1.1.0", "dev": true }, "detect-package-manager": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", - "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", "dev": true, "requires": { "execa": "^5.1.1" @@ -31490,8 +34622,6 @@ }, "detect-port": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dev": true, "requires": { "address": "^1.0.1", @@ -31500,14 +34630,10 @@ }, "diff-sequences": { "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true }, "dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" @@ -31515,14 +34641,10 @@ }, "dns-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, "dns-packet": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -31530,8 +34652,6 @@ }, "doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -31539,14 +34659,10 @@ }, "dom-accessibility-api": { "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, "dom-converter": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { "utila": "~0.4" @@ -31554,8 +34670,6 @@ }, "dom-serializer": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -31565,14 +34679,10 @@ }, "domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, "domexception": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, "requires": { "webidl-conversions": "^7.0.0" @@ -31580,16 +34690,12 @@ "dependencies": { "webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true } } }, "domhandler": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -31597,8 +34703,6 @@ }, "domutils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -31608,8 +34712,6 @@ }, "dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "requires": { "no-case": "^3.0.4", @@ -31617,14 +34719,10 @@ } }, "dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + "version": "16.3.1" }, "dotenv-defaults": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", - "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", "dev": true, "requires": { "dotenv": "^8.2.0" @@ -31632,22 +34730,16 @@ "dependencies": { "dotenv": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true } } }, "dotenv-expand": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", "dev": true }, "dotenv-webpack": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.0.1.tgz", - "integrity": "sha512-CdrgfhZOnx4uB18SgaoP9XHRN2v48BbjuXQsZY5ixs5A8579NxQkmMxRtI7aTwSiSQcM2ao12Fdu+L3ZS3bG4w==", "dev": true, "requires": { "dotenv-defaults": "^2.0.2" @@ -31655,14 +34747,10 @@ }, "duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "duplexify": { "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -31673,8 +34761,6 @@ "dependencies": { "readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -31688,14 +34774,10 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -31705,59 +34787,41 @@ }, "eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, "ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "ejs": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, "requires": { "jake": "^10.8.5" } }, "electron-to-chromium": { - "version": "1.4.450", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", - "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", + "version": "1.4.556", "dev": true }, "emittery": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true }, "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 }, "emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, "encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, "end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -31765,8 +34829,6 @@ }, "endent": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", - "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", "dev": true, "requires": { "dedent": "^0.7.0", @@ -31776,8 +34838,6 @@ }, "enhanced-resolve": { "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -31786,20 +34846,14 @@ }, "entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "envinfo": { "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true }, "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==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -31807,8 +34861,6 @@ }, "error-stack-parser": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, "requires": { "stackframe": "^1.3.4" @@ -31816,8 +34868,6 @@ }, "es-abstract": { "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", @@ -31858,8 +34908,6 @@ }, "es-get-iterator": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -31875,22 +34923,16 @@ "dependencies": { "isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "es-module-lexer": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, "es-set-tostringtag": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "requires": { "get-intrinsic": "^1.1.3", @@ -31900,8 +34942,6 @@ }, "es-shim-unscopables": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "requires": { "has": "^1.0.3" @@ -31909,8 +34949,6 @@ }, "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==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -31918,16 +34956,8 @@ "is-symbol": "^1.0.2" } }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, "esbuild": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "requires": { "@esbuild/android-arm": "0.17.19", @@ -31956,8 +34986,6 @@ }, "esbuild-loader": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.0.2.tgz", - "integrity": "sha512-kj88m0yrtTEJDeUEF+3TZsq7t9VPzQQj7UmXAzUbIaipoYSrd0UxKAcg4l9CBgP8uVoploiw+nKr8DIv6Y9gXw==", "dev": true, "requires": { "esbuild": "^0.19.0", @@ -31966,164 +34994,13 @@ "webpack-sources": "^1.4.3" }, "dependencies": { - "@esbuild/android-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.2.tgz", - "integrity": "sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.2.tgz", - "integrity": "sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.2.tgz", - "integrity": "sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==", - "dev": true, - "optional": true - }, "@esbuild/darwin-arm64": { "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.2.tgz", - "integrity": "sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.2.tgz", - "integrity": "sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.2.tgz", - "integrity": "sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.2.tgz", - "integrity": "sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.2.tgz", - "integrity": "sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.2.tgz", - "integrity": "sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.2.tgz", - "integrity": "sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.2.tgz", - "integrity": "sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.2.tgz", - "integrity": "sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.2.tgz", - "integrity": "sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.2.tgz", - "integrity": "sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.2.tgz", - "integrity": "sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.2.tgz", - "integrity": "sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.2.tgz", - "integrity": "sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.2.tgz", - "integrity": "sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.2.tgz", - "integrity": "sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.2.tgz", - "integrity": "sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.2.tgz", - "integrity": "sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.2.tgz", - "integrity": "sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==", "dev": true, "optional": true }, "esbuild": { "version": "0.19.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.2.tgz", - "integrity": "sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==", "dev": true, "requires": { "@esbuild/android-arm": "0.19.2", @@ -32152,8 +35029,6 @@ }, "webpack-sources": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -32164,39 +35039,27 @@ }, "esbuild-plugin-alias": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz", - "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==", "dev": true }, "esbuild-register": { "version": "3.4.2", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz", - "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==", "dev": true, "requires": { "debug": "^4.3.4" } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "version": "3.1.1" }, "escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "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==" + "version": "1.0.5" }, "escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "requires": { "esprima": "^4.0.1", @@ -32207,16 +35070,12 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "eslint": { "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", @@ -32262,8 +35121,6 @@ "dependencies": { "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -32274,8 +35131,6 @@ }, "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, "requires": { "color-convert": "^2.0.1" @@ -32283,8 +35138,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -32293,8 +35146,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -32302,20 +35153,14 @@ }, "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 }, "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint-scope": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -32324,14 +35169,10 @@ }, "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "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, "requires": { "locate-path": "^6.0.0", @@ -32340,8 +35181,6 @@ }, "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, "requires": { "is-glob": "^4.0.3" @@ -32349,8 +35188,6 @@ }, "globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -32358,20 +35195,14 @@ }, "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 }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "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, "requires": { "p-locate": "^5.0.0" @@ -32379,8 +35210,6 @@ }, "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, "requires": { "yocto-queue": "^0.1.0" @@ -32388,8 +35217,6 @@ }, "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, "requires": { "p-limit": "^3.0.2" @@ -32397,8 +35224,6 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -32408,14 +35233,11 @@ }, "eslint-config-prettier": { "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", - "dev": true + "dev": true, + "requires": {} }, "eslint-config-react-app": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "dev": true, "requires": { "@babel/core": "^7.16.0", @@ -32436,8 +35258,6 @@ }, "eslint-import-resolver-node": { "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { "debug": "^3.2.7", @@ -32447,8 +35267,6 @@ "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -32458,8 +35276,6 @@ }, "eslint-module-utils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "requires": { "debug": "^3.2.7" @@ -32467,8 +35283,6 @@ "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -32478,8 +35292,6 @@ }, "eslint-plugin-flowtype": { "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", "dev": true, "requires": { "lodash": "^4.17.21", @@ -32488,8 +35300,6 @@ }, "eslint-plugin-import": { "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { "array-includes": "^3.1.6", @@ -32511,8 +35321,6 @@ "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -32520,8 +35328,6 @@ }, "doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -32531,8 +35337,6 @@ }, "eslint-plugin-jest": { "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "^5.0.0" @@ -32540,8 +35344,6 @@ }, "eslint-plugin-jsx-a11y": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, "requires": { "@babel/runtime": "^7.20.7", @@ -32564,8 +35366,6 @@ }, "eslint-plugin-react": { "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "requires": { "array-includes": "^3.1.6", @@ -32587,8 +35387,6 @@ "dependencies": { "doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -32596,14 +35394,10 @@ }, "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "resolve": { "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "requires": { "is-core-module": "^2.9.0", @@ -32615,14 +35409,11 @@ }, "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 + "dev": true, + "requires": {} }, "eslint-plugin-storybook": { "version": "0.6.12", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.12.tgz", - "integrity": "sha512-XbIvrq6hNVG6rpdBr+eBw63QhOMLpZneQVSooEDow8aQCWGCk/5vqtap1yxpVydNfSxi3S/3mBBRLQqKUqQRww==", "dev": true, "requires": { "@storybook/csf": "^0.0.1", @@ -32633,8 +35424,6 @@ "dependencies": { "@storybook/csf": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", "dev": true, "requires": { "lodash": "^4.17.15" @@ -32644,8 +35433,6 @@ }, "eslint-plugin-testing-library": { "version": "5.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.0.tgz", - "integrity": "sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.58.0" @@ -32653,8 +35440,6 @@ }, "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==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -32663,14 +35448,10 @@ }, "eslint-visitor-keys": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true }, "espree": { "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", "dev": true, "requires": { "acorn": "^8.9.0", @@ -32680,14 +35461,10 @@ }, "esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -32695,16 +35472,12 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" @@ -32712,22 +35485,16 @@ "dependencies": { "estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "estree-to-babel": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", - "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", "dev": true, "requires": { "@babel/traverse": "^7.1.6", @@ -32737,31 +35504,21 @@ }, "esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, "eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "version": "3.3.0" }, "execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -32777,14 +35534,10 @@ }, "exit": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, "expect": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-AV+HaBtnDJ2YEUhPPo25HyUHBLaetM+y/Dq6pEC8VPQyt1dK+k8MfGkMy46djy2bddcqESc1kl4/K1uLWSfk9g==", "dev": true, "requires": { "@jest/expect-utils": "^29.6.0", @@ -32797,8 +35550,6 @@ }, "express": { "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, "requires": { "accepts": "~1.3.8", @@ -32836,14 +35587,10 @@ "dependencies": { "array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -32851,22 +35598,16 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -32875,8 +35616,6 @@ }, "extract-zip": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "dev": true, "requires": { "concat-stream": "^1.6.2", @@ -32887,8 +35626,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -32896,22 +35633,16 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -32923,32 +35654,22 @@ }, "fast-json-parse": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "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 }, "fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true }, "fastq": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -32956,8 +35677,6 @@ }, "faye-websocket": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -32965,8 +35684,6 @@ }, "fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "requires": { "bser": "2.1.1" @@ -32974,8 +35691,6 @@ }, "fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "requires": { "pend": "~1.2.0" @@ -32983,22 +35698,16 @@ }, "fetch-retry": { "version": "5.0.6", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", - "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==", "dev": true }, "figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" } }, "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, "requires": { "flat-cache": "^3.0.4" @@ -33006,8 +35715,6 @@ }, "file-system-cache": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", - "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", "dev": true, "requires": { "fs-extra": "11.1.1", @@ -33016,8 +35723,6 @@ }, "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==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -33025,8 +35730,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -33034,8 +35737,6 @@ }, "minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -33045,16 +35746,12 @@ }, "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==", "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "requires": { "debug": "2.6.9", @@ -33068,8 +35765,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -33077,16 +35772,12 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "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==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -33096,8 +35787,6 @@ "dependencies": { "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==", "dev": true, "requires": { "semver": "^6.0.0" @@ -33107,8 +35796,6 @@ }, "find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", @@ -33117,8 +35804,6 @@ }, "flat-cache": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", @@ -33127,34 +35812,24 @@ }, "flatted": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "flow-parser": { - "version": "0.211.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.211.0.tgz", - "integrity": "sha512-Ftqkqisn4MA8u+1I7KGYz35y/RtLsRETsK4qrH6KkDUjxnC4mgq3CcXbckHpGyfTErqMyVhJnlJ56feEn9Cn7A==", + "version": "0.218.1", "dev": true }, "follow-redirects": { "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true }, "for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "requires": { "is-callable": "^1.1.3" } }, "foreground-child": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -33163,8 +35838,6 @@ }, "fork-ts-checker-webpack-plugin": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", - "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", @@ -33183,8 +35856,6 @@ "dependencies": { "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -33195,14 +35866,11 @@ }, "ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "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, "requires": { "color-convert": "^2.0.1" @@ -33210,8 +35878,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -33220,8 +35886,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -33229,14 +35893,10 @@ }, "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 }, "fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -33246,20 +35906,14 @@ }, "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 }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -33267,8 +35921,6 @@ }, "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==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -33278,8 +35930,6 @@ }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -33287,8 +35937,6 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -33296,16 +35944,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "form-data": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -33315,26 +35959,18 @@ }, "forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, "fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "fs-extra": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -33344,8 +35980,6 @@ }, "fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -33353,8 +35987,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -33362,45 +35994,31 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "fs-monkey": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", "dev": true }, "fs-readdir-recursive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.1" }, "function.prototype.name": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -33411,14 +36029,10 @@ }, "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==", "dev": true }, "gauge": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -33434,19 +36048,13 @@ }, "gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "version": "2.0.5" }, "get-intrinsic": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -33454,34 +36062,28 @@ "has-symbols": "^1.0.3" } }, + "get-nonce": { + "version": "1.0.1", + "dev": true + }, "get-npm-tarball-url": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz", - "integrity": "sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==", "dev": true }, "get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, "get-port": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true }, "get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -33490,38 +36092,47 @@ }, "get-tsconfig": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", "dev": true, "requires": { "resolve-pkg-maps": "^1.0.0" } }, "giget": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.2.tgz", - "integrity": "sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==", + "version": "1.1.3", "dev": true, "requires": { - "colorette": "^2.0.19", + "colorette": "^2.0.20", "defu": "^6.1.2", - "https-proxy-agent": "^5.0.1", + "https-proxy-agent": "^7.0.2", "mri": "^1.2.0", - "node-fetch-native": "^1.0.2", - "pathe": "^1.1.0", - "tar": "^6.1.13" + "node-fetch-native": "^1.4.0", + "pathe": "^1.1.1", + "tar": "^6.2.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "dev": true, + "requires": { + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.2", + "dev": true, + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + } } }, "github-slugger": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", "dev": true }, "glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -33533,8 +36144,6 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -33542,8 +36151,6 @@ }, "minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -33553,16 +36160,12 @@ }, "glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } }, "glob-promise": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-6.0.3.tgz", - "integrity": "sha512-m+kxywR5j/2Z2V9zvHKfwwL5Gp7gIFEBX+deTB9w2lJB+wSuw9kcS43VfvTAMk8TXL5JCl/cCjsR+tgNVspGyA==", "dev": true, "requires": { "@types/glob": "^8.0.0" @@ -33570,8 +36173,6 @@ "dependencies": { "@types/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", "dev": true, "requires": { "@types/minimatch": "^5.1.2", @@ -33582,20 +36183,14 @@ }, "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==", "dev": true }, "globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globalthis": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "requires": { "define-properties": "^1.1.3" @@ -33603,8 +36198,6 @@ }, "globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -33617,33 +36210,23 @@ }, "gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "requires": { "get-intrinsic": "^1.1.3" } }, "graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "graphql": { - "version": "16.7.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.7.1.tgz", - "integrity": "sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==" + "version": "16.8.1" }, "gunzip-maybe": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", - "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", "dev": true, "requires": { "browserify-zlib": "^0.1.4", @@ -33656,8 +36239,6 @@ }, "gzip-size": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "requires": { "duplexer": "^0.1.2" @@ -33665,14 +36246,10 @@ }, "handle-thing": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "handlebars": { "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -33684,81 +36261,61 @@ }, "has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, "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==", "dev": true }, "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==", "dev": true }, "has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "requires": { "get-intrinsic": "^1.1.1" } }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "version": "1.0.1" }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "version": "1.0.3" }, "has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "requires": { "has-symbols": "^1.0.2" } }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "headers-polyfill": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.1.2.tgz", - "integrity": "sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==" + "version": "3.1.2" }, "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==", "dev": true, "requires": { "react-is": "^16.7.0" } }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, "hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -33769,8 +36326,6 @@ "dependencies": { "readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -33784,14 +36339,10 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -33801,8 +36352,6 @@ }, "html-encoding-sniffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "requires": { "whatwg-encoding": "^2.0.0" @@ -33810,20 +36359,14 @@ }, "html-entities": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", "dev": true }, "html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "html-minifier-terser": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "requires": { "camel-case": "^4.1.2", @@ -33837,22 +36380,16 @@ "dependencies": { "commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true } } }, "html-tags": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true }, "html-webpack-plugin": { "version": "5.5.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", - "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", "dev": true, "requires": { "@types/html-minifier-terser": "^6.0.0", @@ -33864,8 +36401,6 @@ }, "htmlparser2": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -33876,14 +36411,10 @@ }, "http-deceiver": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, "http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { "depd": "2.0.0", @@ -33895,14 +36426,10 @@ }, "http-parser-js": { "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", @@ -33912,8 +36439,6 @@ }, "http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { "@tootallnate/once": "2", @@ -33923,8 +36448,6 @@ }, "http-proxy-middleware": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", @@ -33936,8 +36459,6 @@ }, "https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { "agent-base": "6", @@ -33946,45 +36467,32 @@ }, "human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "husky": { "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "version": "1.2.1" }, "ignore": { "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -33993,16 +36501,12 @@ "dependencies": { "resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } }, "import-local": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -34011,14 +36515,10 @@ }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -34026,14 +36526,10 @@ } }, "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.4" }, "inquirer": { "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -34054,16 +36550,12 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -34071,26 +36563,18 @@ }, "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==", "requires": { "color-name": "~1.1.4" } }, "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==" + "version": "1.1.4" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" }, "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==", "requires": { "has-flag": "^4.0.0" } @@ -34099,8 +36583,6 @@ }, "internal-slot": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { "get-intrinsic": "^1.2.0", @@ -34110,32 +36592,29 @@ }, "interpret": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, + "invariant": { + "version": "2.2.4", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, "ip": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "ipaddr.js": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true }, "is-absolute-url": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, "is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -34143,8 +36622,6 @@ }, "is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -34154,14 +36631,10 @@ }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -34169,16 +36642,12 @@ }, "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==", "requires": { "binary-extensions": "^2.0.0" } }, "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==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -34186,14 +36655,10 @@ } }, "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==" + "version": "1.2.7" }, "is-core-module": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "requires": { "has": "^1.0.3" @@ -34201,8 +36666,6 @@ }, "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==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -34210,69 +36673,47 @@ }, "is-deflate": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", - "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", "dev": true }, "is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "version": "2.1.1" }, "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==" + "version": "3.0.0" }, "is-generator-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, "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==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-gzip": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", "dev": true }, "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "version": "1.0.0" }, "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 }, "is-nan": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -34281,24 +36722,16 @@ }, "is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-node-process": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", - "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" + "version": "1.2.0" }, "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "version": "7.0.0" }, "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==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -34306,14 +36739,10 @@ }, "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==", "dev": true }, "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==", "dev": true, "requires": { "is-path-inside": "^2.1.0" @@ -34321,8 +36750,6 @@ "dependencies": { "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==", "dev": true, "requires": { "path-is-inside": "^1.0.2" @@ -34332,20 +36759,14 @@ }, "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 }, "is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true }, "is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "^3.0.1" @@ -34353,14 +36774,10 @@ }, "is-potential-custom-element-name": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "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==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -34369,14 +36786,10 @@ }, "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 }, "is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "requires": { "call-bind": "^1.0.2" @@ -34384,14 +36797,10 @@ }, "is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -34399,8 +36808,6 @@ }, "is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -34408,8 +36815,6 @@ }, "is-typed-array": { "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -34419,20 +36824,14 @@ } }, "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "version": "0.1.0" }, "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 }, "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==", "dev": true, "requires": { "call-bind": "^1.0.2" @@ -34440,8 +36839,6 @@ }, "is-weakset": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -34450,14 +36847,10 @@ }, "is-what": { "version": "4.1.15", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.15.tgz", - "integrity": "sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==", "dev": true }, "is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { "is-docker": "^2.0.0" @@ -34465,42 +36858,22 @@ }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, - "isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, "istanbul-lib-coverage": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -34512,8 +36885,6 @@ }, "istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", @@ -34523,14 +36894,10 @@ "dependencies": { "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 }, "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==", "dev": true, "requires": { "semver": "^6.0.0" @@ -34538,8 +36905,6 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -34549,8 +36914,6 @@ }, "istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -34560,18 +36923,22 @@ }, "istanbul-reports": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, + "jackspeak": { + "version": "2.3.6", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jake": { "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, "requires": { "async": "^3.2.3", @@ -34582,8 +36949,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -34591,8 +36956,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -34601,8 +36964,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -34610,20 +36971,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -34633,8 +36988,6 @@ }, "jest": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.0.tgz", - "integrity": "sha512-do1J9gGrQ68E4UfMz/4OM71p9qCqQxu32N/9ZfeYFSSlx0uUOuxeyZxtJZNaUTW12ZA11ERhmBjBhy1Ho96R4g==", "dev": true, "requires": { "@jest/core": "^29.6.0", @@ -34645,8 +36998,6 @@ }, "jest-changed-files": { "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, "requires": { "execa": "^5.0.0", @@ -34655,8 +37006,6 @@ "dependencies": { "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, "requires": { "yocto-queue": "^0.1.0" @@ -34666,8 +37015,6 @@ }, "jest-circus": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.0.tgz", - "integrity": "sha512-LtG45qEKhse2Ws5zNR4DnZATReLGQXzBZGZnJ0DU37p6d4wDhu41vvczCQ3Ou+llR6CRYDBshsubV7H4jZvIkw==", "dev": true, "requires": { "@jest/environment": "^29.6.0", @@ -34694,8 +37041,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -34703,8 +37048,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -34713,8 +37056,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -34722,20 +37063,14 @@ }, "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 }, "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 }, "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, "requires": { "yocto-queue": "^0.1.0" @@ -34743,8 +37078,6 @@ }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -34754,22 +37087,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -34779,8 +37106,6 @@ }, "jest-cli": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.0.tgz", - "integrity": "sha512-WvZIaanK/abkw6s01924DQ2QLwM5Q4Y4iPbSDb9Zg6smyXGqqcPQ7ft9X8D7B0jICz312eSzM6UlQNxuZJBrMw==", "dev": true, "requires": { "@jest/core": "^29.6.0", @@ -34799,8 +37124,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -34808,8 +37131,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -34818,8 +37139,6 @@ }, "cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -34829,8 +37148,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -34838,20 +37155,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -34859,8 +37170,6 @@ }, "yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { "cliui": "^8.0.1", @@ -34874,16 +37183,12 @@ }, "yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true } } }, "jest-config": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.0.tgz", - "integrity": "sha512-fKA4jM91PDqWVkMpb1FVKxIuhg3hC6hgaen57cr1rRZkR96dCatvJZsk3ik7/GNu9ERj9wgAspOmyvkFoGsZhA==", "dev": true, "requires": { "@babel/core": "^7.11.6", @@ -34912,8 +37217,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -34921,8 +37224,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -34931,8 +37232,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -34940,14 +37239,10 @@ }, "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 }, "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -34960,14 +37255,10 @@ }, "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 }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -34977,22 +37268,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -35002,8 +37287,6 @@ }, "jest-diff": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.0.tgz", - "integrity": "sha512-ZRm7cd2m9YyZ0N3iMyuo1iUiprxQ/MFpYWXzEEj7hjzL3WnDffKW8192XBDcrAI8j7hnrM1wed3bL/oEnYF/8w==", "dev": true, "requires": { "chalk": "^4.0.0", @@ -35014,8 +37297,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35023,8 +37304,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35033,8 +37312,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35042,20 +37319,14 @@ }, "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 }, "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 }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -35065,22 +37336,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -35090,8 +37355,6 @@ }, "jest-docblock": { "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "requires": { "detect-newline": "^3.0.0" @@ -35099,8 +37362,6 @@ }, "jest-each": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.0.tgz", - "integrity": "sha512-d0Jem4RBAlFUyV6JSXPSHVUpNo5RleSj+iJEy1G3+ZCrzHDjWs/1jUfrbnJKHdJdAx5BCEce/Ju379WqHhQk4w==", "dev": true, "requires": { "@jest/types": "^29.6.0", @@ -35112,8 +37373,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35121,8 +37380,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35131,8 +37388,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35140,20 +37395,14 @@ }, "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 }, "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 }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -35163,22 +37412,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -35188,8 +37431,6 @@ }, "jest-environment-jsdom": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.0.tgz", - "integrity": "sha512-/cOhoyv+uMbOh4nQPyqtkPas/uUxr5AbK6TPqMMFyj1qEJURY78RhqgBjOFIX02+Lvu5V0RWLq2qKY1dHubFOQ==", "dev": true, "requires": { "@jest/environment": "^29.6.0", @@ -35204,8 +37445,6 @@ "dependencies": { "jest-mock": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", "dev": true, "requires": { "@jest/types": "^29.6.0", @@ -35217,8 +37456,6 @@ }, "jest-environment-node": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.0.tgz", - "integrity": "sha512-BOf5Q2/nFCdBOnyBM5c5/6DbdQYgc+0gyUQ8l8qhUAB8O7pM+4QJXIXJsRZJaxd5SHV6y5VArTVhOfogoqcP8Q==", "dev": true, "requires": { "@jest/environment": "^29.6.0", @@ -35231,8 +37468,6 @@ "dependencies": { "jest-mock": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", "dev": true, "requires": { "@jest/types": "^29.6.0", @@ -35244,14 +37479,10 @@ }, "jest-get-type": { "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true }, "jest-haste-map": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.0.tgz", - "integrity": "sha512-dY1DKufptj7hcJSuhpqlYPGcnN3XjlOy/g0jinpRTMsbb40ivZHiuIPzeminOZkrek8C+oDxC54ILGO3vMLojg==", "dev": true, "requires": { "@jest/types": "^29.6.0", @@ -35270,14 +37501,10 @@ "dependencies": { "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 }, "jest-worker": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", "dev": true, "requires": { "@types/node": "*", @@ -35288,8 +37515,6 @@ }, "supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -35299,8 +37524,6 @@ }, "jest-leak-detector": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.0.tgz", - "integrity": "sha512-JdV6EZOPxHR1gd6ccxjNowuROkT2jtGU5G/g58RcJX1xe5mrtLj0g6/ZkyMoXF4cs+tTkHMFX6pcIrB1QPQwCw==", "dev": true, "requires": { "jest-get-type": "^29.4.3", @@ -35309,14 +37532,10 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -35326,16 +37545,12 @@ }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true } } }, "jest-matcher-utils": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.0.tgz", - "integrity": "sha512-oSlqfGN+sbkB2Q5um/zL7z80w84FEAcLKzXBZIPyRk2F2Srg1ubhrHVKW68JCvb2+xKzAeGw35b+6gciS24PHw==", "dev": true, "requires": { "chalk": "^4.0.0", @@ -35346,8 +37561,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35355,8 +37568,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35365,8 +37576,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35374,20 +37583,14 @@ }, "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 }, "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 }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -35397,22 +37600,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -35422,8 +37619,6 @@ }, "jest-message-util": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.0.tgz", - "integrity": "sha512-mkCp56cETbpoNtsaeWVy6SKzk228mMi9FPHSObaRIhbR2Ujw9PqjW/yqVHD2tN1bHbC8ol6h3UEo7dOPmIYwIA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", @@ -35439,8 +37634,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35448,8 +37641,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35458,8 +37649,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35467,20 +37656,14 @@ }, "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 }, "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 }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -35490,22 +37673,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -35515,8 +37692,6 @@ }, "jest-mock": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, "requires": { "@jest/types": "^27.5.1", @@ -35525,8 +37700,6 @@ "dependencies": { "@jest/types": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -35538,8 +37711,6 @@ }, "@types/yargs": { "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -35547,8 +37718,6 @@ }, "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, "requires": { "color-convert": "^2.0.1" @@ -35556,8 +37725,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35566,8 +37733,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35575,20 +37740,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -35598,20 +37757,15 @@ }, "jest-pnp-resolver": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", "dev": true }, "jest-resolve": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.0.tgz", - "integrity": "sha512-+hrpY4LzAONoZA/rvB6rnZLkOSA6UgJLpdCWrOZNSgGxWMumzRLu7dLUSCabAHzoHIDQ9qXfr3th1zYNJ0E8sQ==", "dev": true, "requires": { "chalk": "^4.0.0", @@ -35627,8 +37781,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35636,8 +37788,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35646,8 +37796,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35655,20 +37803,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -35678,8 +37820,6 @@ }, "jest-resolve-dependencies": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.0.tgz", - "integrity": "sha512-eOfPog9K3hJdJk/3i6O6bQhXS+3uXhMDkLJGX+xmMPp7T1d/zdcFofbDnHgNoEkhD/mSimC5IagLEP7lpLLu/A==", "dev": true, "requires": { "jest-regex-util": "^29.4.3", @@ -35688,8 +37828,6 @@ }, "jest-runner": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.0.tgz", - "integrity": "sha512-4fZuGV2lOxS2BiqEG9/AI8E6O+jo+QZjMVcgi1x5E6aDql0Gd/EFIbUQ0pSS09y8cya1vJB/qC2xsE468jqtSg==", "dev": true, "requires": { "@jest/console": "^29.6.0", @@ -35717,8 +37855,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35726,8 +37862,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35736,8 +37870,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35745,20 +37877,14 @@ }, "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 }, "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 }, "jest-worker": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", "dev": true, "requires": { "@types/node": "*", @@ -35769,8 +37895,6 @@ "dependencies": { "supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -35780,8 +37904,6 @@ }, "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, "requires": { "yocto-queue": "^0.1.0" @@ -35789,8 +37911,6 @@ }, "source-map-support": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -35799,8 +37919,6 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -35810,8 +37928,6 @@ }, "jest-runtime": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.0.tgz", - "integrity": "sha512-5FavYo3EeXLHIvnJf+r7Cj0buePAbe4mzRB9oeVxDS0uVmouSBjWeGgyRjZkw7ArxOoZI8gO6f8SGMJ2HFlwwg==", "dev": true, "requires": { "@jest/environment": "^29.6.0", @@ -35840,8 +37956,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35849,8 +37963,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35859,8 +37971,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35868,14 +37978,10 @@ }, "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 }, "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -35888,14 +37994,10 @@ }, "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 }, "jest-mock": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", "dev": true, "requires": { "@jest/types": "^29.6.0", @@ -35905,14 +38007,10 @@ }, "strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -35922,8 +38020,6 @@ }, "jest-snapshot": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.0.tgz", - "integrity": "sha512-H3kUE9NwWDEDoutcOSS921IqdlkdjgnMdj1oMyxAHNflscdLc9dB8OudZHV6kj4OHJxbMxL8CdI5DlwYrs4wQg==", "dev": true, "requires": { "@babel/core": "^7.11.6", @@ -35951,8 +38047,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -35960,8 +38054,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -35970,8 +38062,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -35979,20 +38069,14 @@ }, "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 }, "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 }, "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==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -36000,8 +38084,6 @@ }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -36011,22 +38093,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "semver": { "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -36034,8 +38110,6 @@ }, "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, "requires": { "has-flag": "^4.0.0" @@ -36043,16 +38117,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "jest-util": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.0.tgz", - "integrity": "sha512-S0USx9YwcvEm4pQ5suisVm/RVxBmi0GFR7ocJhIeaCuW5AXnAnffXbaVKvIFodyZNOc9ygzVtTxmBf40HsHXaA==", "dev": true, "requires": { "@jest/types": "^29.6.0", @@ -36065,8 +38135,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -36074,8 +38142,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -36084,8 +38150,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -36093,20 +38157,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -36116,8 +38174,6 @@ }, "jest-validate": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.0.tgz", - "integrity": "sha512-MLTrAJsb1+W7svbeZ+A7pAnyXMaQrjvPDKCy7OlfsfB6TMVc69v7WjUWfiR6r3snULFWZASiKgvNVDuATta1dg==", "dev": true, "requires": { "@jest/types": "^29.6.0", @@ -36130,8 +38186,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -36139,8 +38193,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -36149,8 +38201,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -36158,20 +38208,14 @@ }, "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 }, "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 }, "pretty-format": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", "dev": true, "requires": { "@jest/schemas": "^29.6.0", @@ -36181,22 +38225,16 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true } } }, "react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "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, "requires": { "has-flag": "^4.0.0" @@ -36206,8 +38244,6 @@ }, "jest-watcher": { "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.0.tgz", - "integrity": "sha512-LdsQqFNX60mRdRRe+zsELnYRH1yX6KL+ukbh+u6WSQeTheZZe1TlLJNKRQiZ7e0VbvMkywmMWL/KV35noOJCcw==", "dev": true, "requires": { "@jest/test-result": "^29.6.0", @@ -36222,8 +38258,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -36231,8 +38265,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -36241,8 +38273,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -36250,20 +38280,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -36273,8 +38297,6 @@ }, "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==", "dev": true, "requires": { "@types/node": "*", @@ -36284,14 +38306,10 @@ "dependencies": { "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 }, "supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -36300,19 +38318,13 @@ } }, "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + "version": "1.1.6" }, "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "version": "4.0.0" }, "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, "requires": { "argparse": "^2.0.1" @@ -36320,8 +38332,6 @@ }, "jscodeshift": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", "dev": true, "requires": { "@babel/core": "^7.13.16", @@ -36347,8 +38357,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -36356,8 +38364,6 @@ }, "ast-types": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", "dev": true, "requires": { "tslib": "^2.0.1" @@ -36365,8 +38371,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -36375,8 +38379,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -36384,20 +38386,14 @@ }, "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 }, "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 }, "recast": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", "dev": true, "requires": { "ast-types": "0.15.2", @@ -36408,30 +38404,15 @@ }, "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, "requires": { "has-flag": "^4.0.0" } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } } } }, "jsdom": { "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "requires": { "abab": "^2.0.6", @@ -36464,8 +38445,6 @@ "dependencies": { "form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -36475,8 +38454,6 @@ }, "tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "requires": { "punycode": "^2.1.1" @@ -36484,14 +38461,10 @@ }, "webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, "whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "requires": { "tr46": "^3.0.0", @@ -36502,38 +38475,26 @@ }, "jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "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==", "dev": true }, "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==", "dev": true }, "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 }, "json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", @@ -36542,8 +38503,6 @@ }, "jsx-ast-utils": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", "dev": true, "requires": { "array-includes": "^3.1.6", @@ -36554,26 +38513,18 @@ }, "kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, "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 }, "language-tags": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, "requires": { "language-subtag-registry": "~0.3.2" @@ -36581,8 +38532,6 @@ }, "launch-editor": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", "dev": true, "requires": { "picocolors": "^1.0.0", @@ -36591,8 +38540,6 @@ }, "lazy-universal-dotenv": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz", - "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==", "dev": true, "requires": { "app-root-dir": "^1.0.2", @@ -36602,14 +38549,10 @@ }, "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==", "dev": true }, "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, "requires": { "prelude-ls": "^1.2.1", @@ -36618,20 +38561,14 @@ }, "lilconfig": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true }, "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==", "dev": true }, "lint-staged": { "version": "13.2.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.3.tgz", - "integrity": "sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==", "dev": true, "requires": { "chalk": "5.2.0", @@ -36651,20 +38588,14 @@ "dependencies": { "chalk": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true }, "commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true }, "execa": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -36680,26 +38611,18 @@ }, "human-signals": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true }, "is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true }, "mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true }, "npm-run-path": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "requires": { "path-key": "^4.0.0" @@ -36707,8 +38630,6 @@ }, "onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "requires": { "mimic-fn": "^4.0.0" @@ -36716,28 +38637,20 @@ }, "path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true }, "strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true }, "yaml": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true } } }, "listr2": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", - "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", "dev": true, "requires": { "cli-truncate": "^2.1.0", @@ -36752,8 +38665,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -36761,8 +38672,6 @@ }, "cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { "slice-ansi": "^3.0.0", @@ -36771,8 +38680,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -36780,14 +38687,10 @@ }, "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 }, "p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" @@ -36795,8 +38698,6 @@ }, "slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -36808,14 +38709,10 @@ }, "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==", "dev": true }, "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==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -36825,64 +38722,44 @@ }, "locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.17.21" }, "lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "lodash.escape": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", "dev": true }, "lodash.flatten": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, "lodash.invokemap": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", - "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", "dev": true }, "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 }, "lodash.pullall": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", - "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", "dev": true }, "lodash.uniqby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", "dev": true }, "log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -36890,16 +38767,12 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36907,26 +38780,18 @@ }, "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==", "requires": { "color-name": "~1.1.4" } }, "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==" + "version": "1.1.4" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" }, "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==", "requires": { "has-flag": "^4.0.0" } @@ -36935,8 +38800,6 @@ }, "log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { "ansi-escapes": "^4.3.0", @@ -36947,8 +38810,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -36956,8 +38817,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -36965,14 +38824,10 @@ }, "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 }, "slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -36982,8 +38837,6 @@ }, "wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -36995,16 +38848,12 @@ }, "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==", "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "requires": { "tslib": "^2.0.3" @@ -37012,8 +38861,6 @@ }, "lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { "yallist": "^3.0.2" @@ -37021,14 +38868,10 @@ }, "lz-string": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true }, "make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", @@ -37036,17 +38879,13 @@ }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", "dev": true } } }, "makeerror": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "requires": { "tmpl": "1.0.5" @@ -37054,20 +38893,15 @@ }, "map-or-similar": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", - "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", "dev": true }, "markdown-to-jsx": { "version": "7.2.1", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz", - "integrity": "sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==", - "dev": true + "dev": true, + "requires": {} }, "mdast-util-definitions": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "dev": true, "requires": { "unist-util-visit": "^2.0.0" @@ -37075,20 +38909,14 @@ }, "mdast-util-to-string": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "dev": true }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true }, "memfs": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "requires": { "fs-monkey": "^1.0.4" @@ -37096,8 +38924,6 @@ }, "memoizerific": { "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", "dev": true, "requires": { "map-or-similar": "^1.5.0" @@ -37105,32 +38931,22 @@ }, "merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, "merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, "micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { "braces": "^3.0.2", @@ -37139,46 +38955,32 @@ }, "mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "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==", "dev": true, "requires": { "mime-db": "1.52.0" } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "version": "2.1.0" }, "min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -37186,20 +38988,14 @@ }, "minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true }, "minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "requires": { "minipass": "^3.0.0", @@ -37208,8 +39004,6 @@ "dependencies": { "minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -37217,16 +39011,12 @@ }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { "minimist": "^1.2.6" @@ -37234,31 +39024,21 @@ }, "mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true }, "mri": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true }, "mrmime": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "dev": true }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.2" }, "msw": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/msw/-/msw-1.2.3.tgz", - "integrity": "sha512-Fqy/TaLKR32x4IkMwudJHJysBzVM/v/lSoMPS9f3QaHLOmb3xHN9YurSUnRt+2eEvNXLjVPij1wMBQtLmTbKsg==", "requires": { "@mswjs/cookies": "^0.2.2", "@mswjs/interceptors": "^0.17.5", @@ -37283,16 +39063,12 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -37300,8 +39076,6 @@ }, "cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -37310,49 +39084,33 @@ }, "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==", "requires": { "color-name": "~1.1.4" } }, "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==" + "version": "1.1.4" }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "version": "0.4.2" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" }, "path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + "version": "6.2.1" }, "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==", "requires": { "has-flag": "^4.0.0" } }, "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + "version": "2.19.0" }, "yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -37364,16 +39122,12 @@ } }, "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "version": "21.1.1" } } }, "msw-storybook-addon": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/msw-storybook-addon/-/msw-storybook-addon-1.8.0.tgz", - "integrity": "sha512-dw3vZwqjixmiur0vouRSOax7wPSu9Og2Hspy9JZFHf49bZRjwDiLF0Pfn2NXEkGviYJOJiGxS1ejoTiUwoSg4A==", "dev": true, "requires": { "is-node-process": "^1.0.1" @@ -37381,8 +39135,6 @@ }, "multicast-dns": { "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "requires": { "dns-packet": "^5.2.2", @@ -37390,44 +39142,30 @@ } }, "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "version": "0.0.8" }, "nanoid": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true }, "natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "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==", "dev": true }, "no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "requires": { "lower-case": "^2.0.2", @@ -37436,14 +39174,10 @@ }, "node-abort-controller": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, "node-dir": { "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", "dev": true, "requires": { "minimatch": "^3.0.2" @@ -37451,45 +39185,47 @@ }, "node-fetch": { "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "requires": { "whatwg-url": "^5.0.0" } }, "node-fetch-native": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.2.0.tgz", - "integrity": "sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==", + "version": "1.4.0", "dev": true }, "node-forge": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, "node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", "dev": true }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "dev": true + } + } + }, "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "version": "3.0.0" }, "npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" @@ -37497,8 +39233,6 @@ }, "npmlog": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dev": true, "requires": { "are-we-there-yet": "^2.0.0", @@ -37509,8 +39243,6 @@ }, "nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -37518,26 +39250,18 @@ }, "nwsapi": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz", - "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==", "dev": true }, "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==", "dev": true }, "object-inspect": { "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true }, "object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -37546,14 +39270,10 @@ }, "object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -37564,8 +39284,6 @@ }, "object.entries": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -37575,8 +39293,6 @@ }, "object.fromentries": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -37586,8 +39302,6 @@ }, "object.hasown": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "requires": { "define-properties": "^1.1.4", @@ -37596,8 +39310,6 @@ }, "object.values": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -37607,20 +39319,14 @@ }, "objectorarray": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", "dev": true }, "obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -37628,14 +39334,10 @@ }, "on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -37643,16 +39345,12 @@ }, "onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" } }, "open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "requires": { "define-lazy-prop": "^2.0.0", @@ -37662,14 +39360,10 @@ }, "opener": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { "@aashutoshrathi/word-wrap": "^1.2.3", @@ -37682,8 +39376,6 @@ }, "ora": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "requires": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -37698,16 +39390,12 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -37715,26 +39403,18 @@ }, "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==", "requires": { "color-name": "~1.1.4" } }, "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==" + "version": "1.1.4" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" }, "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==", "requires": { "has-flag": "^4.0.0" } @@ -37742,19 +39422,13 @@ } }, "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "version": "1.0.2" }, "outvariant": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", - "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==" + "version": "1.4.0" }, "p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -37762,8 +39436,6 @@ }, "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==", "dev": true, "requires": { "p-limit": "^2.2.0" @@ -37771,14 +39443,10 @@ }, "p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-retry": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "requires": { "@types/retry": "0.12.0", @@ -37787,20 +39455,14 @@ }, "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==", "dev": true }, "pako": { "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", "dev": true }, "param-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "requires": { "dot-case": "^3.0.4", @@ -37809,8 +39471,6 @@ }, "parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -37818,8 +39478,6 @@ }, "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==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -37830,8 +39488,6 @@ }, "parse5": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, "requires": { "entities": "^4.4.0" @@ -37839,22 +39495,16 @@ "dependencies": { "entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true } } }, "parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascal-case": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "requires": { "no-case": "^3.0.4", @@ -37863,62 +39513,56 @@ }, "path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "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==", "dev": true }, "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==", "dev": true }, "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 }, "path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-scurry": { + "version": "1.10.1", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.1", + "dev": true + } + } + }, "path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, "path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, "pathe": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", "dev": true }, "peek-stream": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -37928,43 +39572,29 @@ }, "pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "version": "2.3.1" }, "pidtree": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true }, "pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true }, "pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { "pinkie": "^2.0.0" @@ -37972,14 +39602,10 @@ }, "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 }, "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==", "dev": true, "requires": { "find-up": "^4.0.0" @@ -37987,17 +39613,13 @@ }, "polished": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", "dev": true, "requires": { "@babel/runtime": "^7.17.8" } }, "postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "version": "8.4.31", "dev": true, "requires": { "nanoid": "^3.3.6", @@ -38007,14 +39629,11 @@ }, "postcss-modules-extract-imports": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dev": true, "requires": { "icss-utils": "^5.0.0", @@ -38024,8 +39643,6 @@ }, "postcss-modules-scope": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" @@ -38033,8 +39650,6 @@ }, "postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { "icss-utils": "^5.0.0" @@ -38042,8 +39657,6 @@ }, "postcss-selector-parser": { "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -38052,26 +39665,18 @@ }, "postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "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 }, "prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, "pretty-error": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "requires": { "lodash": "^4.17.20", @@ -38080,8 +39685,6 @@ }, "pretty-format": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "requires": { "ansi-regex": "^5.0.1", @@ -38091,46 +39694,32 @@ "dependencies": { "ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true }, "react-is": { "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true } } }, "pretty-hrtime": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true }, "process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true }, "process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -38139,8 +39728,6 @@ }, "prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "requires": { "loose-envify": "^1.4.0", @@ -38150,8 +39737,6 @@ }, "proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { "forwarded": "0.2.0", @@ -38160,28 +39745,20 @@ "dependencies": { "ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true } } }, "proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, "psl": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -38190,8 +39767,6 @@ }, "pumpify": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { "duplexify": "^3.6.0", @@ -38201,8 +39776,6 @@ "dependencies": { "pump": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -38213,14 +39786,10 @@ }, "punycode": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "puppeteer-core": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", - "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", "dev": true, "requires": { "@types/mime-types": "^2.1.0", @@ -38237,14 +39806,10 @@ "dependencies": { "agent-base": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", "dev": true }, "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -38257,8 +39822,6 @@ }, "https-proxy-agent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "dev": true, "requires": { "agent-base": "5", @@ -38267,14 +39830,10 @@ }, "mime": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -38282,8 +39841,6 @@ }, "ws": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -38293,14 +39850,10 @@ }, "pure-rand": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", "dev": true }, "qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -38308,26 +39861,18 @@ }, "querystringify": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, "queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "ramda": { "version": "0.29.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", - "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", "dev": true }, "randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -38335,14 +39880,10 @@ }, "range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { "bytes": "3.1.2", @@ -38353,30 +39894,23 @@ "dependencies": { "bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true } } }, "react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { "loose-envify": "^1.1.0" } }, "react-colorful": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", - "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true + "dev": true, + "requires": {} }, "react-docgen": { "version": "5.4.3", - "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", - "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", "dev": true, "requires": { "@babel/core": "^7.7.5", @@ -38393,8 +39927,6 @@ "dependencies": { "strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { "min-indent": "^1.0.0" @@ -38404,14 +39936,11 @@ }, "react-docgen-typescript": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", - "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true + "dev": true, + "requires": {} }, "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==", "requires": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -38419,8 +39948,6 @@ }, "react-element-to-jsx-string": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", - "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", "dev": true, "requires": { "@base2/pretty-print-object": "1.0.1", @@ -38430,62 +39957,104 @@ "dependencies": { "is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, "react-is": { "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", "dev": true } } }, "react-ga4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-ga4/-/react-ga4-2.1.0.tgz", - "integrity": "sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ==" + "version": "2.1.0" }, "react-inspector": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", - "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", - "dev": true + "dev": true, + "requires": {} }, "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==", "dev": true }, "react-refresh": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", "dev": true }, + "react-remove-scroll": { + "version": "2.5.5", + "dev": true, + "requires": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + } + }, + "react-remove-scroll-bar": { + "version": "2.3.4", + "dev": true, + "requires": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + } + }, "react-router": { "version": "6.14.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz", - "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==", "requires": { "@remix-run/router": "1.7.1" } }, "react-router-dom": { "version": "6.14.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz", - "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==", "requires": { "@remix-run/router": "1.7.1", "react-router": "6.14.1" } }, + "react-style-singleton": { + "version": "2.2.1", + "dev": true, + "requires": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "dev": true + } + } + }, "readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -38494,16 +40063,12 @@ }, "readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } }, "recast": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.2.tgz", - "integrity": "sha512-Qv6cPfVZyMOtPszK6PgW70pUgm7gPlFitAPf0Q69rlOA0zLw2XdDcNmPbVGYicFGT9O8I7TZ/0ryJD+6COvIPw==", + "version": "0.23.4", "dev": true, "requires": { "assert": "^2.0.0", @@ -38515,8 +40080,6 @@ "dependencies": { "ast-types": { "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dev": true, "requires": { "tslib": "^2.0.1" @@ -38526,8 +40089,6 @@ }, "rechoir": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "requires": { "resolve": "^1.20.0" @@ -38535,14 +40096,10 @@ }, "regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -38550,14 +40107,10 @@ }, "regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", "dev": true, "requires": { "@babel/runtime": "^7.8.4" @@ -38565,8 +40118,6 @@ }, "regexp.prototype.flags": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -38576,8 +40127,6 @@ }, "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==", "dev": true, "requires": { "@babel/regjsgen": "^0.8.0", @@ -38590,8 +40139,6 @@ }, "regjsparser": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -38599,22 +40146,16 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } }, "relateurl": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true }, "remark-external-links": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", - "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", "dev": true, "requires": { "extend": "^3.0.0", @@ -38626,8 +40167,6 @@ }, "remark-slug": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", - "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", "dev": true, "requires": { "github-slugger": "^1.0.0", @@ -38637,14 +40176,10 @@ }, "remove-accents": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==", "dev": true }, "renderkid": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "requires": { "css-select": "^4.1.3", @@ -38655,32 +40190,22 @@ } }, "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "version": "2.1.1" }, "require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "requireindex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true }, "requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "requires": { "is-core-module": "^2.11.0", @@ -38690,8 +40215,6 @@ }, "resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { "resolve-from": "^5.0.0" @@ -38699,26 +40222,18 @@ }, "resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "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 }, "resolve.exports": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true }, "restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -38726,26 +40241,18 @@ }, "retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true }, "reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rfdc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -38753,8 +40260,6 @@ "dependencies": { "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -38768,14 +40273,10 @@ } }, "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "version": "2.4.1" }, "run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { "queue-microtask": "^1.2.2" @@ -38783,21 +40284,15 @@ }, "rxjs": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "requires": { "tslib": "^2.1.0" } }, "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==" + "version": "5.2.1" }, "safe-regex-test": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -38806,14 +40301,10 @@ } }, "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "version": "2.1.2" }, "saxes": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "requires": { "xmlchars": "^2.2.0" @@ -38821,16 +40312,12 @@ }, "scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { "loose-envify": "^1.1.0" } }, "schema-utils": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -38841,29 +40328,21 @@ }, "select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, "selfsigned": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dev": true, "requires": { "node-forge": "^1" } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", "dev": true }, "send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { "debug": "2.6.9", @@ -38883,8 +40362,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -38892,60 +40369,25 @@ "dependencies": { "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, "serialize-javascript": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, - "serve-favicon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", - "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", - "dev": true, - "requires": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - } - } - }, "serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -38959,8 +40401,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -38968,14 +40408,10 @@ }, "depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { "depd": "~1.1.2", @@ -38986,34 +40422,24 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true } } }, "serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { "encodeurl": "~1.0.2", @@ -39024,25 +40450,17 @@ }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + "version": "2.6.0" }, "setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { "kind-of": "^6.0.2" @@ -39050,14 +40468,10 @@ }, "shallowequal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "dev": true }, "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, "requires": { "shebang-regex": "^3.0.0" @@ -39065,62 +40479,14 @@ }, "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 }, "shell-quote": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - } - } - }, "side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -39129,31 +40495,37 @@ } }, "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "version": "3.0.7" }, "simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "version": "2.0.0", "dev": true, "requires": { - "semver": "~7.0.0" + "semver": "^7.5.3" }, "dependencies": { + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "version": "7.5.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", "dev": true } } }, "sirv": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dev": true, "requires": { "@polka/url": "^1.0.0-next.20", @@ -39163,20 +40535,14 @@ }, "sisteransi": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "slice-ansi": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "requires": { "ansi-styles": "^6.0.0", @@ -39185,22 +40551,16 @@ "dependencies": { "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 }, "is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true } } }, "sockjs": { "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { "faye-websocket": "^0.11.3", @@ -39210,26 +40570,18 @@ }, "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==", "dev": true }, "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "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==", "dev": true }, "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==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -39238,14 +40590,10 @@ }, "space-separated-tokens": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", "dev": true }, "spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -39254,14 +40602,10 @@ }, "spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -39269,15 +40613,11 @@ } }, "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", "dev": true }, "spdy": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -39289,8 +40629,6 @@ }, "spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { "debug": "^4.1.0", @@ -39303,14 +40641,10 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "stack-utils": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -39318,28 +40652,20 @@ "dependencies": { "escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true } } }, "stackframe": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "dev": true }, "statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "stop-iteration-iterator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, "requires": { "internal-slot": "^1.0.4" @@ -39347,48 +40673,34 @@ }, "store2": { "version": "2.14.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", - "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", "dev": true }, "storybook": { - "version": "7.0.26", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.0.26.tgz", - "integrity": "sha512-N6+/QBIahTnOJ3mQFNh+PIimjw+yUUoBlnMq8kE1Rg6QFi8ErEK8xte6uppiTh+7ShpqeLhp9ipuDV6DwJ9Aqg==", + "version": "7.4.6", "dev": true, "requires": { - "@storybook/cli": "7.0.26" + "@storybook/cli": "7.4.6" } }, "stream-shift": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "strict-event-emitter": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", - "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==" + "version": "0.4.6" }, "string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" } }, "string-argv": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true }, "string-length": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { "char-regex": "^1.0.2", @@ -39397,14 +40709,24 @@ }, "string-natural-compare": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", "dev": true }, "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0" + } + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -39413,15 +40735,12 @@ "dependencies": { "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 } } }, "string.prototype.matchall": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -39436,8 +40755,6 @@ }, "string.prototype.trim": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -39447,8 +40764,6 @@ }, "string.prototype.trimend": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -39458,8 +40773,6 @@ }, "string.prototype.trimstart": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -39469,40 +40782,36 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "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 }, "strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "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 }, "style-loader": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "dev": true + "dev": true, + "requires": {} }, "styled-components": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.0.2.tgz", - "integrity": "sha512-CRWTuYme0W4zVqzXpODByyocgVbBpRoXmaEgPGb67dvweV1igp7Ik4Z5C9e83wZ2l2hPg/XKV7cjuNxhRlC7Mg==", "dev": true, "requires": { "@babel/cli": "^7.21.0", @@ -39528,14 +40837,10 @@ }, "stylis": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==", "dev": true }, "superjson": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.13.1.tgz", - "integrity": "sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==", "dev": true, "requires": { "copy-anything": "^3.0.2" @@ -39543,8 +40848,6 @@ }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -39552,32 +40855,22 @@ }, "supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "symbol-tree": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, "synchronous-promise": { "version": "2.0.17", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", - "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", "dev": true }, "tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "version": "6.2.0", "dev": true, "requires": { "chownr": "^2.0.0", @@ -39590,22 +40883,16 @@ "dependencies": { "mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, "requires": { "chownr": "^1.1.1", @@ -39616,16 +40903,12 @@ "dependencies": { "chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true } } }, "tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { "bl": "^4.0.3", @@ -39636,9 +40919,7 @@ } }, "telejson": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.1.0.tgz", - "integrity": "sha512-jFJO4P5gPebZAERPkJsqMAQ0IMA1Hi0AoSfxpnUaV6j6R2SZqlpkbS20U6dEUtA3RUYt2Ak/mTlkQzHH9Rv/hA==", + "version": "7.2.0", "dev": true, "requires": { "memoizerific": "^1.11.3" @@ -39646,8 +40927,6 @@ }, "temp": { "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dev": true, "requires": { "rimraf": "~2.6.2" @@ -39655,8 +40934,6 @@ "dependencies": { "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -39669,8 +40946,6 @@ }, "rimraf": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -39680,14 +40955,10 @@ }, "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==", "dev": true }, "tempy": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "dev": true, "requires": { "del": "^6.0.0", @@ -39699,8 +40970,6 @@ "dependencies": { "del": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dev": true, "requires": { "globby": "^11.0.1", @@ -39715,8 +40984,6 @@ }, "p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" @@ -39724,16 +40991,12 @@ }, "type-fest": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true } } }, "terser": { "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -39744,8 +41007,6 @@ }, "terser-webpack-plugin": { "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.17", @@ -39757,8 +41018,6 @@ "dependencies": { "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -39769,20 +41028,15 @@ }, "ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "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==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -39794,8 +41048,6 @@ }, "test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", @@ -39805,8 +41057,6 @@ "dependencies": { "glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -39821,19 +41071,13 @@ }, "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 }, "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "version": "2.3.8" }, "through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -39842,8 +41086,6 @@ "dependencies": { "readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -39857,14 +41099,10 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -39874,54 +41112,46 @@ }, "thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tiny-invariant": { + "version": "1.3.1", "dev": true }, "tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" } }, "tmpl": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "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==", "dev": true }, "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==", "requires": { "is-number": "^7.0.0" } }, + "tocbot": { + "version": "4.21.2", + "dev": true + }, "toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "totalist": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true }, "tough-cookie": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "requires": { "psl": "^1.1.33", @@ -39932,27 +41162,19 @@ "dependencies": { "universalify": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true } } }, "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "version": "0.0.3" }, "ts-dedent": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", "dev": true }, "tsconfig-paths": { "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -39963,8 +41185,6 @@ "dependencies": { "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, "requires": { "minimist": "^1.2.0" @@ -39974,8 +41194,6 @@ }, "tsconfig-paths-webpack-plugin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.1.tgz", - "integrity": "sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -39985,8 +41203,6 @@ "dependencies": { "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, "requires": { "color-convert": "^2.0.1" @@ -39994,8 +41210,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -40004,8 +41218,6 @@ }, "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, "requires": { "color-name": "~1.1.4" @@ -40013,20 +41225,14 @@ }, "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 }, "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 }, "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, "requires": { "has-flag": "^4.0.0" @@ -40034,8 +41240,6 @@ }, "tsconfig-paths": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "requires": { "json5": "^2.2.2", @@ -40046,14 +41250,10 @@ } }, "tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + "version": "2.6.0" }, "tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -40061,16 +41261,12 @@ "dependencies": { "tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "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, "requires": { "prelude-ls": "^1.2.1" @@ -40078,20 +41274,14 @@ }, "type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "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 }, "type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", @@ -40100,8 +41290,6 @@ }, "typed-array-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -40111,27 +41299,19 @@ }, "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "typescript": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true + "devOptional": true }, "uglify-js": { "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, "optional": true }, "unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -40140,22 +41320,12 @@ "which-boxed-primitive": "^1.0.2" } }, - "unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, "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==", "dev": true }, "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==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -40164,20 +41334,14 @@ }, "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==", "dev": true }, "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==", "dev": true }, "unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "requires": { "crypto-random-string": "^2.0.0" @@ -40185,14 +41349,10 @@ }, "unist-util-is": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true }, "unist-util-visit": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -40202,8 +41362,6 @@ }, "unist-util-visit-parents": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -40212,38 +41370,34 @@ }, "universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, "unplugin": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-0.10.2.tgz", - "integrity": "sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA==", + "version": "1.5.0", "dev": true, "requires": { - "acorn": "^8.8.0", + "acorn": "^8.10.0", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.4.5" + "webpack-virtual-modules": "^0.5.0" + }, + "dependencies": { + "webpack-virtual-modules": { + "version": "0.5.0", + "dev": true + } } }, "untildify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", "dev": true, "requires": { "escalade": "^3.1.1", @@ -40251,14 +41405,10 @@ } }, "upload-images-converter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upload-images-converter/-/upload-images-converter-2.0.2.tgz", - "integrity": "sha512-cltVwZ+RU70Qx8heZrSj8OpQhR9mFHZ6CXudosKkFlM91Iiznl8Oluw/x+9DTnSKkvipvkf1oCvyVw5UPIpZ1Q==" + "version": "2.0.2" }, "uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -40266,32 +41416,40 @@ }, "url-parse": { "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, + "use-callback-ref": { + "version": "1.3.0", + "dev": true, + "requires": { + "tslib": "^2.0.0" + } + }, "use-resize-observer": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", - "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", "dev": true, "requires": { "@juggle/resize-observer": "^3.3.1" } }, + "use-sidecar": { + "version": "1.1.2", + "dev": true, + "requires": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + } + }, "use-sync-external-store": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + "requires": {} }, "util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -40301,32 +41459,22 @@ } }, "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "version": "1.0.2" }, "utila": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, "utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, "uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-to-istanbul": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", @@ -40336,8 +41484,6 @@ }, "validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -40346,14 +41492,20 @@ }, "vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, + "votogether-design-system": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/votogether-design-system/-/votogether-design-system-0.0.14.tgz", + "integrity": "sha512-HQ/jHkSRpmwh09d7FPcJOcfNfQZziRxFbTvZk0F0PbSWRhTJ0K1YZboi0wufUrmA4m6BcRwZ7zZOupoM1VzNIg==", + "dev": true, + "requires": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "w3c-xmlserializer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "requires": { "xml-name-validator": "^4.0.0" @@ -40361,8 +41513,6 @@ }, "walker": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "requires": { "makeerror": "1.0.12" @@ -40370,8 +41520,6 @@ }, "watchpack": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -40380,8 +41528,6 @@ }, "wbuf": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { "minimalistic-assert": "^1.0.0" @@ -40389,30 +41535,22 @@ }, "wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "requires": { "defaults": "^1.0.3" } }, "web-encoding": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", "requires": { "@zxing/text-encoding": "0.9.0", "util": "^0.12.3" } }, "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "version": "3.0.1" }, "webpack": { "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -40443,8 +41581,6 @@ "dependencies": { "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -40455,20 +41591,15 @@ }, "ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "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==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -40480,8 +41611,6 @@ }, "webpack-bundle-analyzer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", - "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", "dev": true, "requires": { "@discoveryjs/json-ext": "0.5.7", @@ -40505,40 +41634,29 @@ "dependencies": { "acorn-walk": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, "ws": { "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} } } }, "webpack-cli": { "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", @@ -40558,16 +41676,12 @@ "dependencies": { "commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true } } }, "webpack-dev-middleware": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -40579,8 +41693,6 @@ }, "webpack-dev-server": { "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, "requires": { "@types/bonjour": "^3.5.9", @@ -40617,8 +41729,6 @@ }, "webpack-hot-middleware": { "version": "2.25.4", - "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz", - "integrity": "sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==", "dev": true, "requires": { "ansi-html-community": "0.0.8", @@ -40628,8 +41738,6 @@ }, "webpack-merge": { "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -40638,20 +41746,14 @@ }, "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==", "dev": true }, "webpack-virtual-modules": { "version": "0.4.6", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", - "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, "websocket-driver": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { "http-parser-js": ">=0.5.1", @@ -40661,14 +41763,10 @@ }, "websocket-extensions": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-encoding": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, "requires": { "iconv-lite": "0.6.3" @@ -40676,8 +41774,6 @@ "dependencies": { "iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -40687,20 +41783,14 @@ }, "whatwg-fetch": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", "dev": true }, "whatwg-mimetype": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true }, "whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -40708,8 +41798,6 @@ }, "which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -40717,8 +41805,6 @@ }, "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==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -40730,8 +41816,6 @@ }, "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, "requires": { "is-map": "^2.0.1", @@ -40742,8 +41826,6 @@ }, "which-typed-array": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -40755,8 +41837,6 @@ }, "wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -40764,20 +41844,14 @@ }, "wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, "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==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -40786,78 +41860,93 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, "requires": { "color-name": "~1.1.4" } }, "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 } } }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "write-file-atomic": { + "version": "2.4.3", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true }, "xmlchars": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, "xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "version": "5.0.8" }, "yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -40871,14 +41960,10 @@ }, "yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, "yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "requires": { "buffer-crc32": "~0.2.3", @@ -40887,8 +41972,6 @@ }, "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 } } diff --git a/frontend/package.json b/frontend/package.json index bca9a03be..cddbaef05 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -76,6 +76,7 @@ "styled-components": "^6.0.2", "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "^5.1.6", + "votogether-design-system": "^0.0.14", "webpack": "^5.88.1", "webpack-bundle-analyzer": "^4.9.1", "webpack-cli": "^5.1.4", diff --git a/frontend/public/icons/og-image.png b/frontend/public/icons/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..5a13e741514dade427f5309746182b1f53d626db GIT binary patch literal 11359 zcmeHt_g|8G{5ERC9AV2X#?j2mk$Z(`b~KMO8;){!GWW^_0#=TOO2Gbf3E9#&xfwgcG41x5&!@| z+Wz7NHvmBF`0gRTPk4qDwePm@?LgE;&sYFJ^2qKX0w{PPFFYv{>t=TzQ2kYTQTSm` zkhPOF08odP-0|NF0G!#hzhHeOQG`D2@}}`RLUpxK_qz*t@Xnxx%x_nu;)XA%n7&cC{e3dO{6#r-GGbsse(*8Vmt|6j8j9@bwo_ zaR9*879auud=@_r09YxA>;V8Y)l!7F{resn0N}4ofG7a)=OHWM#ri)l{%MV$*!anm zpHlEs7=OBn|CQ6+DA?B(!J}h26|6|q7LLV6u03WED=M09L|SA5f#Wr~-?xxv7~g6# z)MO?oW8{zi7#KHEu!!V!D+FBaza} zd)<384Ba;m4=It;h;$+QbBu7jtfD7zn%9shVk9MdLu|GGL<(SeY$5I(5zo42b*;Te*bQ=lX!Hs@U>AzG+YH#F@u;;JLbQ z`}U+D^d)7xoWqySt$%T?JER(Fy>8}ZQNcCs20Mehl+V|izS{VDtNRhPU@WZRO2x33 zxW2Zuwi2$z?d~>sEMZDf`-5xM_iBX5R+%tRiw_B($RK7i>$iU7Mjck7)D;CHviHtz zZ$$AOFcST*?B=#C)AAP)E|$JE>X9_$J(Kzo@6eS3Z zudXlg0W9Z$WKv!dH$7gRx)W*XMVy2w)kUaDHJW#-;9jmQJb#czjgGG{4Wr4x-R2;w zO|(Df!QO>nclM6-Ed#&lqzOroOasECcd_Kb`@7Gfl>FTt#vhNfpUG<{@lj7>mUOO78hS4CU$qb1?Cb8k4jpVG=~ z(Q%b$J$`&xr};~Z(T4$8_TZT#lFYt3z;fZPVa!7vGi*8LuYyORnRcN;=z&vSB&iZ} z?}e}uY}|t@oj+P4+OYMCITJ@lKFCzr>wY{eI(lo%T|PZ7|JZECY(QbjEq0}@$hSNj zppYIft3oV8Ju+r82b#c}7dB^|@!r_Zf-gv;m(B@I=Fv>5;f>R5 zP($MKP3#T1_p->oIOvDg&XE8cg2mH6glpu0LZ_BeJ>I6&$kIxYB*Vcy6 z$UDTFvc@Q_dtFIY$XwWt}I7Nk1gJK1ljQltlJ%F|cc5ynL(p}R$ z-xFffU^z}Mc2dUR!JSPG6Z@NyY`<8DPUmWxZUY;`K+w28+%?s?ge*29_Mb(W213)_ zoT)>GQJfXmr- zsZk}{Q(H#4(Y}bpYn!Z3Jnj0D!2azp_gnvnCdSEF0a#iG%R{J*(t28%>_X5}L&IQ| z;b)3Vybc5e4LS?^W4rhT2pZfBzYX}*vxM-PIZ@4@=^f8!!@|;UXbTlaWI|4e?!NWa z*PdB8|0dptkZ*O_0eiCeQ-NJT;#1n*1>jJq)!#x8pR$BvEF~3B;z zE&YbLFJSrpF6x3BLH?(SS%!|ZEzT9-+H+bTm59Uj7Ls>(3)=y>a?; zteH20k@$9yI!xORwc=mOzVl@sd>QiBxeLB8&T^&=kF8!Rnmr?twjDij)u&Y@1+nY5 zmcmRgF{Z`SChE3!27iR!-RY-=3$%@Tpi`c4nD+N%>pYKl9CI|<$X1kcFUWP6;W zbI`t$HeU%o=o|fqXg7#Xbv#8^H*qmPR8c5knGmKq6ysmq7-b=ahw(Y}%12<@eNUI} zmax5~AYC^U-^GzPens%mLlyN06zbg7zrY%iprV@fL2W?1y--iy1_oM;!S0lP+-W%l zI(zG02q}G=@p|J&uK+P0Sj3W8;DtHBDnE?k^ip3S*q5Hn94!%BelFZf_u#aR6V*~k zSS8Kp1q;8I#M^$k*xNo)8nraePK#CwH0wQg!)de|pBzzwp(9+>zLWNBXEIs_Z|?LIJpbogHPYapd1RRP>u1t%D&9|&Rt4S`K9@k3l zc;VTQu8f2+>~@f)G6?#Bd~sHIU7k7+uUNb&BC<;czw$YmS4_l<#bAAUghg6T++OAg zx4AqP`pMD5EaluyR>kBt%#>I;dno-$)vw>zQVe%OVyABAEB?3TQ~Iw7(zL*CyfMCH z4SB4H9K%bh6kEi-Te-e}{WrP4uzFe=Eq?^HKf)*mx6L}C?A|>V@$(hJ_NCVc*LUAP zoWD;~({fErjtEz|H|EP`TE(b*M8K^(g<2Fo18v}|Ri7NT8M;m}Y)^WL-tr_;Pp4)c z^6L%r-;D}(_rN{yT6vR7w&8W9`7M1ZcQ3-_sm)*J7ZYP$y1!Hccwhs+fooQH^2vj5 zy&iwQULdVieULmn+OAeBQtKeJU{TLK+S$GIN&x1&PtGAfXNYK|eLJ~)|9r5nRX(15 zzJ1%W|J4NYXc@XKSFcj58WAH-y}f4eALi;;^Y|USus4@r*y`eF*vb%i{O(laY0l)M z?=EI3%8x0R!yR;*eC52u!s~zGM2)%CxQO}TcORa(a}{MwxtgDA+zIV;y!(A?1xAuw zR7|Mazuq7@xUq@FjtJD8mCiltcd02g`YUxNXRAWl?VG4y@h;;fXox#?vU8@(nm`+K z6TOGq;&_0dgEsFk>2c)i-%HxH^U38xPi+_y3*pJ4wg1g>Wyk=qW)*00Jzh z|7&iK;l_&Vir=Th9uUA%fr=O~Mg}r|_l5-6r5ynArFx`T&ZN#>E)3v!>_0qiZbnzd zQpVCI8-%_?2)3F4gk7Gj(v5^rYN&4|Mx?F;Y2JsunAdvc0a8}pC$R)_!N=uhrNjHw zMh9auyG1X##`Hw=(ewSc-dq#&L;q_!DXgOOvT6TSNdst_&s|fc(Kc7|+bHf?&nK&o zg|yw|xWw|%lbP4CPw)2x%U`|0Ep;lg(|l-jypW-se*3>9#OGzY-1ooNDYUf!Dd^{n zrY6rb^D;1TeiD)G2E3?ah1w`2Px(|&il*YJMK5Ij&StozEd&_^FkNLOM=1fB<#;)p zT0p$RZs_I|ZYOWssNiEb)8|>!3-&KwYm-BfukIff!;NTJ;i)KxLb<=t-x^Xmc~0U= zjMzW6UoA|@Xr&+y3)NSvI-%~B;*+?~#5H8)6U*!aHifxouQDp-ZpvEy?H;gqbLFfj zCRxhtI)m4MFrycjQ@!EVbCF|!i8H(0jaf^)aXX6lSTL_ENV2U=>~t7e`ys@EUm{Ub zh6Q>Oc>EErLIYx&bgl9Pp}WDjN=(F$ylchJ(rfkUNr^tgEWInim8U_E8`_nv)}K@; z%Y)ofipGyD;;_9km5T`KskBJXL%h?SE{(@U4|G``5c>bPe5QEA+5XG<^i$QDAf|nK9`vnF?j)N{_kU4*O>|oQ7^hNdg*aeS zpFP6v_52{qQw6|xv%pc$BQU~kH1kOP^Ae4$^`U%0#^RMg;`CJD+LOhEAS(QNN8VJs z-s_q0U|i@C>*z?!IbOatJ=#r+J-03O>g4{3uQmENoLrC?rlvD4zl1vck-0>7NDu z8_4z9QX1r>pbXn$c=_5ywUo-gM1T3Y-p{)XkE(*SA1wFmA}pql9PJ?N6`9aA5^lqo zSf3Yg=)gSsYC6x zoqhiBRi}K@w6p;uN|N(GbEh50mE_J$O}Vt~`@bRZ?MPYGu<#@2Zw)M;(77@Zp(rrh z(;b@?6=QVG1KR#P{Ne*iHBfKVn|RRi7~XGERu1QoFB0|?9CBRW#LaFbI(FcdyZ)1w z@)*iFl<~Cj;^ar0=Jhp)rSJ*EmFtB%>n7=DjkV(6H20xPG}2$ieI&GeeMMF4OW#t- z{gm*48!jpZXx|0Xgl8b^z5bSGO1`6gq0&mUHO@x<;4$_mj6zZ(AqV~3h`({CbMj~SDhxN&Wa4+-$FqjbV0#Y8Ty=c)r z`EE`T)E~|s{fc#|L_D)b#Z#u-{2fv`zzKmyw5y?0D za^Oii+E$vWfaP3auI&EUgZzi$M26>DQsv$Q23LDzV&nPB>cd2EA)dIsw2TItF*Cd2 z=a^peu@N7}wzOC?-EhoNbB*zc5TUI7D~!LpiM{Wpj(VUmhcfK*J=`FDu;pbUg;Va6 zW)zm1VsOS0`s!>QE7=itA@}HS#^lnpL4#ICv~Kjoq?WocMBa7rqcO9(yiiOJ<>e1r ze8buKw~h4CX8(M`fIV>J*{4ANL@6kRcS|rrJ0bfVpMEQCFgmzk*3>&P*)mn;SkUSt zruP5I{rj_)DsGJHDa14oZ07x4T2Ib4;qTihbDq6!&w6|Uln{)@;fPNUv3zYVi`$0g zOHi}>@aaC^iBA;#_xwvn_xlqMphjP6G>UuJ4h#PID<&1&x9MTV@9OBouJ2^eU+kzk zm&I5%FN8ZVL7|$#!mp}LrK&PYE22~-21QuAY5v>E)89&mK%pw@u2mk751}Wuj>^OA z2wjKZ$A=-^u8i4Q zd`)xUxGJ^4sg9%}DO*hnybCi$9x)zfLtfnbbveuIx^mrgYAJ=WziUO<%(P%aeFPlV zOW*Bh6q=EG1AVou;);@9p_j?N{Cb}UvWkql+YqL{GBF8lQ>0zdn6&k&1X&EiO7Sd_{Ha)aVGV+=I0cwc{kOFmC@%Z|PRI3!k#q`+GmhnN z$s>0ts;a7a9g9wp#0~+UjYUOc>ms4#W-N~$U%W9rUPfavhVf>dm$571Wa==ahucP1 z-e$KuU>PSN8X$|6$QC;JjPFVQEtmCnbm&w(Igbwkv_vOvE({F=ilP~beHO$ZD0h;{ z3$omJ&U)yQ9MBdSnT(`eCwr0Ewp0u9_SXSRVKtjmQl6?1DT<| zTw=cjnAg^7&6|6yTjbr$-JuFg+|0Kw(~}qZ3wBUg2isGPJ8U*1ym{3ct~z_VW&{m) zQ{C#?PZT~OlY$-JD&ir?mQNYl{99|v35#T2pelD_66Jo2!`tL>#Zt6|krZ*;mkm#8 zQAZJQ7ehlXTSqm}HC?mVH|avo@o;-N9>B zHOZz^SF(8Q4l0B;SeaaPZqGZxRYW{Fki6y2@5GSZp+P`NJwqms!(5N5MWc2og$x3e zL0zCOQRV+B%XkW^?Zx1yjOHs)1co-M{N(mm7gD&*e49h@cZMPsx0TR3Y9Y3&B@FVM zVS(^HPpVCbv5ejc%guc;mG%#2OHCZ%I0IwnKr00d7;$kV1G+O?PuonV-QHw}P7xkt z%?2(PX53;HJszqb!r7kl1%m2=UI}Eki#Q1?n%!d!7NT6>Kk|qHBVWEMYVQTBu{vH@Tg^ZIudiibhO4&ooqmXPsfy^J^Q^2`HkEy6GK}Z52~NU0}_Q| zC*FIua_BZ)`qLpR7{$7nE^=JUhEg(dh3meJ#m{WNmz}!LIGu^QHr1qY z5g1#4U>~69cTsVx!}os`JdOu~5Z8-NgrIRDK3_l2C49O}nXv;#*BAZi9wISKf+=t? z91b1$^VTuzLdp#4pL?)S*;j+Ijt00b_dfJwsS3^ z>Wt`W_&3#P6y80NQRd`v#Q+ZU0}Tw z?BZ|nRSvGRF0tqhl*YUcBy2HA?T5~DlIEi7k}(dylBX-yYWRV@^$sga`L?5yn*?rwe{oB{GV6!`mc_5SS7{&u`J9*0+e(c5_y z8r2PF^kr`Vx@`WN2NE*&XS@GryZ>jq|9{o)|2a_ibG-29{N(??)1*5_lu`sedH(+2 R!ogaA{jbg!s?Yn~`yWPAW~u-H literal 0 HcmV?d00001 diff --git a/frontend/public/index.html b/frontend/public/index.html index d1d17ac3e..52646e723 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -35,7 +35,9 @@ - + + + ( - - - - }> - - - - + + + + + + }> + + + + + + diff --git a/frontend/src/api/alarm.ts b/frontend/src/api/alarm.ts new file mode 100644 index 000000000..59a66ba07 --- /dev/null +++ b/frontend/src/api/alarm.ts @@ -0,0 +1,94 @@ +import { AlarmType } from '@type/alarm'; +import { ReportMessage, ReportType } from '@type/report'; +import { StringDate } from '@type/time'; + +import { getFetch, patchFetch } from '@utils/fetch'; + +const BASE_URL = process.env.VOTOGETHER_BASE_URL; + +export interface ContentAlarmList { + pageNumber: number; + alarmList: ContentAlarm[]; +} + +interface ContentAlarm { + alarmId: number; + createdAt: StringDate; + isChecked: boolean; + detail: { + postId: number; + postTitle: string; + commentWriter: string; // 게시글에 관한 알림일때는 ""으로 옴 + }; +} + +export const getContentAlarmList = async (page: number): Promise => { + const alarmList = await getFetch(`${BASE_URL}/alarms/content?page=${page}`); + + return { + pageNumber: page, + alarmList, + }; +}; + +export interface ReportAlarmList { + pageNumber: number; + alarmList: ReportAlarm[]; +} + +interface ReportAlarm { + alarmId: number; + isChecked: boolean; + detail: ReportApproveResult; +} + +interface ReportAlarmResponse { + alarmId: number; + isChecked: boolean; + detail: ReportApproveResultResponse; +} + +export interface ReportApproveResult { + reportId: number; + type: ReportType; + reasonList: ReportMessage[]; + content: string; + createdAt: StringDate; +} + +export interface ReportApproveResultResponse { + reportActionId: number; + type: ReportType; + reasons: ReportMessage[]; + content: string; + createdAt: StringDate; +} + +const transformReportApproveResultResponse = (reportApproveResult: ReportApproveResultResponse) => { + const { reportActionId: reportId, type, reasons, content, createdAt } = reportApproveResult; + return { reportId, type, reasonList: reasons, content, createdAt }; +}; + +export const getReportAlarmList = async (page: number): Promise => { + const alarmList = await getFetch(`${BASE_URL}/alarms/report?page=${page}`); + + return { + pageNumber: page, + alarmList: alarmList.map(alarm => ({ + ...alarm, + detail: transformReportApproveResultResponse(alarm.detail), + })), + }; +}; + +export const getReportApproveResult = async (reportId: number): Promise => { + const reportApproveResult = await getFetch( + `${BASE_URL}/alarms/report/${reportId}` + ); + + return transformReportApproveResultResponse(reportApproveResult); +}; + +export const readAlarm = async (alarmId: number, type: AlarmType) => { + await patchFetch(`${BASE_URL}/alarms/${alarmId}?type=${type}`); +}; diff --git a/frontend/src/api/notice.ts b/frontend/src/api/notice.ts new file mode 100644 index 000000000..0281fe1ba --- /dev/null +++ b/frontend/src/api/notice.ts @@ -0,0 +1,74 @@ +import { + Notice, + NoticeListType, + NoticeListResponse, + NoticeRequest, + NoticeResponse, +} from '@type/notice'; +import { StringDateUpToDay } from '@type/time'; + +import { deleteFetch, getFetch, postFetch, putFetch } from '@utils/fetch'; + +export const transformNotice = ({ + id, + title, + content, + createdAt, + deadline, + bannerTitle, + bannerSubtitle, +}: NoticeResponse): Notice => { + return { + id, + title, + content, + createdAt: createdAt.split(' ')[0] as StringDateUpToDay, + deadline, + bannerTitle, + bannerSubtitle, + }; +}; + +const BASE_URL = process.env.VOTOGETHER_BASE_URL ?? ''; + +export const createNotice = async (notice: NoticeRequest) => { + await postFetch(`${BASE_URL}/notices`, notice); +}; + +export const getBannerNotice = async () => { + const bannerNotice = await getFetch(`${BASE_URL}/notices/progress`); + + if (bannerNotice.id === null) return null; + + return transformNotice(bannerNotice); +}; + +export const getNoticeList = async (page: number): Promise => { + const noticeListInfo = await getFetch(`${BASE_URL}/notices?page=${page}`); + + return { + totalPageNumber: noticeListInfo.totalPageNumber, + currentPageNumber: noticeListInfo.currentPageNumber, + noticeList: noticeListInfo.notices.map(notice => transformNotice(notice)), + }; +}; + +export const getNoticeDetail = async (noticeId: number) => { + const noticeDetail = await getFetch(`${BASE_URL}/notices/${noticeId}`); + + return transformNotice(noticeDetail); +}; + +export const modifyNotice = async ({ + noticeId, + notice, +}: { + noticeId: number; + notice: NoticeRequest; +}) => { + return await putFetch(`${BASE_URL}/notices/${noticeId}`, notice); +}; + +export const deleteNotice = async (noticeId: number) => { + return await deleteFetch(`${BASE_URL}/notices/${noticeId}`); +}; diff --git a/frontend/src/api/report.ts b/frontend/src/api/report.ts index bfb0353fc..42f9c5d03 100644 --- a/frontend/src/api/report.ts +++ b/frontend/src/api/report.ts @@ -1,9 +1,51 @@ -import { ReportRequest } from '@type/report'; +import { PendingReportActionList, ReportActionRequest, ReportRequest } from '@type/report'; +import { StringDate } from '@type/time'; -import { postFetch } from '@utils/fetch'; +import { REPORT_MESSAGE } from '@constants/policyMessage'; +import { REPORT_TYPE } from '@constants/report'; + +import { getFetch, postFetch } from '@utils/fetch'; + +export interface PendingReportActionResponse { + id: number; + type: keyof typeof REPORT_TYPE; + reasons: (keyof typeof REPORT_MESSAGE)[]; + createdAt: StringDate; + target: string; +} + +export interface PendingReportActionListResponse { + totalPageNumber: number; + currentPageNumber: number; + reports: PendingReportActionResponse[]; +} const BASE_URL = process.env.VOTOGETHER_BASE_URL; export const reportContent = async (reportData: ReportRequest) => { return await postFetch(`${BASE_URL}/report`, reportData); }; + +export const getPendingReportActionList = async ( + page: number +): Promise => { + const pendingReportActionList = await getFetch( + `${BASE_URL}/reports/admin?page=${page}` + ); + const { reports, ...rest } = pendingReportActionList; + const reportList = reports.map(report => { + const { type, reasons, ...rest } = report; + const transformedReasonList = reasons.map(reason => REPORT_MESSAGE[reason]); + return { + ...rest, + typeName: REPORT_TYPE[report.type], + reason: transformedReasonList.join(', '), + }; + }); + + return { ...rest, reportList }; +}; + +export const reportAction = async (reportActionData: ReportActionRequest) => { + return await postFetch(`${BASE_URL}/reports/action/admin`, reportActionData); +}; diff --git a/frontend/src/api/userInfo.ts b/frontend/src/api/userInfo.ts index 248f28aba..7362c8e08 100644 --- a/frontend/src/api/userInfo.ts +++ b/frontend/src/api/userInfo.ts @@ -8,6 +8,8 @@ export interface UserInfoResponse { birthYear: number; postCount: number; voteCount: number; + hasLatestAlarm: boolean; + role: 'ADMIN' | 'USER'; } export interface ModifyNicknameRequest { @@ -20,7 +22,7 @@ export interface UpdateUserInfoRequest { } export const transformUserInfoResponse = (userInfo: UserInfoResponse): User => { - const { nickname, gender, birthYear, postCount, voteCount } = userInfo; + const { nickname, gender, birthYear, postCount, voteCount, hasLatestAlarm, role } = userInfo; return { nickname, @@ -28,6 +30,8 @@ export const transformUserInfoResponse = (userInfo: UserInfoResponse): User => { birthYear, postCount, voteCount, + hasLatestAlarm, + role, }; }; @@ -53,6 +57,10 @@ export const updateUserInfo = async (userInfo: UpdateUserInfoRequest) => { await patchFetch(`${BASE_URL}/members/me/detail`, userInfo); }; +export const readLatestAlarm = async () => { + await patchFetch(`${BASE_URL}/members/me/check-alarm`); +}; + export const logoutUser = async () => { await fetch('/auth/logout', { method: 'DELETE', credentials: 'include' }); }; diff --git a/frontend/src/assets/bell.png b/frontend/src/assets/bell.png new file mode 100644 index 0000000000000000000000000000000000000000..3295b49c33213bb20ef1ce513960595eaf0f22a7 GIT binary patch literal 12738 zcmb_@cT|&0^x&5S5)lX}C^Zxf(wh`9Ql%yI7Me5*N(ZGX2#NRvMOpw0AR+|m9Yg^k zD#}w7CDIj%AWBgPN{O`WiA!AJuZh?}IpW==<)u&I@&WAy zVHZLIu5djwcFhVfb}@UVtu&9ZsVJTOH!gZ`;E7hhUNY{xUWUg_85}}k7sbTo%I*>> z?6qxB0Pc&CuBz?F33=jBbL`N1^Ki2lZ~W6Av1^sitA*agj#pWOF%k$Ad=q{Q`h@sM z@}O;{EFc+5i~|flhLxX(nLB}^-T9g}K)XxZOMjM-)sBplZV3GNOpZWj9D;|#!_F|1 zcdCM5Ohv!aLz7prg!#!LT6o2GTK9!_2p@r)I%{EAf|GqOjJNU!qx;llY4^4V>sSKC z^|U05Z&jM*R-;T-&5w(uVCNbSLB8c<$?V_l`$ubb+7!T~HO*7#oxX(&erJCzIZ?3N zFRfDzSnBmT%g>Do6md{QL? zM0W)eDD8_jQvz$%Rost58nA@c(Yq|fcK-a+)u+(}Vu2vW*l98&1O4HJGBX1rP?Tc# zEqDKpAL?&?8c)c}7sVJO#87LuE*f=Fzd>*#~$;=`IIgh2VE!7Q1~|2p~f6T%$<*;9gh19 zO}3srz2E+%4(6bG2q9h4Wl3OPjmmd&l77V1U%rD`^``CNe=488*w-Wdd9!je_!7J7 zix=b6{N$l96gqg;fbeo$>~Z$@m|<&jtnTlA?JA+`MvvD!Y!#C_pd$mHV;V){Ob;&E zD1BI@>7R-jUkYSw2WppTLw)n&5b>-4eQ0CPr&p6Y%pGcp{+`D@5AhuH+vs&v2dU zzS*~sNyD{vo#yXD8kcTpFMoRV+jDnk-Iq4ync!pjPj{71Zv4Pawp=@lD0cj57rk(O zlna0Gj%l;orhtItjbm7{i);jVNIdOxh!?B`h0=66@h%(k`fUALP}4#(Du*BBF_;hU?@S) zCUO{Vhb$7tPz8dgmB>yKZx0w0%EtyHjF3f=7^-y$l&{IdQk&E4DvL9Tf(QrWr2?O_ z_rAsIz&=@^=5|YvHqv4DOFJXIHovaP=7q6mA;h?-9{;EU4lnXJxqcEwb~8^AeXhbd zKOl=uKT|&onU0FH_GqZ$@Snz@!39yq#DJ_tgEzo!S^$LzVNT)Wp-I>w3sj&MK(2qg z<+tnW?`Ehh?Ur=1BA6PXz^t4V3_Xi*$b3o)hfNQdSbVD`IX!u3iK?J!(k3la0+c04 z^Y37G2PTG{+9^o}c<+&0OG`$OdK!AbLKhm!w`(8iR&{ImB8@Soe~?N=J7jAz(pW9@ zH)D{?IY}0>Avh{)_q#N-OkhB)IjZ7=3j-DB?Nk;5RsA{1I65G!6l2R_w<9e^XITPf zB&#Y)-8~AqOp7u?2V{eo9kUR{g8pcUX-6ATWWyI!MxmRFiYK$|HwSVy-M2thygo)2F;8)bwdGdB?r7#m69a=&+uoV^ z#nVmie&OHBW`&kaZn)8ZkHkX@F8XTXZ}kEXsb4CnD3zj>qcYB@;EbQ`<0O@88=!FhU%G1rv4L;eKjNPlg#?J#Y5CUau#g7d&B?-qolZwnKmUmhYdx zH)Bq&nh2r84qrN5-|XW)@0RQ%1eG1+-t^ z8w+dCXYto3X$xPT)twj%hgw7f0C1CZ4XV zmO5Zt8Z`7s-a9W*e))dhP?D;wciMU3q66;tqRH0R*){W37g^to(`Uo4Pi8Gt{X>ha zmZ%yQl~3=RqbjGB8p#K@v?KM3qRw5D3N@v}Z3pfigPX_E|L9VS(DI4NwbeUy&(A9jO_QY=e=jd&w_j<2pB<6TSTh^% za9K?v>e&TV@&_!bCb1p9>g5HX=Mv9{PdB@|-OgT=oNc;H+Dv7u%vT&#mXvS(AdotV zU#L)1zu71|=W1BKQJc7+PoMJjUgaBqQn(sQ-6pSyS_*ZOhaHVd3V!I7BiMZU##`t7 z@;r=?F~tQwwp*+bM|t8=d{ByNzz-rr1Rm_BXD26m(02NZ@fPdE%*b(iW$Ef%k-%P~ zo#?@8CCP)Wv?QT!M_2C=xCB_oJ&Mq~&1!5LcZ;PIt&NtAwP-SwdonK%MGFLOBd)vc z={6Z|B*z9m%Sk8Kf6d!=-Ck8@C`R?3Ven1$KAp#vy)kjRtNZZsLZ>>`K$3k^Wx7WD73mJVO4v#2fWcQui z|LX+vM{rA$Tr-AbohlvN=lNujDv`G9>76z2;7IqfgVdjwud&kW-fZk^a4kESd*5xU zK2e#C%U(g0zT3%Wov&-ElQ)3uFb$|V9>)O*Z(_83Lo}Fpo1dI>UHV+#d|Mr2t^Dbs z4_zn9*_HG?PPY!hZ}07HBoeJjrplNHosxE*U0Rn4Rf9ix+Tbc|O75LSBppaBtgbSr z)#YVmHT{X1I?|%FU@(NX*F8iTUJC#8#G*Prde5AROX!N(cO^M&=E1?v!YYIZEr3`x4tO#D#UNSA`-V@?rq~=UqAndUw5_4 ztoJ8+TN9c+Lqo>9!G60EW3%kSE6mr*3_iXVfb6Sc;-06&mJZxIk}l=jSJiCy;42^&2>qE#_F40T1y0RTPnjJGnSyOraG&Rh?x@_nR zehWz?UT&Idy#7dYF8k%cbdZPbh&Sz7OJ8%qdz*#8eVOU-w+{`x=ki*D8}EDL*R3rx ztNqP~4lvxuXSk+%TdQ!LQ;m)= zsrkHcfqu#z3=@xYX0lzEM=LB&)1LH%YZC{pm8A-H36a^@L>1NQ+zp`y)tOJZEe&=n zaT%Thuum=k=j*iVlYUhd^)3b)u!r;_U)ZgoGZSXVhIi{-VKvs2bUCilDlX;V`@UI( ztCSA6<|e5{><%1io^5QYaawStb4QnL?p;28G)R>@ruvefOYO+s?guwLt?|KAw?lR_ z4^H*co2=?}wP7CvdrOm(oB%eQGg$&e42xQOqJai~!A(?BUscoi2QEqcF;||?-ScEe zo$-iIuixcv=Nbv@+#=eyKHv#>p=Ffl__re9%tz9R)JZ*y+JjY6caXMRc83!ARI6*F zg&K5bJOv)7v(8Jl7Wu5w0<@P7C6PkiO%RPTqTcBk$KKb`+6-(z&GbogXm=8bE=)uxVIb6iNz z%e0F8Vzb5aa2=Vqd2>02=1SWJ$P}VYhLTI3)!Me}9lCT{G}<)ZVU?!+Ew5$zjZdFa zW0&=l_dJ0w1dh~m?~0LJmUyPHDmddawyEv3GYi;K8{x?fJP@I{JblFK-if~z72(c= zws+>?T&063W$C=LZ@ED@+EVGeGUEKuK#@Jb*mN^gn(u4uNn(`_^3yy4Q`=`@ZhMRp zZ~2#b?vk{*+XdVx-N~pn5kJ_c$F!U>+H#!t=S(}4t;?EiY*twq0AT_%GnN%4;<5s! z#uE*d_!U>Dnnki7KCq6KWxksgG-c_{?9j8uLv#c8^?MAMAfqIh>Y(V0@`@tW{gqqx zo@{6p9&Ou@t@M_VYB}Q(TJNl|lrrH$7jh`=4IB033jwld7x$dNqhT4DXw56(FzM@P z&0_hiu%r3H7&E$fsD1mPVye!9NKV)f!^60Lvkqltl)W@iZRnZdv*#|_1L{v+5{9%; zn#||tO}}aVy4;JZ=CNC!SI+?VFZ7DktQZ+1%z*i!BP^q`OmcOJEz17tT@i49%vLW+ z{p&MdrPo}HVA@&0djnrw?+f;cl2*ld^N|C&TeQ0;@b6U>UN84#7WjL-7`m7nJHEKk zlliG3T3MrPLv|0f+Uti9TUOviePtp(sP#xgD(if+N-#?)w6XD>V!RRi_k4<(!&?17 zpTa^^pSIV}-llN}YlZOEb`U*3U#m?E63y(FDF6A%%*TB@YjFNgPv%{JkD%~4cn5z^+0IU4i0yf`XAhQ`+-(-6uy-#?G-1DIDWrk4kg)p=9Y4)!-^y@$DKlT zi))-=@>$~Ky-#n!UB}-UFoYR>RP+5-f0P-&24pw1h4jSkNMX#JYGYt(+;tgfdP)lZ zJ&&G@Ua!Vk_z%R08OkH)^EoI3J`6UUx}M#S%42Z(eVi4fh%fW_-J2D>yrD2xLfeZG z!W7^BEI}HvK#9`JsO1;({E`?$;AEn6)|!C;l%fPGc@zfzFjIy;#9()V`cE!2h`%aD zJCi2&8u{Gv*EwNLx~%Ymk6|~}8*=ATEdR9Q-NJK_&pwPFz8jV(i7Bz~%@J26OdKXh z)nD%KCCx0#-Fu`kFpwL+C;ko(Exji;{Kepa&P_{;k^gzmG{Q9=_{G)VIta-}pM@xKnh4r6Pho9yd^hOG4k&O_+<|wfbrZh>q)`Li0 za#YfM(SQlo|D-H4jv+8$vJoN9Tmk+Ur^u|G6;$p!k7StV#xhZ?-G8OGU_NA25+U;r zUxEV8?7o%f>j-m?{-7Uv2xjD)6Prn5mB~AyQCU)l5Z&?y7#oUfi$H`)RI1b~yuJH` zBJN+(EvO)SEVJkHSx6VQmX6lE>in9`5SV+iTWU+L)`}+$p<4Pjg)1GQeiPl;^jVyA zJB$5?$F=NgU}Y;uD0-DXMo$B0CT(?eqP+8)-J9<@J|EBvF9_5kcM(}R9-m0}~~{jDgy zkVEf>`Ssu?(&7E(dKoJ!5rp}&s~)5R{D@E9q3Vy&Q60z<*vs>E^2Gt!OYRbJk-)fL zj;6PW2QPLBWBhi-XAk@{`a~OwB*}Bgif}>pk zv)-3?&as0D!TZ039AG};Op4T)8wu*)5BE(2x;a>aP`Pc5$a+WOV_4JZvw{YlSG7A1 z5R!3fIAdumef|dNyIwhYriccqxi=pvDsmHP`5k+^Xq4Y8$Nf6MbT1w+QOqghX(GS0UML*;(iO9so3;i#-3*b{IoN4F9wMduR_ipWjH7AXXZtF)-N@ z^!{n;G05t-0Udd(`8GJA4|>K^*nyuutJ8hPT>O?QL^6Y*7{pobr)v!tjJj8_jAahb z|KYFpAr$JQjD6WU}+%Dx4wDJS> z&0yPzyrupj+odaXS7Fnl^I~(W@~3;nV#}#WKcyLi?WN5D*ric{Q56uc?evsz#sWr& z#SFA2sUdjkfH=v3U~8{yG4|MqBK+Z#t3u4>cHO)#TfgW}yu|QCED@)J#H^ znyzHMY%Y_Fe(w4$>DhAN01P>J7b){CJws-lKkyvKjwm>}b&p=>QUu@ZYpT4uZq*#p zPja;U>xd+AQNn4_*NpHhXEX5!jxi4+{+(SvhgQ;bC!n9Z--fVsEYAxuKLJzxwqu?< zXxM=$uuPeiU6&454o-;aoI@73{9%{F`$|k}o?WA=mtb`Q`Si4bbw0V@J7_fBWo< zFpTg424aJV3Hi-k5CWY=L`oz)b@V=d3GUY)0%6U^1jA7^o~1?<@No^h6n5VKiLY^! zT%d;?;RajaVptnwKv-hx1L zX7($MLpnT3yelHqxR1okVNitL3Z(}$!A5JJjffA;(6&LuQ22GrittM-XR98eXN03c zhv4=B^Dpy*AYG(x;B0GE)@EL*MAq>1Eo#7%_lw`VjC{w03NAf(C{B9y#lif-l4vCR zIblBIbNy0#YLsW2aBTss0aoF<=&MJV$les7Y?71#>EdX9G0aL=XVx>gPA@;ea zTR5N&@xNa~5X=C%&q|c|a@ETCvrqx>;;(N&Cvmh0dCUC~EUpElY|S^~_8fV;6xX*m zZyZ9L7}-7$eFPFxT*z*H5-xKB`dDg;rz?FkJa%y((*fAQ;1`FX3Fs~N!@(_a;+vH_qAcpGl}7RsHn z`kmz0vmdxqppI1lbm9Jtx8pCP;(M?-GaiX+{3NOuXc|_t#2^V$P#%*zXVA78--h^J zb9H;`LL`Y0-9;*gq#U1LJBg4{Jon_ilaKW!{Ro~{l^5^(owZh@^x_VT>um zGV9WceWXc{LX2yhXQOqY1w`-&YrT3!Fd`Df*|SdlaaQvW(>d8?94JR223bt?tv&)- z18>$i283I6c%C@F0X|i%>IEUPavMx?nJ+1Wq0JzAKDfHQeWBII`Q(4_Q3(IWn`g6f zp#;HKJSs+d7qs<>*bK{}4&*i5S2~&0?bXO{OwfWx%u%zZJiaP~30Hu+okMj^*m&{% zHJ<_g0oaDaa}jH&Hn1dL;PW0#iT%gQWu6AWxWo{vtvbd#iezX5x~K$$8c=rG%iTj( z{Brj^hiEvNp44HLMlJwh_rb87tXw5L2MAS3MHW9g9q7$Z6AhFt-uu}s2!6rs4ImJk z*L1&K4Oq&JVBph2!5g25%3rsPa{mC?yvu%;Ta7ItLL5e<>#AW2b6f0RfU$3i5aEe( z8BD>yTY$SC8XRsMWYmF7tTdA*SJ`1TWHSCdby=8`Axgd_5?0>kjIK*;YLsF zel%UF1^I{WqEH7WcvWtIs%`2l1Y!>1i6`(PMRBxssR$Xcl;mV+V*MMAZ{lDsKgVHtC~Qm+(gR~g1i*@p~02X_603S zzyg(p{YN2??c0|*Uv~uB*|<#&QvyR5gu@#}5=9pxI7Lg{Kx;tuut6Hqn9^QJ-A;1U zg39y-OQ`(D6qkFHHMaQ#w?-qN+e&#z!V-oQD`5&j7?M-bE+QQ%L#VPNY_dHwDx-D4 zs`f|!d(~M|@Lggoz&L0w_lupD4`NalcBY1dogdgdmT**gPT1Iy-&hfG%m^5#Vh;jj znTFyFBTqL(M3QY%ThRJ{%s*BKTO0J61C8WB%f97eiPh9?wr%v*K)X1pI%uPVs4Q2G zt@KQS?+2dx;y7dDf3#A@(aN^cf7nkknn0P);#UlwnGb^cYvz_*=PohEK_a7S$VpcB zS1bsO3_)J-&rTmF>)yNu4o!Ff3ie`wR)4VB?(hV#8{T>K|FMKi>pXX*9@SsDkU8?i z@BI&ax^adYOf3T_e|IY%DS5K_b4Ab#K;Go0SExBwwlr=k%r=h zCY0RrYVydQW2T+LaXQS7Lq0W?y=z}~>8CyBRqcl|UR5R$=<}C_;^G+#(x`;;N|E3y z7)g6|N1Kr(kzh;uNdDp6fAEGJ;k+Td^ZH6~r(z#Iy|-69;hlv9L{cVg@f~QI#n`yJm|D&*CTfd&s$*u!Z~ZY+Z@EOe>yl%GEAl?)E$N zV$4mkZSgdQF-IfQifGfMXt#|cefZdYTSY4-Tf&dCV#4FH#7U(krg$fTCm6T+hJ8#M z21K`6dqn$|xAX2eLxAQ_t=w@Y2&})h;E^7*aXPK>Pn725HZA$V^-~~hDw*)~=2fL5 zwBo*@7AB~2*CH>=NM*g&HWOIa_o85D0(j-}1Lb<1dK%$#Z<~NoNf!=(*ZRNys$P(p{1O^~SRdOv>?>>oeKzF-PtQcKYg1XR* zyD}%Yob-%>R(p}fe5Yv}puVjXSTO%@)m7hEJqQA~OW-ZQ8x0|mkt~;M{3VDABVEX! z$tzbWyjagci0pQtSbg2$ApE}oU$ZSi;GOR4rlX5@0Lv#ofl6zz+?Lc@YFcqbf^-<% z6B<)Cw2>hg%<-pV(6?~7hCJ>nmY*iA%H06_ck&i1f}h|IbU@-a-q`}qmA+XEABDcX z=Y{0*ULlJiUFdIt1i*m=rv#9?w|?#A475e=?8h7rK8wiemIsAC6_!4odHW~8A1dTG z4V+N>s=OuYLp}h!^JP=4W_FY#b)k#R$+ujTBuH;LVD&7j(=WJ92KvEJGwk02umeuE z$e0`dGaL!=tL9+2GEoBR$PnmvtMpu@C&i^|`+tw4jltH4510(VS}p+&aWX*h=>fcc z3$ucrIua!PcgUD@5QFyVfe)_lkTUk0)8`IWV%9Rz#l$}{Ir7~al=0^a&|!Z>Ryl&B zLGwl;_Xd-W1p=n_@L?+B*K8~3b45Z8?GX-36!8FHA6`S zWk5?0y0ec1h%$?U44xxpr0Y|GRqDhmY8=H~-3z3!LHG!ACV(roQ|J6?NErc3N*FAc z`Y7H%3X(fL0OO*)XOhJz?I&d$#5irXx=5tVm+!0-_r> z5@QM**Jv_gY11Xic&8UJ2Y#`Id&EfYDU4^nPDh?<;*3X*A_NyKIR|3A6KRt$Vmu*) zp;i~dQkzxPwv{V8hG9NJn3BE_XsVN^*Vn1-DYyC+^t2*L^dnh8ad6i2_(UJuB& z|La?<>5~qcAy>3{i=lowvqNq2|QTLHV)5ptTYBM3dpoStLd} zYYQdv|J;i)qa1GHiqmIq&dPXC@fkN~^dxslHRYNn?_&`?bsYZ0#f&mTHbP$uD1YBiLwd6_ zxYDLu?BHs9|1cTqgwlLFTway99>U?N81>W6qg3<(f@%Yw9+%!haO2Mb3xFmmrRp#; zL44_9RiOyXH8`B%tk-;iK=jOP@r~YJd|axcN{jn(Zq#Zw$oXkx1G29PBAXK1q8*)yK0m1KQsKlX03eR9XP{g7h_Usn}>5oc`j9S{m93 zXAir%Xv$gq(1yDURB@Le7|1MPHJg7g&}y{$Yettf*v zGqGG=V5-Z`1x&wa#9?OPtPExFWLu8ivoGLrgqaUQqp)oXNK+CDC5UDEn=T8}7;9Wz zcJ1;+ig2(5{ea0iOO#@IIfQK1jL>Yj2-HpYRpCaX?5?AofGh0S!V{4{MSxkXh_1sn zAvX(@;y*uZH`WPYzn$tHA|_G8>1ZeL%3?>7S5gQ#O^d}R#N_jZPa9J*t7|UwD(8$m z>`eFx`rI$A(&TUb$>aHYvr&cNG%gh(Nc$dJ>@4w;+?H1)Fu^pk+o+d zvDy#O5cHAo(XzuFm5t^9WypXSbcUqI?*p{ne69qPzz)TweU8Rv*eoiILHgsO%!_pA z9V}ty6KQ3TmR^$l?G=(SV8|!QaekM|C$vm*GywJ>8GDvsU!*v|vI zj3vYD;uJv+_Hq*#4J{o0YTZ4!D9RAsDGT;lQNoR4hx#mvp%T1ul(C(<K>n@r(EW`j$}-Y z=0S@AeorvJv#S$&jCqXJv#uTg4E;oJ2}?t=1o5|A3=Kb3`gv;J_&D@apm2AM1lUEF zn#+Obg+2hyI55s6Fp{x>QJa)Rn<8-xH7GO~Dzfn$3;YFah&ntfaYvv~1Vgn71#JLW zKLq;L2M9s;O!2{7TZTA1al8pl8>epS-j@Vu2R;7~+H%=SIQ%{iJY^a9S=ER(qkzhb zNE^B4456}z*Teflu3;5@7jn+tOY2r>SV{iQM?ZS^C`X8Ujkzn+e`;oBN)@(+X`7to zLBm`OEh-U_M*OWvdPk~|qHomJ!JGgnQ9i4XRAPsH~H@ zI79=6dGU?WKe7a+ktl{8RLOBOour7i8G%b+VC@s5FoJIpz>Efhq(D?&HiJajIMGFEy4ePfF z3Jsvn#-9Gwsis+_cgB~&*$N0Cf&2O(jd1`4%*OcO_wu?m8|bISHW{zuo*8mZvq zcb9W4@JueraF){n4FwKr@IXiB?jBGbP<0gM^@vUg4IPk`3BeA7=c}klzeJF+DZ|AT z(=LGc<^Ne851M8rR3u{uR4v$A6GtN#>mVpB9b`ee_~-o?KS6-p&GJ9OAj1DgxCH4+ z89Zu^DF-}-ae+38EP)<03Jso7j5rB;trXXjiV==csT={ILXgENR3eKX66OsbB3D#Qy#cNam9huXvbN12mS*>u~jrJBK#Hjv{(Pty1mjkj$9l+AA z(^PZvqjX?|dzof*bCS8@d8D5hvyr3AY&AReMTUTXKV*FA`)_HoEl771+%Lb~Pfcrk z#2^wk&62Z`xL@$y1}xJjS`hS+GzmWevKThH|1gLvKN*sy%F#&3&yYFH@nX9TC2r}h z2S3F~Gj=dEhu8U=@nj6i$Py)H{#py_!=zOstSI?^_U|@gnI01-Es)(P{k?dKOL;h) zy$@5edwKw-bU~*ALB#WxSYr&A~3KXFSo@@c9bajXH@87~~J-Eyd(J-_w+Qt7O zK*#;4e)h_&Omx5}MbbW7L>EF*oa5_-C-A+QzLuy;>jE{n*VqAunIDEe0SgU_0Y~Vg z(sBDEh*4R%R*(~J?1%Mc*YQ49)=R@GhWC-!GPTP|rXjf-(Q|Igl8hYAE6=&c9lWQ< z+8~Hlft!4^8+E86)Ar)&_E7~2)kfvO_Iwf?gJYR?)Wh8GRg>T66iGMmY8dEdU=?Y{ z!9775p>I>|M*7E2wR>>)yh>UyK6Bp}H9)U2aUJr78S;G=EtGQ^ks$5+WpSzEgEg7| zN;95P)y$W@PD!)AU03}c22UG?h6<3a=qvhhyKfuCZu_oQY*_f{($ zB%%6uY9IU#4*n$WoO?p$b)SX;f^dC*%&YQPmZIU`o4F!+Q0Y zDnPLhpm_N%PP2HvRhR|bu2M-C3d#uw=bY+$+@CoMZh!^fKGCLT1%qnCfd^NeK@{sg zNncU6tr|bYKyhe{K^39;{KdFJiy)1%;Rcw)rv#2|9GtdeJZTAlp8r+P8L7e@ zH(oG1-4L8TYJXp(?r(qx7BG}1jnY!<%uJ0GbX#E6VpL8a&AfUykb0psYGtF$^=#(+s~ z?J<%FLI5~iJ_F4Awn_sRxw*ARzOFq$H^Llle@1tz;;uGD?KS-EhM87`qTkKLDH&(R zpqL>brV3UP0Lior?nQ8P3X$afERH!Il+RCUpWV->1$h3+Aqjz)vqzu1xUQXVbZ?wf zl;A&4q~g#%tMwTdWM!hqTo@sKnX@uMpW*Zi-Q73Q2h5j+N$nx92<(@QA@gt=sJo-T zm{8^XZhPFT$dq{<3}G3b43mVA2$4eGPPjX$)o+|d$jJTpYEBM~)nTeIzHnkh=S{@q zfy5i*Rb63RkB(EQLwC5g?ywNIh~5*(pCBz5)NmJ?Z;|`NpDrScZej_S^I={#Td=p{ zUEgySS8rnjWfou}f=M#X$oh-4#LR8H9AWJ1G!f_RS}^XQa7 zi0je@W-i8#VDK1C8vJyat^(0u<+$&ocV`0`*Zq3T^CjlDPN zL$jYIGclpzF1Av30l~K2f;IF-D@Wk#1wj2*l@9C8N&Lq`nyDcxx5o`lh4z7_ zl5>Ubk4-|J`^UqL-ICPl`*JX z^4EK(4xaN*(@bbQw4om9e^Hekq;Pl=cg=}a8ouh4J4oG^$1(;5f3hP&#U*|?enW>lHOPU;QA2nqKuawG98kEu^ z^}-^_@5rin+h><(Dt@{em;XuXNC@4ICzVnEtbz+z)*q4);z)MbPzO1R(fx$HE?Ws> bOD}F;Cdou`T?hZ)0wS2(nbjTlyYjyPF@R4P literal 0 HcmV?d00001 diff --git a/frontend/src/assets/dangseon-yo.png b/frontend/src/assets/dangseon-yo.png new file mode 100644 index 0000000000000000000000000000000000000000..ebe9df59d442534b521c91ef67710bf89ce52dc9 GIT binary patch literal 23840 zcmcfngHd@bl22un4-KS3L-ut1Ox<%w3L`K1O()dkCp`w`ynYhC^P!#Af1#Y zMIb6C2#-F#h?#0i|B#b|p!qn5hky*RfB^hc`Dpkb4FUo>2NDAMqlf$_%Ypj8Um<_w zK>z>Fv;HZrp%@E%bc7aS3aTGH)IZtBXY!*_|8M_sPW~P=2buTLk4cLOtGYp+W+JQ- z&AblQQHhC=J(D4nHZH3v`Zv~`3zt#cNz{v|!6R7EtMNu+1LN58skLR!*lK1w&y7l? z=zlBq%RjwkA57+R?o2pNfLD3VCa#~ovhF)w_vyMe?lZVu|E97!=`_TJ`N4+@v4DuB zYT=x**szxYme3<&LV%A0Up5EnI33v=wjuBabKMT<|HNX3c(d0`Si~`X=V&%Df~6Aw zl-sH7Vc-Mdwmi-L1A@)MdRA#BLR zfj1>1f%-ULFq#qfBv87QRzg1ShX48uiGdD@0Rid~QG&Lgbzvxq|Hsk~9!t!SW;7Dt zFRwBB>oCq|+J8gIAfSqb|Eb-Dkx~68P$UH9DLKzV5H`GKY_BSfd?*QEnup}T36BZC zY`F45K;*)17M~?Qp~_u``@!#u8h*j*gEWQ2LgqT(c|V$JA~CQr0}x+GJ$uwuRbw@M z#K#BVBB_)uqy#-FxyVV@b(}$CF@wvX)K2V3Bf|YbLy-r{i)R@}ahBwh^*f=3SNodV z9F{edM9&HBF!?9QDtKqndP$Kc(MeISX7J+_Yz#O;$cn<35D_*Ze_;sxt4i#69o7rV z2dGNs2tx|>6~Q{h`90Vln&gG&^D|EYoy>@K!_#-lhgnSZSbl&?e_b(GQynmj|J(cwFd#16A=e$lW)xD3q2xb-T1cN)YgPbfilKBlazEKL?aa^zH4 z=s)@+;u;JC(Aed{YEk}Bm>_h>^s3bk5!1u7Z9rDviea_f^C(=;y-qtW zS+X7G135>*cU<{C0wu5dI&|k0@#*JF0e@w%4@UFAcK6~mqgY9v9{yLs#?436D`zP^ znFdVx>dl`L4d@RDa ztuq{qM@S6-Q1+OimRg`9YRvF~9)g9mY+w9N>no7UZ7@ehJJYym0^BE`8%Wp!pHyq)R<1h}kxms!3r=Jmh8G_cw zcq__mtmY0KO);|^Vj!<<=<2;L3eMM zzuC0s=Ras|GczA>qDzS!S2XxscSR5=C&*LviwW6yJD^5(>5@m0pwA)J*uOJU3cVJ3y^mDFmkl$-<{ zBKvq*=BWXxE9N(ez--#wm%I8@bOW%S-%WD~tu5%{F)q6h$+D1bH>9?jvs4gbG99|X zL0UHgFw|`pe@PD~rMpkBqr+d^@1~I<7BK# zc}#{BCCNY|{GO22{pW*_lVKt$n%$&6ZwPjc)-gMKh=(4dztui>q{%W)mJ9y{?t9CP z4MaU)3(?8aut+%B9FC9aY;!4~$om2eH5h=p{1XXs`(CWhmk!_G)&WHy_6~iCS}P>8 z^{(weQYh%Y0*_@rdRp3^X8(_f6B|Z6(^Z0jfGWil6C5UG%HaagFBCz$1L8~A|!MLs^l-|Y;v@waxlmYQUYGl0wpb@at-elwxV0l>wN&ZfJpq2Ilw zp<-ae3dl-Qi?L0rsz&F0#?3Axs-`|U(S2}(PcRjDe!v_WK?-3BfnVg?E6WzW+&iO5 zwoOH4xZgVq6y2+^?iow4%Q|8V>1s5aU&?l~*+)LPZ;^40`X-6O{d-rI%fzH^xh@We0T&Di&ElquKdqo0d5K zMADy37pf&;486Pzy+0c66Eos-4GXxg^>=uFAC7g&Rq~DzWDh_Hhd7)*AT? z+M(kz5k0wPY4z4@neke7@-so93m41ok?6XqjWK@AG-ou#f@hkGpGx|H?Tpo5n;t9u znU0AC$O$z^6h7cLHiR@tet-januP(4)sq1!wu%lWo*TKWmNCA?f1|r6>3F8=_ghwO z(%Q5xwwH`LZtHXmd5a{t&~zkr_)Z$9n5R@j7s%IxM|m!Gj}`<%X9m?p3v=-tP%~H} zlg(~eB;ikC1?31*kZ!!$vp%O@eT&b6yQZHKR-`IUorg@!1|+^3spD62STxs{`v$`r zu9xKmDeAtiP7*Z!5WN>!5LNj-Lt2TO(R;6z(S)i?02f3G$HnSkn^q}){6wIv`@GCMB^mKlU@@aa=IzU+=}LU) zM$m1ir%wG$qTHcE>2#csYdGv1xVEy?0XYqzhUplur zcRfmJiRcFve2h_^q?R?-@fn>$A(AZ$Y*tCuD*uCE)V@G$PVM}g-E_^ox3p?)g0G-8 zolV%+6QtLu5+l=sp5gWKtJ}Ffg_sG>6ZzZ%Nx#r5;HI5qfm#RdGt6z$?JdlMo1DDQ zTd9&EQfbKbZs8eQF^PeyH6)-pXRRK@Z7@I}$Kdy%3sO>CIyVUjZ^2z~NWZF;7No_o z8%KPU0o7a@Q5J!0L%0^K`gSRHPayVg%cxJ=D)ATE(phvD<_x`WJTt_hseXpKDpF>P zdeO7t@gQ#3edgli$KCGPD_uhxir=1WeHWemGhDZqL*MKbr*U5QFv-5?Dy)0i?Xm%* zO{5Kl2yUE&ftHcPa%N2!m?Sy>15%0Vh;u*}U0&FV8aQld%cH~RvXKn^HdI%{nFE(o zmQ$BwAk;4IMcv<4xGZ8?uVqg|Q_0tOeRq1!&TOx*nFd84n7h4I(SI+REcEF&Q20bh zFNbZ=C7OoU^11A{KkwG74fftFZC5OgmgslQu05W6kD7j)osn2D29!?UWb>f)yg+5u zzQ%@U&KQZl+&g#ur+(HVeMPI{KR=vmZlt)lF?q0gfUS_*sTS3gX+Tv*5h~F!5!327 z`)!EONzF|SpQlN*@$xqmA-sr%dV@?5-}fD@2if8Ja*v~-U?j%J=Wx31{Y&zX#R#s& zgJ>?uCcF1OIVTmJ(Z~_ik*%J-9=5-#-F@XJ^;E(*Dzkk3kiaMoFBT~6%J?ag4C3dY zOM2DqtrzYmB}qKaY^b8+0rVytWjyFug!b>mQVa;2u7VrpzufoSJ#< zI9W#HQ4g{0cQ}@=+!}Gcn#?Rr$Y8i>f8x^0on zt&-5aH@DLM{S9DRZlUB$UhB0&*2x`dFZ**>#?T4t9s}!dhMH&gEfjq6St`p`BzETt zH3ZY%;LVDr|4Epag3i3wiJ4Z{+qFsQ{3P4^^+OW3l%E-#yRMM*jC5M!56cf!$VWNv z?39`b8j~ii9}fah2Ll#5Cy^18!i8sQ=~+0?&x<^Yh63w;;v1IUa@W2^P~OUaU_Nc? z>4u1O1yq8FLF>WRJR)fm)5C03q)~Jnkg0O7dvf>!1P8a=^oFBn(}X#<;&@t&wsxrj zKyfT)U{D&%UZiO4FO0)bH}ycSvl>okI@NP|j+qY=H#hv@L}B2hy-jxWzjcT4|%HG`f&@B|lo=an>DiJ9s zr;qa~QKqDJSrg0f_`XGp_9x$aHhqeNfb$694smF$e$7RIO^14v&#u<2H}++|o<~Yi zHq96YRJ%wQY&|_2{`O6;vpHoyE5W*@4bQ`u0$&`{D`@hvKO6b2z0Z#oy&5|ih2tTY zYA_H45iBh%q^klB=LcloR>cu6{29NlJJvhbMsY*E90MTG0P9~G89r{ykg5zsJ=itq z%graK(uK=o8&7PDN8y-|vv85)IgBP7OXAPG+OS2C+lyjn&kn+u4AG9l0|( zwaaW=*ms;q9rLrv4eYer8U+14Eq%YyC!u^GGhr@e!zbn3Af7(eQzh(;3e+?B$DF_YLOLLjnw*P*}j4$@e7OTBo|nhs0?H-(PPx$O3324FP0`u6OzO z8X8d|t$xeoOCS5qE4|)js`9PqUtTh=XTlXzyrKL9Ce#wF52udSXQGf+XAIn*l%Q+X_)AI?IT9sYt;CnxcyQ_W zH5->!9RnSN4w`TiB>07IV%d~UFnZFr@~T{0vgcfnW{8ys{~(rwg;v`SM&^0?FA$-fWNWMpj+x`rq!Q3SAqQmlm;PH(*Gz~>#-X4gtn6j8s zLZ94q@oUC@)Incx{?Vd54tJIT(SbUL%JHH-5z_Z;y+HP$P3iD%aK=hKzyPI2$^-zl zLktj|THIe^Z#Lx=ee4iG`cZCW0T8$!mh93Jow0LRyMZj4Gbi80?UTh5V#-GyX9eKV z>z#!`MRcKc&nQL||Jx-79MwHKe8+}0hyB8|%ZZcvp|u0340%_A^T1fC686T=IOCOr zGg*T(YP*C^+{T)rF6O8B1c_mv;dl15SPp&XHq<=s6#lr31Kwq`{|1BnoA zAS$3MAS<9Qf2#-lenST`k5PSMfcfdaEW(0OOb05L*>S6x>VH6vXi@yAiZyxj$Nx%b zoCR>Pv!m9YAqfjUBAa>vI^a5>J0Lq?FCR%JMRk$hac@YR8QGAwIh)gSPDljaZV(TZ z&1sxTZ#)kPLj@J?2o3?E8xW5veg+~T!XZL%!p|a}qJsV|K@XuTHaS3%bYTL~9yrwO zz(u0CFroigtcxAd_02|!2XA(>xM%**j-5`9gMg#*fo8FIrYZ1-t#L9ukp3kL=oI!d zLvAF>;>@|QUKxC7NHF6m{OS9PkKdX`HESB(97W-;pX^HKucLE7i0QW(7RP)n02gCM zL7kI6Pq>~xnBx|hS)jaU!vk8QTUjftYK}Qjzt{{(lm%#4Ai@Gg8;O$9IFD0e$q&}7 zkFx{3Y*^MX8l4q95i(*OP@BfbfafP*a(x~f&89^UucS#1W(K^gSgq;pg`X1T6ee{;{o z0c}xJkE!g)e$0i(@w$6gl9_-gv$M1bsa&1T*9;kU8!Ln9Q4a>_M0Y8_>s~D$w~x7_G(6dGbFx$n)zC2uNNTh`r}JJ2YDfCEX6aao z4po+`Ix({BGR2oPIEQ2n!Eq(qGg#$ti#Xdj{b_StnBz?Emap|ea# zUCa+nV`Li7UCEamIJ%a3*$! zWP@o1v=VMl=3L4P%-}xukY9&(%Z1L>#{-V8_3<^rGl_VLhjwp?c6W?{rnZ=x#J1`6 zoHL!Gti);aBch{dsxwIQ4SvqTf9v|j;x-v#%H9cfwo-n z2u2?4yw!0j!z^*CN5(7b)SC6?QyiU#{(#hL`$(gglZZ+sVx3Tm$ukI?1*^5LRezoiGsswR4NqGIJ4 zw6$B1?!EwIxZg<1RKTTqe~Z2jHqI;0F;DUby3!JRnW!Bj6$4u+aOGaolxfIDm-WsC~W|_DdxIa{b)SgK0HZ zWmk7*gg{;P#O#T0a@h${a=?V5+e|s-E{K+8KGn=6i`qHhNt9ODO0<1(h@kcX9N9s- z4rho@o?SzF9Ra}`X(8!OOC`a#!d#JlWB^(|*bVsg6%CZ#{dwk%sju5xUquUZyJ`hF zm@9HH1jh!|2JSN8yWru$$36;_b%u2o=!e6o=~{j%WT zOZa8~wcwHDLYZ`_!=0qGo=kGT7%r7G1O{ULHIqJfm$_@18kpKcKgf7T<%e(p3icle zw-4K_Y{Yp{d%Qb8FkHuU`=Zxb92l7yutS%f&>iPTGYX%v%$Ak!eX)noWjzZK$j??@ zr;Ilf$K2FlO-Hq5;c`0u&U%OyY5;9>Y@8JvQ=SGumC$T_%^iK@Vx+&0fjF45=5<-! zZ08%@>lrK?MPix7c({WaHAfmLmEKeg{9NCl|2|~o$eymF^aW#c%}EP2(9nKADA9&= z;_nFluIeO`WLTTe!`7uWeSvYw$rOS^qFfb=V!HJq`G}=tbg+NMO z4@wsSWA07BE?aYrQo}?VKuq^2+*2T1Yxya~@4}1NFVAS>_wsn<;Wm7ENTzt!rNqxx zww0DsX|pkh3XMo_9^AG-Z6wCANP9ELy|>d5)hJSr8D!N|?G+0j z04qZ!*a>w(7>l33BwN_~K)qc=(QDlz+=zr4hzOwdH`HWnzEWxgQUXTVxUSW;QUw9E zbZg~Av$}8Z4s18@ZZ1(og^>78QUS>A)7g-GX)zgKFp=|(EL>4RO{5}lu+oKOP~qa6cbb=VTPcv zDj&&XKW{3$H2_c~x**yldP?9my(~V(JvA~_GxdE6gw9C(7ycDu8GZZd<@4`OMGYy} zNGShu9>6cc4EJ<)G?uI|b1lW6PZ4AokQn9=pmx{;w9ONP-+!hIrT)uN$YMZ#p?$~k9-Rq#D`!V(7PVA%>ZtXd}SqhOOUtw-w}#Tkn8aFQ2n<_NF@4u zSuk>bZdOgU@Q{H2Nx=SlgZD2J`~UI~QbV{nXnmlb=g-N@Vf`&A^0KA$7EJ8h@rY8hZ6Wss>ioF&%?6(0i%CPnz{cYJ2MU4Xu+!IRrQ(A(!6jzTF24vNiKPtg4aX<6_@ zunreXM9YZFxZ2S8P`7?*uShfH*{iT3FBe*H%YfXfm$|Iish%mu-#fomeveG49!^f7 zOwk>ZhJp`-&V@db9ItEe5abI(XlE7bzc;t|LVjj7AtJsZoqkt*#RO{DlTZ7i?}1r? zZozJ>{jASl(I@xaIk-``N$@hp&;8zgk%=JYvVLX--Q$S7e97D_zt(?w2lUs;`{cBv zc_XmX4A#zG6B_MvlKa5_v+qdRUB@FY+RTHSY?^a5hvswAg7F0TFGnAiGQ`5yd>T&1C^1!r{RSnYow?O+;m<{(=!Udch9*ayfcC7|8{p7Q!WY z3t5?jht?2mLbk~cdJBESpguPI<5FYc3~WYztywx5?;ys)@^V7(!kOzrV1MdX@ixku zg>#EXwCj%z^V0yhrQ2%##g^fbYS@?ry|~}}>C`7mM4Y#RN+*AcCP8sCQoIwmKz=%^ z)dyA}t|LM9p%=iKq70h?W2|0x>XceN9Gq#S7!k??i#Gx+c{|>4&~To*Wp7qo^obh~ zTc-g@63!WQPFo}i(UwIX-kUeyfWHwZc%f|2nSmrKRdrVB&CRoL59X>LPo@6dv7x;M z0ScX^9l1~4aED{Gs@uh?==z^Fo$Licxje0n;gMF}n;ccq<}l}cpvKTmf#C*dg}2i2 zxF-nTb|FeAdCU~}s(7B}yYSd>?@gND<{-Rj+@nP)OD0p&jf0rCQ6YtuK771I}< z5l%EuwikDfD8o-eS2<`G5+(W{i`O?fzsar?qyp|0MSO=+5#VN3=*I(n0^lK3%%@@p zO<#S>PzBj?sNQ>1^v0cE1{&RDkL-e|`I;i3k(@SDQ>_AxP`gr8dHq4wuj|U5>*lL! z1GL;_v7Fpfcb)(m;8zD90Jb}Eg*1MmtbSW!QAgBWm!}EgnQ1OS7s2^>S1sJ=I0B zMwbgYmkh~X#RcqfApZo?g{KQr_Ce)G-kTFvi_&~rgljI$j&4m1^J53C54)4iUKH33 z{XAd40&n)vN2B7;I!<48~c!6jp1G*h()xz_V`79oCIjp${eyjBcpYb|w zrs?ZKkhStZ7FSpEHSGY^TiCC_73Y+Nyl{U`%5I%vNs%g1IetSIZOanz02a7I1g-$v zMupO@7Vlh<7kB6+S%5OeVTfvzPysGPh|6)kx#62}wg7$R&qm!}E?;Hd?N_6jFAON5 z!T=H^175{!aPNj-s*Tky-!V|iw7Cjd*J!^~XF^dIe&YaFesY))1!RPK#Y7-J56Mnc zLJ|nqZQ*3G#&l&OQ|E4I(-XOnX5whBZ0}d6x6a@G0RjDoJmQ{#uC|LeO5|ycyORZ$ z&t{VcWNXs=9`z9?^A&rByK8ka$w_C56O=M^e`+a52?J}}8Z7c4J9^HR4}Es+y+3WX z$pVfs5B)0^L|f2Cy_Xwpmf%$|+KjT?z$|0+FCI&#It+(vZF}0t<@bzDtGQo)Er)xG zzr6P@KtB^{{&8SG&Vm9?oG#VvaXqkN`$V2DH<(I3a3MoKJzXRNvEqmV8hUIW@6O)e zp=&|~)M{9wCHYt|9$-OPi&tC;?uz?MjBs0h4tE~h6E46ZJX?%_^3j(K#KhV42XbQmBgsd7DMC^8tm2l*@1QBpKk|MvUD!K%R__(ktoVlTS zH`o*}-|9y|=oF95OXlQp?fdcXp7(bSc+fQj1XuXKzxAByA-rJEyiw-E(0`+DqmXf7 z_|~YCL`Pcb{gomYMNgX4Q|V6w#h={aIP;nWF&df5eC1r2M48_d$rco!Oy||IBj>*dLAh{Gd;~(r;g?l&OrvzUp@;^Fe=;XHI(*WU6BKO#tE9DryB7!DhXTl_GgklxhUA}7Ewnzr3wmv!?Zr2f}^n4 zv;I}hxllOcF$>q+zLnz)VRfvu-W%aBe#z zJC9*WyCIfK!W6Lku5ElWo#ymckIvCe02$AOiEb<#zzLBGFFUH^pOC%e<4J0Y_jPC; zmUzfDg2{$`@4F}YyST%rSWB3x+fp^9>q_%Pt?!TEy#ekq18Y|ZmTC;6@${WrYkAhU~D(fEN7`LLv9G9N8Srqf#Z-ODUIpV)zQ2+ zOPcM0DaN2B_E?1rg&f#*!11?hmo>FeEs3!(b7-U~?EB%)q(O>>EP_j*2p9wU6yp`) zff4=dwQ+X&K5gb7bM19L;$U^fDUOV3`)mFuyL?{+W=X^f%bBl_(MW%OZ95JN*RvRv1$4wH=fHN5G}Mzz>Y<>%cdD8Cn~#}v|3OKR$(+1X z{L~QsD^*4UckY3X-V{e>uf5)OQRsVxR~dxbeu{C4zm7kfd?>tl&{qZJc20bV{Th zNxGS9zpN8NOEWrpzS>mX8nGj zi?>LFrO4=4T>8;~BVV*a(Z<#3`QU*1Ypg�#0G34kcmGQq^UaW#5(7ag|!#C)zIh z^pd+Z&uAu;z`f|1?}jxa+M#yDz=UX@E5mPp0!oa>(>iTW36+v`f4(pv zAU6gbEvUTuMd#FHVF{gWn3YPv39#7sid^?I zgW`MsPd@o(pgxJB?~9Qo*@*kjXf*U*S9=B>;}}uXNdUn6`Z2nq3EN2ik2$j(0N+&K zb+Ym-;&q!6k-THbA04*u5m!;s_QW&d2X@K_peJ0f4mGB z^afpTz0rH!d|zh5D1Ve*+vxCCFHdys1T>KqsDbRUBa!i#i|qUPEJKKTkt3$DT%5(x zqApFINlbc}q+c)0<}3a>j*EY%dAY!K_@Uf|At{(jKEE57q9O&3uL*B7Sdl+^XN@^u z)I-WYL^AJaU7_@-w~o1fIbwWF8c<#T&77+@l2B?T1gqSyF~+d5!}obg9LmdVu9jlM#!|$)jm{d3IUz8Y3FfZBo1DrZWK$eoDM;; zUP+wQ3hMORC&C|-Qkp$ql-s%OYFXfM^Rk;c+56jlj*!*b)FX2~rX!Vw#91jBvl^`1K~Z|t7MK{(i)Vc zOP+zEDi0U4IZdOY@6oGHS>%}XtYmPhDTP%@Om;gy)+hr09a^nZp`DfTWYJPzu~pI0 z7p)}%?g>k!wEDL|1%K2g!AA!4wrKsesBxT{JK5e`4f)o5vQhj`Q%rkBze!6Qk6d_3 zL^ix;2SR8`{WrxnCBgkKtkFmCf@HCrDVslgTu$zDkfz}<2@6rL3J3TjHN8f<>A~wL zt}4Ej57f8)d`{cd)wsyh{yw%8D694y&nkIBA0FX7$cbC;^VXySDMqtMgSc1S){95wW$8QsZ$kni)xgr%|qd2`OHQ0#ii!Q}pkdGn{B5 znmqXri+>!bF=~LCJN_oWJBB?|W|w?nELXYMP#Vs|9^#(K2#}d5f9~NWI2UvXoBsIl38vU-g3va zK@$zm!+1k4*Upn?Q|nw`vnW!$50R!F`wqNRGC=-!b@nOrOk!q^vmV=;dc)U!1ZGbuwW18St3x{G}= z9m@i ziZGfxuq1?O#DLG7?T_E^0eeoJ{iT0jp5&lF)Xk#gq{(X*r{av?bb*(&OFJVHJ}@O* z0*sR@VRQTamUl$*oP(Z7^-3!Z4Mlsm?jOgQ!d7gv50WkB{j%iB|By4`bf85n3#2Wz zitl}mAKN}~cheeK>bd`yU{a3@r_MW}6<6qdDVC5dV3ACSI|8+;{8>msF2flE_eE`und% z>-=&ht35xo>D0b81OhWoWXjP0m?H2?RM9%jP!68f)Iz?F4Tv|SIr|;KgGx8ZK z5h(ZhDADJux8^4WwN4(&FOmPzXy9Ifm;2`#A6$dwN9;FbjJPC;Wxu{X48h4rxQ_aW z5zy-J@>d1@i_uu-2Ng+}SGtI_|M(t|eYI+v=)TRQ4&X3@milLg&^){VUO~9!;_RX_;M}crR)0YQ{`Thky;cG6^1wEdAtIy=tK_V2jq=V z-4u5La>29x$Op}2957TNyuK3|1ZUUy_sP3VjV#$$V&8rG0`Nh0*Ry{qmVBaFJHnWV ze9NbA6VTH~9t2CII>g_;W*h87FWCj?6g6f;b+N`u+Ejiu%9Zy;H zoxOG(*v$ojW;<3e1~wqk0oQs;A4Rd$-2}(}$*fHeK&x*}N7um>QLdwk9wlUEd^Ry! z{No6WY`AD5`AI@47?e^cG_^2Sj`z#X|0WU;_~*yf44C${7wa^rh4qy9ij^BSOeKdhhj5ZL7IokJPlBAS#*+iY>&RD=q1}*z;ku zMyw{{;M?=@Oju4C-I~{a?xSSyI%QquUfe&rvT0OW$g8_A*3(%FZ-ynE*qXX0Mw%0` ztO1L7tg5QPl{iHCav)#I_RTBP_2K3VuQ}SLIs>Qwh9#!zjgC2zj`lvzeu|wWk2To$ zyuV^`2&eI3-MpEtr2eEf93|OYhtWx7PeOc8BJg*5+@^Y6jJx(~i!+bc)Qa`dVjr_U zRxS$!AS?Q#u$sG6sC-MC_qB- zmrafZ%3S=@vN_2gC!7>$;lT0gd*Jmjw?Z5#5E;xlas!Cj-H5q=jd8U-7CYv zng=)d%;%RILH@zVt{@&A>|hfWj;8tO6UT1!_LR5a zHD=wLk2CSJZ8rTSBTVUNorD>JTv-fR6Rtd*I;>%;xrNt#a5+ppK3jhGN*BGmRsu{8 z?BF#QeI$BN3=nCO=@^-eC>4US!3jegYNbx#%WD@5_;8*5@kor}i!^wxs*BHjDD4oC z2HW)ku}TA3^;jH|bDMHx|GxmN%_@!m%zG)v^?SW(QNf%QbMk@;d+f~7m8EM(CXFV6 za6MJ3y%d=#|1Z_iFu4HC>m~Udi;E8u3aO(~6XyI!DtLISUvxp7WMxnN-$61Th|J{2R}Ka$k%wXmsUYH5TS)UC8k~y^3&N z>&lAar)R*ig%ioSu(%DG>TIz92f)$L4kuFPkB`*9g}Lc~&nA%u1+;89g^-J&fh-K4zPM!kzW_0P1gJuRTflrs zU;}{-#V3{NQJTm!PKN4mQ@JR`U?ZF9Xv+rz^H=XY+-*R(c&qSq2Qr1uVSBlQAW)Iw zF8OlG199=LuP;o~6?VTr>!)F$+%fb28t*NRW( zFi+nbY6NTSZ8?5f_))m5GP!RnACNqx_Icg>kyNs;Tej*8E zraayz<;v8$$hv}3Fmt$oA}p07)wNh-p+QB9$A^k)6Y=6xe6~C0HT1)UX-WDot7TNz z=jgY(ALG;V6HW&cx3bq3=K6u8RdgZai}Fk3NQdv8P3ofXG~YZq7~ZlQzARDfJ58Ez z>HKxHF5E7j2^*Q@3rn5fQ^bgJyc(e@8^8E7e&Txuj)1>k_q1DJvzYoiWD=A*<%(>^Q2Zp%#kFiI4EI_qSd#qbt^!OjuT-D#80IFvfM0 zlRnyvA~7^^t1hLi&!8NM*>@#GnrfVYRZrXH1s-p@pnGGAUhENSHPZPn`#;&dcfJ$e#394|A>?G8Jt@Z49W~W<7cBU4iZjeFVm?t z3EOV3BbXQ>a?Q9+@~b$A#>LYL`--^#xnwsYI zCT?d-RP@fr@1ys}(+~2$+X^-qevd{=Yp#~j=2@+qijYLey5?0gkop`tzSO-`?c9p# zFbHv|b(wpt`$s^8s9 z7=j~ddoO4)?$=`w&8*m9ncw+#U~YH%i^$^VR3yytQdzU8ucZl*W&P4nst_rz1u^2Y z1!&*1fn&9NLE>^)r&t)K>|C#{#X=Ihg^Gb7_C(9`|G*yoIEi{9>ET|=Cm~1uNPtV zo)Sijd#maEFuRNwb8t!Zn(Kxhk=I4f@xxBEhFRv%q}J_Uw5rJrdb32XtG{89adWcV z_wjB=X{)F$FTts-lJt75_12^_AFF4fdWCiYHobPfd5isM!q?-yWCI4INlxx{1*bZF z%k;g~t5#u(Mp*(1ivE|b5as@UI!ZxrsUqn7*D=OkWX_%;#~0GZfD7CRj;qZMpZiD8QM+EQWQtqqD3~@DCj{TUx@wz9xL2SM zm=8L?h{=MDu4Y0~I*_+iV50I8sw-8Br+2xaB z47DTQ!#Snar;-_uJx||h+j*z{+^1(>*LC+I0@w_z#&~~bBmL_;soPg1X!3Xt~2s)gKEM*zLt)BkZFo@A=MQjX2z(e8|L3emr1 z@p*ah%5!Otc8bwgp`PWD?h8O11~Jr^Qj1x#LcAe_WM@dyOh_1~yx^ z7O@BdxnhHj2K}{TosjpA`}ML8d8DwZJXsO24_ZzEu%k4J|9CT(jUsPbp62(T1mRIW z{n~Mk%H|n#pWlB62|6OxJD!fqf+%C11P}UXzYk<9Rn6}NeKA@+`~p1jQ`dFYbNccl zE<>^2RU2xOM8{RoN060PaLAsM zrnubN(zGWFK9-J;=EhtvpmFyJ$#ZR`vp#;LB#ogYPB?uC(jziMDH4?{6+UuT^Tq zNm|PBrlbNbu~sW_{hCYV9;bciv6S967m-H3vPK$^xP{4dDo6O(ABo{YIXfZR*EV1F zo${H@*@jPdWFS%aY`H;Yt@Wph_tTA1G~ZPyKC@9^ZtUGhickf9p&;mK{duCh((`fe zpQQ!2eAid;?>{w_dVM;navfkh1(s=4-LcvBd$?T=;PgqH;Q4I#hh^Pn-I^}@a5RkD z7~FGn%2UtUELQ)vp4<3X6FzSg6MLRA4|EWhbdJC%s5Y&_plL9w)DiD#`@fs?pNdT& zZTS9a*ijrmo)mnitG6Bd+x7nTtT)5FAXg%13cgf|pJ{>EP13Qwtbk@Xnd7&-)23O) z!l%;0C)F8q#91dEKjWQn;xzj4dUY0d*S_I#LeK8?U_aMnXE4`brSWqs2#4mcvuHY< zZYz<4&$;M}2w1-VWp!tQTuU817)j6&!$OY7Vj`9EP2dwjv^IfjQWcyhSXfyu>e`8i zP;yMi-TK(_FVJ`};!muJIHCT}uCGsfZ0(7r4N)D1CEyfEhY8cArZt!J?am0oHDZ^= z@1~8iSA=V@$6chOmw3IlFn=V$Cphv-W5lgm^xhYRgj)RWngdWMRG4fptLMPK9`AM! zLial-qH|ZEreel-_aJS1Jp%UkaW(uM*4ic`Gk0k!gp{ zUMP;G&>!WNF4Km1p2QR2gNN-vceB7=f=ay_q=9gx+iR3Acj5JKu<5csKB*pSdm?U= z^mShw;Qc^dbwy+}1BHZEI;cheZMed6{d0w*$@hiu&j_=OS?5`uR0jfsb(^hDpAlA$ z)`5d)>PWl>=50f10#(w}Kdv+7FH>KG`A^$Z@;|oUWhoFw$MfGdju$0bjxLD@w?i>Q zt(!bhIuCK92X}JSn7enNQ)$SbJjs)9t#ny33@!cY3lgnurp*(tF1gH1)Sw+ZYI0X5 z9>};IYm`1&#qX28nfJkI8*g+3T0ZaFdHS`&zq_WOH5zeR;H`h zt=eoo)3n)t_?Zbrynxe~W`mIwX+6(SjP5zj&-L2fYK(bg$LQ+y(#0`dXyUWaO#f~a z^;PJ$Ogq(t;Q8*fJM0W{+btX##s}Vp`WCXI6Wf$jug3&8011fy;V-T1$=5Da7BBhAs;+K?Z${>atxI zHP0~2qyNLcpR7MGqXw?a3?y2&?H2|3Fw{$Oi@14Zk;raD*wUB;<~UhlpDAmq+FooE zOCAi0KYQ95{wC5VY-8(=_sXCa19FAuEZ9PC?IM%iSm4#7rBtNj{q;A2FefPxe>QJm&-e^bfK3XMS`?$Ui4Vn8m!VN&H~_w-3o@h4#XeW{rUc|U(qj7T~U!| zR1JQ+n2vp!#qVh+A{^~b6l0fPqP()4T4ve~)xer)jDpSB!JdB}70XogMEmrWu_oI_ z7WJgqkn^}%|Ld)Zps^t(DSFIUepOtihah^$wU>!~sO~YZ*{6vOnY{YazWcQ_E`Gaw zomVU)drB*tXwb{FCd6n8y~4ntj=lYCf^REI1CCY62gwa3F%jCRnQF{#_FCR%wufJ?r$vixG#l06&S&}%GmI*81BADr ztWdbm8;Y3t$e~$U`=kmgaJbOrw^3j~MOF1PqL$Kg9kJ{Zq*U6CRVYnu?3d6LMACfR_w5S-$M;6{{};|Ka2A3B^UeC3`TXS4Ya`5JyLEh=}>c zmzCk!x(ws;SGA~n8Kc3?`-`pfJGUggkG*UN%W|I|R&FEA zE5!|hB^%quaU;^`srMWrd9FD`k8)#P*m0FFv$EBPm!@?&6H0y}k#poGvkFy5>k~;9Q@fSm#-W- z>HFI?Xgtb6`V#T?ozU;u$jW0L3oi83zMsh&GCUvnV_Rk;?nzO6&exUC^HthELPfWK zi>iLYK!wkiV`*Au?v{vPz(TQBEzj5E<@tAm7#v=F_38*2%Q84tavy5B&`evkfdz5- zOGP6{%K*wH%`1=k!sKSUlleEDNQ`q{uzGN-2<-VZgx7qk}|pS*;=ez z$ve89W@CHi|0Vk$?gA^jsMfhr>tIS1^58?Z>Qwk6HkWDE^?9X;Z$GW`sr!2QToo!d z)f&-Dr-#R!K;{B`jPPhAJe^TsnteRsvGh}oXX1gcPV#Z;m=>Y}+ypcOU!yw}`ZeCT zI$f8AMi{0~s}47AY7PsYEtDdsg{c}E9pjkerw>jN_sPx-X%g(_V+ASl`lS0OhjKVJ z-)`m>izYVGMg;|zyLp;!1t~_H2I(iDI0M;^+}6eQHLIEk97(Ubje{YPPQ2W(t$bh}ri?v&-p7h} z3MaHKfWMzeNr2l*m0=M@Nw%_{#fuc3b?%T+g)R)%GSq%IA|EKSS(&GN{Yz3MF#?hN znSjOq@M5SJ&G!rv75SuZCTU?}=Ri8CKv!sFOnBhoYY$4N!IT)*ik9g=pN)}qKyfb5 znc=Hk5@{MOFU8zr{n}!m=f%S~o^@$jH=_Rd)F5nRn63@W_v@n-D+j3E#ei4CMN?w# z@hs%1!F8v$;i7ZvxzERlkv~Y1XU{##GG5!Rj%rt_k(|Z061W5i$S0-miZKU|DV{YI zchi*DdAi-FImYs_3lMmy+m#$odPIqA$c-S9{mT#N|0%~QXs$j3Wyfos$!?}saG~q- zlWEjbr%=^P7gs|#@}R28ngbA5uou>tNUBX@T8B5YDR4r*yHN7U{gk>75qq#me1pPs zMPbx9u>J$f4~Bn?6ydi_Nqx?ITK5{Pz1_~YCD2&`c^I0nWfN3G^#9IOKHy^~^~=+u z;}(EZNbPK!&px+dKnSzY+ht2brj@XK)8_vZ<@KK^N`c}Doo@!%C~8-s_CfuKX*t%$ z!Xq6w*pS4lG&kX&r{PyK8HUI&40b_jUQx|*6aALVDYm^^<_vrnRa8eT@wGAQ>RK(A zo1@pJ zObtiA|4clgemHm_ndG>>=vB|0IlUXS5IBm^+{H37Mu;6{G_2(+m8H$p+`nugJ7S2h zmAs`Kz`u@Dg=cS9GK=GxBgRtg1l^hr=-~E3>&3FoI}e0C!C31OrNrteYmkqNI@R3a zgqgsC$q&AL*3J>Y5A9C^-g$4a8@6jw>>SfgyVcZvDN*+C*PB{INTck_Z+WOVlpte@ z@)Yf{ixOJUcgQ(M`;*7v97P=5+?3v;mNDw90dh(v{a)PL8c!{7s`1%>HtHkDiiIiD zudjPw9}9E+@dw!5tsMpX*o2#!UjOL>y^5I+6G4FscKjq{HeLzr36BvIFozw<{R0lZ zHB>6)YQ5_}?*7)MqY>8f>w@5T&%D^_vhQx9&xTGmE@)j^%#CP3r&z8k7$Cl9FS94) z4yf7%O35J_%E(QXrl3?JNs`CSx|gyZ$;162YJHHCp^7&BT&W7sXH|olDu*i1u(?)u zwj*c$62*n1;UJ4IR>oQ(cm`FSdzzQ^aJS3c_9w<3Yxf*8-JtG=F4v*p&NMtO=LqM2 zX2sU?tY`qc_Gt09lr#d4EuXJ4RvruIJ4mZZyYKn^RpyVJ>}A@Q202rJ2X%q;7g5P3 zvO;SXOS&TMX8uf46=(RO1pKQ8t6!Z ztE(~5MASyS`7dfbXDjWpy)pLf;e5(}Ow#0Ul~c7JZT;oocn~!d?+~_e*P)Awc{xdX zslPNrKq|A?Z|b*noQsgNYE^Ty=hNdM_`HDx3E6;uOVW7WAtyY?HneB$7Z8hUR+4Kp zfTc?)r#q$AXfWMJOVi+=eoP}l9rfpgFGFG8iWW>rOr4NSGY!qJ2fLERP5BVHG&wvL z+8?4S^$?&DNg$x0s(yR_}M~e|Z2X$*D|RRbo~26)}C;jrf+?*6K!0o=Mwa zg!Z7uNTV|(*)q)J2tCm6Ry0bI4p9xLqm%IL!kY*sJ9u*tp}JT?qU5FakS=N{q`oy8QcpIy8W^kP!lm#cS`c4#0!bteN&PhsT3yhAIA9Ny}VdIw-_^;SKj2@ zh`wXcd7GD^#C_^_y{Z1VoM1qcO!C6H>4>>^pA&VXC>(Bq{^BCCp5sqq zXGB|MTlJB>ZR(nQz-umIQfyZ5YPZ@&*XSJ5uPcZ*10c{iK8)OR(Sp~aQ?uGrnAHC% zcz6@!TN$$c=Id)?pE6W1af}0l>Srez(z6_C>*=@=bETG%nU;i|7V3MQTl}W){yhJs z8Bfll|0lp@KN-)nz(b~42|B}L$QkcorxO+<)gD$J?Jaoj#lw9>wBqlwqV@UiY%6aM z?=imS4k~Qo$PKiA&uIo?^@+Z(npjZW=L4^|>@WX+Pv+hNFg zqObqb0u(8N~97QspsLqRf|A18ZlMQpi>c%=_<1Jre1V zr+B=~dT)>3b&?c-Tnaqc)N`XisD%KW3~#l-*%>!_@}Dt zITYo0)jWo}84IFc4ef=kcfY%)F@<{6WtrTO*Sbg+9o8tCCgU^!9I8KgaDC$4*66qr zld4t6&3V4l7s{#EM&f}Mjl;5U|Gop{B|YbS2mrre5wVOV^WWm7{w`syr^)?oj_w~r ziLiaNpEJ2XR0TxrZatovHR(ie2N$+3)Me?o+MPM^o`;}b5;#V6wev!H$OsDnO|%7( zEFz&E1~w({F3GjgM(PwVwk(~&Hm`P)XsrMbG?&#`Bjdv~8C@9)=?d{#n7c8n&9E}k zu%7l6keD3ugkj;g?l9%Cd2bV87h~^lU?xz17#|;bX5MA>fSXT95pMSvT#C z{!mU-O2QsPWs;$AI^sG`KVGL}@1B!C*5|k1H<5eL8!$s1|1wG?xapRPZplm5pK8SG z;k5>h-%){?Pf^@8iT_|myw>&bL$XKW2oa^!T=DU{lcocHxC{g&M$FIUYTbO~UF7B{ z@En}frKNV5z}^X;UdMc_`c3!P_Z|E;0UhBBo?{+N+1xwvy@+pQq8f&Yy*iw1k@B6GbverT&sK6(fK=~^hZGE-Qxq*T)cqRxyK}Z9->)_`-ObY#1a!d#p-w-ALR2;AUM|V;Q^}%O}G5y$Pwvbd~q@D+NF_m6)ykXM3mXM~h zOtHJ7G3`BKK~l=TV33nfQ|~>`$}LIWS6N4FF0LybSohZ#cZfB}4 zj3Duni7qAhRvZVzPxhU^)#R{H;K{jO{i8}E;$64Q;TN-JiN+qH6--xI4eBe#a zbn!+-ib;FBuF=?+bT{9>k{(h7eZ0*}YAIDEZDv7CF3S*u$cMB}KCDt;+-tISia4RkMDQYnd(|un?EDMdwLNGK^bWzG1lkb zzudYyhp4#@mag08tHd!=oPM$a>@9S4-8Fk-k1`C{jhIWMT%FAwycmBDmMFeQAG0O* zso{eoTP2!9Q#BMG`O#7isDl%$5gJLW7!BXlRN9x%Hk23a+>~V9Rk>LRiI%?_jfU+r zW{4gvup>7OAEJK#GUlnA09_1FF@Lt0E`RM4THG*LnotSAhvt3Y=Qxv})ZX@aMZ%Or z3)JNf`DBnGBK~iGf7pQ5b*tTrRLq;G+^hOrYNT}vi199X;@1I4XOKPau+HEw_41lA zo2>3uf3MkYTXsz#c-S5r5FoeN%N8m)X%$9`A}0D;D#Y;U?~mA>V(WS{&E@a1Sc>X5 z=`2754Coa2EFs7$gWpqG@6O(BiP}*Q{?UiNu7D(T2$RI1OWs#ncEK;gfxw-#Shv6*P2A^R8TI zP;2)Ye#kR)<@-+#MoJQ6B??=6f}erbF}d7ZH7Q-MZ&T6uZ)^?p6MYrmY>WZvY1EtT!I*aXwbiKbFXBt=&L=%K02=9OC>d_p;nrekxwzMV7Ifg8Z@YDV{b&sbB1R}Kp$PmwRfnTb01u2mUJa4X#S#sB1B_@EV z5E06AChvkLL3IwxGut(*W6h_MslFgvAuQRtV*hSxCa4>n0{I8ohXuV3g4q(t(oB#C zu&(>{cL1WEc$3K9?!wJOXK=P zdB6GJ#Ec4HJn`Epyh?FhR_m+T-nA;qtk(KAmRXEJj6#e_H2|4>3Lp)3K8X7Z3yQJ5 z-Ap>cJV6*Bu@36DPyLsglR5&{4t(fn+i+M&kemeOzN7;Q_VJ`r1C&_zq1D4`U=fvb zPyvC!YAtWpNTD`}l#>oNNVFVA?GF4hu*{crUvO$21D2eSMg$>km zP5#coH<%N?xm((PiqhSy9aGx*7)xz}FXGIFY#Pk|!-3CN6U;A8@xWlE-Lz;Qt8)TU z!JalzbZ6o2W-xdGt>1wmf)U!@UC6*q`b>WiUp4x^c>*uuM&iixj509J1iVh54Wuf$E4=i<$$L{8pD^>3_r+3dCLMm8PJ)t zr87Z53WOE@2}xOo@_Tg;+rGfEx`{Ye*i1@*Pyu5KLVu7SEA3ZcAfB*;|DlRC|nRrn|YA?4`FRksH=004+NHJ06ae0O2W*XPbpoc5R6 zTlcPyWN=LWOFZFj#N=g@H`q7-+)7&;bwyun-dlPHd`OPRe=|{c-FxBrXSFvb9$Vc_ zUAySO?q-w6l+i@UWn`3>j4!4tlwPV(%WyLAl9Cbvxt86No}ubIV&Gxlq6vKRvaau_ zBSPbsm6?|h`!3wl)<4dR*S^+OKYP1hd`w|7 zB%e<>86`EH_c&ezKv?JIU7mYiKj-tw?riIf01oe*$TFM8%Dttda}=?T9U&PZROLJA z0-TXm-l@bOZ))O`?)1)d`E-%?Tl&r^j_|F5GLug_$tyyC#;e<#RzZHE>A_!+lZMK6 zSJxK@F2rqqE2_QHT**Zq$m|I`VAyv7;0TQ?HAbvzl|fau!PVk#E_r(@)G%u}rqy!W zaHIRhJrYGYs-Ca=pG)wSdT<|ZVLt|EgMa;^K>#j7Lr_IE+qBT-OMoSk@mN?}mdlTz zZE@!T2TmaGE%0XNaB_l2FXClR6ZqfK`nnT0skJmm9Vu?w$J)dh*!ckP zw-^+-eC@9b!Uiol_;X0>FOqNy%aZ!(IFobd%SoaqWn~|wBS;B9y;fnP&u(?gmH#x4 z6@x`EcUihJ=@Y9VlD1ciWGN>yIXO0`O@e2zVE;A z<;q@rGTF1Uvpc(U&wWmeijpiEG9fYy3=Epwdnq*-7}!u~$paxkC7GuPHqZ*zO-)t; zrfQt{FZ73$g|?ifq9P0<^cn;M8)X9n{MQ6p2%!ZA2Ce`W1`b-o{*x5|{_nrAp#^aN z?>g^aLo53QJZMF1Bc-eXtpWdJ(9Z<4(EpzrdQEL`sqnD?S~JK=K{UK!k8=_4vHM>7 z{}zBgO~nTP@-mD4O50tfTH6cIHkHEqgDFC~ zNf`ghVCZH2&S{Q#|MX=1_;mGjRA}N#)T>!&_vz($^!W7nSif8onUWkpsUi$mHJLJ; z#JA>d5ST$w1H)oMzs@=0c=vpmkANRD2RP4bu>V(_+NE}Wq*`_hRC#&=$-boP{p(^w zB!mf4&@_$l^g`CVJmaSefC|Y037Fc5ui+k#s>_ywdz~wo|2jTH%0UIF<_6AqimGV- zA64O9?)R9po3ajMThV8(l0YeOpcD-76+znLUUgaEmj>iNNf#!7<(%qAPvTNw235xh z+P_hPVZr=ZpAOHzH6>yR{7>KoB1Y8uD)?M>vfsAdAq-V|o-8iJF9O!Z-SS%R>4pLS z)0BTG#QneqHC_q8)NSu+j8ae#_5@xp6=#y@h&0&r?xOm;U)k~d^E%XwU78v?g*Vhs zhXNK7;8b%!65Do7_EtClCyXf!z z(QL4x*0@qnqWO@)jRhNqx8N^COv)sM5`@e}zfxnn8@uEyXIPv`9UCI}0|LneHd}MR zA))UUFg;&TkO}oqtWa(}7|TwixsPN$wCC#30;`RrWL+D+|AMEgGZlo#1c$^S*~dP2 zM24a>9A4@6Zl+a92#1t|X+D|F+^SwI3gT_Up(y>z{YD-oRWJk;{Pz5yqOq^>^Cg&e zSub+SuWPVIOy|3W&Xb=4LC(lRzgDslOH|9cow75YgoZb-R_%1S7#r4- zC9vx+TlJo-{gSv9k^Hg{^ce9Jqyn!`)=Di z;$xLBlp8!Dej5Q(~`IuDl`Az`g{}#oRfaWJwT%$BKFag5v@UK0I!$#2?JafgT?hp$-$+l2#>_;}So=R9|y03|}ovH8qNX$*Prsi;0NZA?0 zU0$f2L#6vTPe8Hn-aPJ?sCG^A%)4W~sF7pewSdGN4*Slf>n~2{b#YfL{bc3Pi7>Tc zYg5qS7P*%wOKdnOuU7~4HO6Py$kHY5SzF&6HkTKP+qiZIcX4o^jCc(LkF2^+0@&n+ z{`La-v%4BNzKDqCe{`NzS$1Z9m&J+ipqKIOuXmLBaMA^vb81wKp8nuuDoOr!BL{<& z%M0Z>`wCB`25av+L!XIgPv~MT!>}6%!$5_@;U7WP-!5knb zmBG?+K`NiN{p#TBU7(Fw81TgFzhfn~Ay7t$xiRBE3Qse_+lqY_bx7?v!9B++xq327$tCLtnU@OgW{ZDRN-jDGL#OW3OubTQz^lzvAz&cY|_F`0xk=T znjK+*9$=Hr5? zdXkyV{Wx+dN7h`f70I^B33_ShZPZ+3Q{-*<{rFG}IKNmQVHM!wxn4dQmBi3V{(6?I z2?0tVEx6l4`WSoY)(MPdeDQi1nh%z&Nkg)*mwKykFi_tO$d7W*&nT~ zDSJ1GMN_uJ496cIfOVTD*^yqDP#64QENjnGsa^lW)f5hG24TH?7Pk}5rMp?Yy%DXq zI2`T*V%q54h#l>ef}l&h4tIezD=xp`*SK&oombJrZf-qn?>i@x$}C3u)XdTXpVP`t zQ5|gsY5yRKCWvbKvO9Y{rIHL-_wvR@K4$y9zy1mMz6m?FD-t*DCc?CJ(%H_l&Uo+X zFfpep+skT@=@^f~&_g*i5QPNQ0j?6k!b3K?;xLk8;fW))xwGV9U2op@?SD8|<++LL0%>S1)2uLfDH%%rnF3NQ)#$mQcR1KlPN8Cm+G1gz9alMElOk6nTgh#3upSVtLPNu zV>&W!rf6|$*zAwwPcnOZujon^+$W=?&SdgMQRUj_oV(c;&rHVEC#xZ2M4dWIhHTZ< zn_5{Z`a7_5=zO4d0N>%qf|>w-{5?BujD#qT@6GWf;ngM|`3(~lG4J9Vg|*}Jkj#f2 z8RR=tN8tcLQHdouwq=O=U-k8SLg(F7Gkt1uB_;Fq*tsfGbo%$%KaKV5!o%OW!7r4O z0}6rsm7@)qCuCVEWJFpG8#i@i)|9{6`$IEraz_PU9h29j&b(_j0v)j(+HUWag6ruN zi2nQ`mDHOHohKr_I7Bky3zLz^ISbB0z=Uze@IJ?&Q72}E@R%T)t`E4HHir&=%-nQhysim8BD^}sexw%8OBP%JW%oM? zoqN?eVOk4d9$mOdp=2Q(`KthGetre2N7RydQ;61Gi9cHdi^AU(x-RsA28l5bGI;}x z?W$`9pUA#^M3l$*M#}u$bjoFRKmWyB?q{|h|ECw0gz4D_4T9Z6Ku9qQ;|v}vf8OsX zWtNOZ_o8@1j?Z}T7TK$2Jv_{4%BSjujw%GdZ`nCV6MdI0zjSjfE)WC!Po9~|4B?TN zwIa()+M{2WL$&aGS{#m35qEc`-gk8NH}PldFN%?MxPs!m#G@ofBrTBr>AJ49&mCnU zKuVp==Tmszll){OX7K>*9X(@{P{7HjtH6%JH-Eb%aYC{7v<|8O8(Q}ykt5x zjNQ8|!pV2%)o$O-v|;(^qXOr$)UI!RsI0n`KPO)0gKZ&H^iztopI(^{q!2<>g65t| zRHf&0QSrYaiFP??Xk);`@8aHE(JXj7$aub%s2aO5MokDPBu;nb*sC_7gEvr^OK?7I z$NSeFQ$`=v#RY$QEn!v|r9KxyRyX9mu(B|%)S(R;`@<*tyjQb?8f|vNtDq#^hOVOd z=G)(HTol2&guw$%`uJSP(l+4R zhg-S+5DYo7s4t_knakn;DrQEFsZV$~iCR%k5Ddt4A<`rp1*=ajM{hIdvV=5hy|G5B zk&gYoE7rQx*KL2W0Fo|9`k|*7lQf()tRLbhc?2;ipbi-jVLU54sh&4qLFzoK8Kh%= zlMzj=cIkPfTjxT$DqiC?jAQt>eNJi`4R>wkL_5~I3d5fYMkvN_@8Pe_qO~GL3g=Y5 zg^l&xm>KUl9{>*|4rrsb*1Cm|ggH7;a}ikJa44?BFcBs7zeP&YH{{d(ZMeOWCB2?+ zFwBkTZVd4v;G&pr|Gkx1HP*h-$yR%weFF6^38WfzG&_8Yg|}=y zL{NxpuFe5EN3Jy7Ww`2K+gKi(v?Tc2u@s6I)ea5+&V11Dj~#`1wEE(ryR*)6S=kuo z#TX@S0cszqXcRl;%b)*m4$v2LorL+TT+>X%UWkYee?9cuyf;0(3f$}C&kXJH;q^EP z1#-7hqUY;nkY+F43lk7$6tr8)7REO=4ZQ4u%R@m@@4S)xwiuI9o-m@Rll%v$Q8XIOD@bkM1akb)#k)zQCAVIQdIW+R@wg}$Aj;yc6t8K9Up(;&*H3;TsS?BK3}?lreW ze3z|{Ek*uW-0RpREVleT>oFOo9K~XS8#6yiCbM0sS#8+sROo6kt_FYoUxwH^+oLbscU0#JoWEDs$rFl$WQ&&5{;o*0`pz55$*#F=r%SI1)UJ zk0-K`W|20Nzp@f6CVTMKv-mR}awS$Q(s$BgZDi+_OGp-m6{L_u(SSCS(=?tq1kUc7 zt`xTf?OSrl_tpJkmWG|b)pf@G7sq{E*M2aUzGJ`9Nsl}@8>mJqNNdjN{%Wi+pJ*6D zp;R!}`?*lhVDt!neXf5#KO8SFo8j5ya99Iu|@d891~rf*2H3FdG51xH_cdB597^()X9^a(kp9}|6;3bn%>V`y4SCf zL+llEYc1=(rNw2k>Yh57)?pgNPpkM_AII4Wk-*i|t*4`slSTyr1>9W9N&d-Q&s&6g zCxJ_wb{n~dEQu}aM&yd~#32^~TAx#3qZ&T>@`(#uL0p*a?%e9aLP62u9{@c`9ZfEM zFCDZNnHGv`q>*pSq4V)*&Mj=iEnL5w*lJ(yRP@RQO_<|i%l#UkCK&1@>lA^*62^4+ zy2~wFfo{z612rr;31(PL`8`hY$k~Mj(}heFYrme62|;NT!~m+E``P9G7@~h91p^YQ z^rJ5ti~afu!w9q8Wh{&K#o`2~g-1)b=b3f4muZ-Th708ebqK{dV?}*+^NAy!+>Fz26nk-c@y^~7HE-Uk!LxY8mupd)L<zc^Zv2yIPQ;HzBx3i zN#r{Em*{hn*9cyM2sNiBO1bEp6?B}3cg0xvSM_M=P|S}`YiLes6hw*WFEthbo2d+x zVC4d#uhb&2z>CwEiMj9iM|$j(<==9?PHJ1tNxASzG@?jeQkrX&q3appxzU*d-g2u)3?mZw-BD@9}W%$ddbYHh+)$ zp(8dJw19~pXU+z>5lk<7YANbop5&TTh?X~Si_2!x$O?yzZWrv0@_?pi$pd;SD=ryP z`~g6Pf3%PS=vsVd>1S}uc)#VFL@F1it(9rc7OR9Y&a*G>r>%(;wzJWHDGD2i>-v)IPpT5qlhRS z)W!c9K$(OU(x5K=P}Qws&18)c?S*}oYze;Bybxtz7qvvtb`^G*Q7pHCXA;?x2IwXcCx1@rO%j3U zwR|zRe$p$8V@Tdf)|0Olt^o`%Tm(*;3cstMxN}^~9_U90c|8gpm`8iH=-=*WO(sun zPEt(5PQFgAO`d|&_18%sF&k(a2(WWDTGURbl0re)pTw8Gf4$m3yJAP9BZo{TDT>l% z;}+dVPKJ-Eyx_q1b{N<1j47s#y48*&X1gP3o21 zrWVQF9EPZzfJ`~*3@9(`Ri;>u{M~mTSkjQSUBbIN0cmSu7}31k!)!s4UMBWRpFUn} z?++&;b%{EI0meTM0gmmi$% z1yfKbbUpW%|CyIKtg?)vXe>9fom+DHh2kVsf{ce?9~d&b0Y5O~KqQ5$F5M%3J0N3- zw79@S%Pi@@Bn;buYVFo;p!_YWFQU3_m$wFOG>BPxd%Fg0UUrD;88dT<+nG13$_Kwl z*p05MP<+~KTt`N~@s=cdAWv(eJ$R#~&BjnVUU?k~m-qnss7#8x`@Zx(;TFl?$KGLG z@7@ces^y_ku)`E*%*nEnIw%)A z7~jP*xY(eEaN#sK_QQ!#MI~WqztdPfo%lp;?%|y_`eHV*Q-1)9Q3~fo0N9oL=Hh0w zQYDg7MS3Iu-cgr&vM=Sdx;_c)K(g*^Kj|nofa#@ zknJWTNJ%d2wp+Vq;Rn@<1=nLxcV1n5e|jw_JO+n()KXGybT_j6+*Szxiqo=85p z-c#Xd`z4--!^4J1=YBBAP8}Sw0&@1vvFR!2GhmA^t*S`we=q-BZ2Z!vl6Xsn?rL!U1Jt|9m_dezr2TwtH5pt!uO=!5@NSh^q! z#wdiZGGkxUD(UiR7I$}gO+Y0o)q=^V7Ie-gqjeD}{;{5u{ zX8R|XMJB{`{QDk?ZOJZI;1@5N5RpfF){tK+?KTE2b*;2)YJzMEZIG9Ov;q$bQQ|$6 z4E=iRpy;#BjK@KqPf$nJ0#p>0;9Q-=F>lT0*eu4q5zdHG5v3}+fR0hr6^?qi;jSJO z;?AWGPqF3)t0}WXg*U)Ne8CztHsr7$UTDf$#_V)Tr7Ej`U^9feq zMSw13Y=nD~IoKw8>s$7Nes9?3JVT`sKwn$G)+gHrq@pKe2ZiZCsFu zQKuD-3NbF|aPE?ZIMYGrn)4-)%p6qy)Os3s!QN%t?8^*G{-O=q5LM@qCc~DTgb5s| z-OvLCuF>KBjS|8Lg%PjgxUY87*SM~x^dwom_uYyB*{;eB?W3z8X4*ENmfeqkK<6hb z+-Pk41m}mP7cZ(w1eHwQp^Yqc8 z1`u^+2v;9`WAyoal7mq8GlX*Xi@*IJl5Q{MaAHpbX0nyxkHFtZ$B|<`9r!6l(-^T_ z%q#j19&ufw=XA&SPwfsxW&_%%so`CxHTCc5!b*)X)Rg7*5Gt zeYDL1(t-rexSvDCfKv(hNwczz!e$W!p)*ApGc=$ z3?SdLdsHZ_gpdQiAiYMo23*s-^Yy-M?R`E-DMTsYD!iEFm^7ILMNj-_3Tq0Ui_#21 z5N~Lvf(Fv@ch);Y8(b>ph+R0UI8w&y6243%U~H+bFXDN0aI8e#GGk0EiYfIX5+CUPfhRQbq}ibjs)a|s z0~KrV{~#Hq3MGJ-4z3FJjlXyKo+7FL1s3ujtQuA@_QQV@)i{H!2`z}BZ5dtNg#HKj z#DTm zd-9C2VOPjhh#MV5FudDGkQlVkLDu^QvqrcC-pX&hi@1O5bRduL2JFnhZ@sxPBUU0g zpeFxSf&wGRr1gRK0e1Aj0p$T3IB|kxa-D+p>6MckV@vEM0G1`ZBV06mEtoW-Dr`Iw zJ;ZxO5b`grBE{4u?5Km=CuzrbU)$t%=QVIJ)dz46=Z^i3cpY0L;b*I zG8ruNQ>4(LaIB!Qpj*YOjA~}I>vG5erZ;8PcXAKxu-kcw79|7e3{?sp52lr1nfy4Z zILUl~89ll$ekPGG(d1vRFo4xB0(LNh`}Z{2ISHnEDlzypv?H|cSc)(WuiAD!>=jl7 z?E?8;Gun$ag?z2@-1b2`I@i^?xsI#j4Je5JqvJ&IL~0+nNOF1rz-ojvw)D=2u&f3nY`bSiqJJtKN%wC zNs1WsAI&lDOOqo4B$G;&0D`dCFF+LsviUEES(1AHp2gCHq;1?Fs(4UMdtJ~=l4QjA zE{~6BGL=e`O9JF6*%Dg66#f~JAt|j9bk>YKf#}2pdjXfa%vkSn=2{vQ^@lYOTQr*g zr9ki@W=SOq@dizY-qN!ni7M&o&DL-qC;^688-nNg5LGn!<-QVoj}7!{y@nh-SV@2b z<{NC8J(|JoVMgC9?5hqGzekG$0NY@?Du_)dep)Shdstf~Um}(};L{dg2;7Ef`aO#o zRr;8qqugPzCFaBGz|fN*u+3y0N9A*55&xFPo?sUqmEW8V$`TF0@ZH8E#I2B%&vCJ8 z+e!^_{JgGs#0C>Y(M99ulRYX1;V7(T;)8wE6e%KrtBC^_x1>X zX)c87`4q78YXW%BrX&l=muy0N|F?HMLh!t0f+WQME?qpRMHJ4p5OV~PWPtgwYw6V! z@p45L;P?CQT_H1J;w4yC>#%E4)Dz)yQ4FA;7=XO)!R-^DD2UHLzysiEe3bl$d|EAq1F1S;NupgERcCn_k() zqZVC%O9O-4s-32*^D{BV3)a+#$zg@TamCg3UycSMcuablknx&FJn&nA(1gs__P+TW z!7eY`mg}}qP->(&o3<}<(f5MG0)w*xqQC21Q`az@Gj@P>xD6!nH^LGuaVnwrM#F?# z9%q#MD9XX|5~xvY;r=$Mm+Av;f1rM-&loLEfpi`5u^AHYh|Q=x8c+@wg;R%^q`HQM zj{rD>bnv`?C^uV+6LhY)6G?!9re#FhT(HB991W7MOwCS4i%o9(!-ev!IuB!ccIsSgkd)F#hS8=IF4bv7uiTxI3o!AmsO~)LZ)z93lZe z05Ca*bDlB#H9P1nHmH{l4^|m4ssC{ii$xE(-RMTcQ>GVAURmr6+9k}9qP;o%_#l}` znr5^u#qImOn6bxXomHM$l^_&rFtWxAE=P)52;nGn)s=to3Ya6C>&iTlvXK}H;?5Pv z&_1V5ZTn*y5c76+o%nn90jK46&^r<*F2R7b#d|CV>?_%HgCjS!&=1MU+b#F;F=5r)rH}hl zbBlmtG7LRVj5kCWn721k^EMM07;%_?FAbdpATE$fH;NVAt@&a66$#&wmq2DH@|qF~ ze+NPee;*7~6$cg%!b5;S;Fz>TGA%hm5@qN$?fa+csxIkIHo4Id$uSpThy3*w&Hu%CI@?DmZ6j6?*fn#SVJ=yW_d=;Rqr9 zT|Fd%sfqdQW^86>$5MXONbsK|LbA$k5`$GFjO|aB#&eiJ5TL%>!4bpPovIhqG{r1MFt} zA!o-xCFo$_OS?2@@V%!LyE!M#?sM@h@e&r1RuFWO5QA zp=!qXwoin{BAd6eYbjaWn6Tu2Ftv#xvJ|LoX>0l2F^yS(wkMsP zZgR1>wOlX{x^qD+>F)wgyE#=~rk1!CbS`t`Kq@N8`oT*T5#oxVkaE4ocNFA70C+Mu zu|83aq}r^@cA=0?>Oye{Jv&UJKT1uO@oe(h2TTCGRdDh3u9NLisP9ch|BsUlCFhRZ zF2&C(1?1Q*c#Yc16=d9YvJAqVfi!TvBcJRJ$094>}Ey9t5A)kW2nj*m37yszeFeaU#bw+mMdyt6H3= zY^x{N7iVO!K~|{20jveNAw8XPi)CNqKJ zhpcqw^v{t4N+BdoDO)RhV^~8lJLNywjaKDKxeT&ZiWfbFOWD^a7g|F!RO+y6>L~Zt zyHM&N%%SX?L6X}W7rYUuYqtfh$Xj)Mkyx&9$n?UzSNklHm*4s9d}U6n!IkzbjU zIk7nMJLF)%PZ$|UjlqnJG`K_stR#DEpM8=0TX;IS9%_#{_C3}IPNgsT6v!GmMviJt z%tCz}2nj={kr%4TE-(!5>0yxD0qn?t3vR|ZL39}sugraOKACQeaKD!*K)kar*qA5S zZdD8R6!sbZ9AP5})(EBpmi?M?;tjokX?`7!6>jo_6L$f60rvEhb%QGSS(Q6-Cy_ov zUUI(K(SdlGcUvsP$B|yzvX55_78N1M<&E&1kbGF_m2g)CxB!cf9{d|3R}}O$O-4|Z zWesXWkqUTaxhmJiemU+9xaZSC-7>uX(ftgJIpamFAM?gO43ih)pjO5B3)kTq$Qt>*-;Wps{J-z5 z+-&Y2v4|}smz_|#zpM5AcPrq^U0w+8a%xJu}7db-!%z2&yMhsYrV^J=DAeObU}ma>wZ z-*JeT%B;SUO-l4f!7FGIoD?Y~gi7`6&@7%O21|H|Kew3OJjJ;4~j{mWRmy;(O%aTc|mQY@~Oy5gTq%eu(Dt2G`zVGO~y(776XZj+b9r!uIc*S3GQeF z_SqGEMqoP%t>GP@v_kI?m57@ktRn7yHZ^Or){v>rvJ_uD@MkV}04Dj$foD$k(|!w0V-8*Fp-Cp~==L*6g~K=t>Xn%AIO7 zAhO!W9H|6$Kl*S1kV5neyE~)uR@>51B7SJkqlGzrWFIG-EpI(jTfZX|Cla4hlPBNV z`Yz0i0|7^0TQ;}8b>ZaGmN z!wOCmG5j#jx6w{OPmA@RRU{pw1a2E4K1hISCc7m z%XI8WnqE1j*9)lLbiArW7Kj^I!6P6^l5`~!CmP_OHy()~11H4>4oH}6p*erL!bW|a zm)k~rT}R07)4K@{mV&TC@9+ zd-%BR3_^Aa6qrYetc)xcB&k$CXIAw~(m&-#01vV&Nbh7#KAp_|`dLpx)XDm7o}{zh zvX;wsp(YdrK!!i1QaQ4g>NFfjANdtKgot*Ly`sM@gx4ijW?H0FHiJ=(e79r@XOIz} zx41J^3Pl_^)(2CWr-F`l%bM~N`zChcSwGLb6UWF?$uQG5bRTzb`~H3s^IwiZ=D{ z!4>I217UDwWM~O%nPQaI16S6;z7lKe97-gUf5%~M`98bKC$y8mKR?nW3pY>5PSI8t zO5$gqcs)`-kWQ=RruQ=lEBA7`p@2`n`^RXJ#Fa??yxkRiGjBjl#5Wl;$5YPMccu{U z-gX2Xy=t^i^rI1}n5Z#X-_oCYA!0MuvQin6NQ1*oJN6-H4J6jGcqH7mk36A8K$8wW z@;C4^$uw;UV-iM#6WPHFxrc?onKJ5OJFgpgw@(T7C!MmxLP2V(fRD!14X?R^wi#~M zzcbM*{qYotw;OCuJBL2pjCwjOonpb9&ff}_1^Z@}9X>D6Tp_apWlWK5iN1W*;D1;Z zb9mv5A{uUOP}A>>d1`2;m)atYz^oqsT1Ah_-`5dY)w`ZH#;f6^_d3XSy z)5@gQY>I8}%TKSh^mN}_2i-Dc?`x#A*U%Ilgv+VUH>0n8COc;iR>b> zmron(O9e@E|5hrv{XJ;i>p*F&*;0tRv(KRpsJY1Wv?RZ`%3eHryu-C0Uyi#<-TO;M z7p9V?2v^kkh*@E8Y($l!&u$T_2GcTn_db@*(H4n>-#faNxp|a6p~C6tM^BtX5fn9z zjUpkYZ_9Sdc=S98w!$|gOuL?|bassX;+xud2jN57)%nZ0QFQ$xg5a^Xa*9@b(qi@52%)7iCm#}Zc?6o@+x5;HMcXd37eTi<>%)lEDU0M^R?%;(hp^1DK~4`+PqWR zb6;>!;&;7A;eu-og>sEbL z(J%{cB0lvVpS+N6C?>a|w|zj~kncU5{b4#JMaB^)u`zQaU#Txn>^}*j>ao!2K}3w@ zOG;#~>5g#_HtklhquAK$DgL_DX!|s!3AwtWJiTGUxzXtQ`;+~T78ISZjY82$aMg@M zzwhv+FfoVNIZJ|3ek%V50Q$-5>R`(dwa3vOtNPAG7lmX6^CzpGUtxE@_$OL9#&|P= zM|4fjje8rQgJH7CkqqkR#Yc-~JduI)x3L9VSQ66y+@P0`<3Tu}?X#>XWu7=u@NW``6$(S3V_2=FD`;f|50{h#dBQEfJ z4@fk71?nK%%9CHTr_<;STjL+pAaf`njbl5Vbny6Bgm-RWrX zgDQSN2DSEW`{GN!-&*gQli+OsqYOJ>jq`>pf0~>Q%_t!B+jDMNKTJI3f0LX8>u)A+ zpjyY#^1NrUM}wt{w9hG&ee?|@+swR+)ogE%!$52ym56&nAH@srffdEaWoyp`ErQJN zTJBUlkUSLgJX5)~^@cw&_RSA7oZ*d%pSs;6sQAH{%L+Nw$_*$it^*9>YlydMU`fY3 zN|^4CN9rpWFxj59li2ZE(mzDJDbM83Uwu>f$Glr2KeA?P#A=SDs*1Sz{%bSd*{BzF^8Tm$} z{RAo;Mzb$BS5`8IVb(YHSC-zygbHKXn#gwF4>1rLkcd{}YN<7LPk*k%*m~Jy9E5%Y zQLp0jqt0FMZi`s>Si-F@d{#{{|JFA(mL*`>DG>^oitN8rh3S;CiX=u7xyW;Ieecd`QX`0v{l&`81j??gseiGuA8d8HA^c{} z5TjWyG zqKL{Gdgt{##rvV4Zt+uvUUX4RUEQc{c^8TUVWjMso&udIxW_#fumA=T{q7`C-VAki z5hMG4M%bj|LEFi2wIIZeIb-CORxzhub*_*8if}>iIPwQeV+E;n0IEc_nNrh4i|iGU zxby^4_MyoH@36oDQIh=?#v>njkmAt_&lCpegqCM z(;4!@Z0(MTzxBs>SiTEb+HJv0;OWHP)nx2x9*D~w$AS^CqEf>?ye!VX_9xmvfwQmMkE z*)dJQ94mls`r{|*a6Ai#Wz}cvE4r*qGkw@y0xa@q-sF)Yo1#67nx_3{qC$%Xy@bE- zyX&nFDGCoSdl)PsNxpb9i5ullFzkw}-f32ct;9GE3y8uCA5+M1ZGy}3=&p4W&LK;ppvdYhN;s*7=~N}b}mm9EWbSNyf2KBOHqNnu?fXY*12 zn=jAydKY?&{yArT%lO~HQ+$3uH-hSuW zDO5wOWwF0rog_QehEm)i&Tzb)TyuD}Z3X=uNm&BiRYntosLG7SKn~WMiaaykM^}P+ zzam_<$qa-UJg_=Hr36WqR~$4!~>m)nchZazW3N5l4ZVL)uEsz#F(3S zNBeypitX~4=??|orE&y8m@FYgNjEFrxdtr>_-lUaj^kjNp~P%HHYcW8u^^1bA-ck< z2ks3>nf)3pt%S!gQ-S7?|Fb+H+6lp`KErMO_8-<;l8chzzhsjMV&6n&&I=h&oLtUy zg*(A^`!i(}B$~mbTm^qL5FS;Ie(-Qd*y=EM7Ms*(F#hU0O^H5AoQ3z`BB^7^;^yRB z9veB?y8V%1wD9CE>_vEt*RHVOPC6sq6ic-F!5L{(qvI)OjU)IsP=d59+O zb;&TYQf`movRyxAM*Xf{2zcl60-es1kkHS@ibTBZoSl{BxbUx2o&-i6vTgC`ZM8yX z&)tRRyB)A-`}&qng72z1U=3Ucm_ch(H;qpU`YKvY%q1r2@?_cDU!`MnNQ6A4(5Fk4 zwYIveA51ydie_K%KwQ}!A5`cSl<6O+UiT;P6+PqXXE#vDz^{MG z`B7%_Emx7yK$A3ak!8evXI(8R{xAbRBn{ia0zpgj4Ig5p92}-0?CaE3TShj9K-6gN)&tbCa&xHyWCv;4o{brE|~!jg-+M! z=|=IxStY_+ZSf|(j(mj~2A3Z&S4^N?FRBJr;7(+Ta}qIW!8aVYP>(5`$2!HyHBPz!|~mb19C*jN}$|@ zM+IxyKnAGZ{Lq`qjb$#{>hYfJn{B&>#Lz%iHimhucAYCX9+%hNJ{}a11K;$ zUTv26J3@cCZ~s%G=%e+{?~O&P{Mk7l9PY5sgQ>A0SO!0i9_cJ5`T^?;Q|74^G;<4u zaB-o*s7}7`)8x`?Wjug*{0pUmk!$eBiiY)D69HM!=F^a3OrEwgM#(FjN=;I5aI57 zGjA01tKN2&k)__}elvhoX*N<7xD&ZW4g)E#I*y`jXyB8dx97vFQwn1HcRyF-=;Z~;QHLkE}=e_NLa&k zzmuYzqh%B@`-cTnF^ikQ6>`4jcP7BYqu?kQ*Nd!JPCYk(LGloJ}u`_Q`tekSR>MetZ}paZhU0{TmrkpLWwv4^le|ZJUhS zlkxv}wAY`?pnl77-)J{)dnI~3Dfx6M6Yv-*589F^y z^IznNu;h%}E6yfrUiDlS&3kR`d>Q**rIVP)Zt}aMT{XA;`EmsMvYqBAC-5@^_ti3Z!J^aL+CQ4Fp6{r)n#lWbw&Q2E*6uSb*xKBEo*7Z3H+5)A zuVx@taY67Tg$K_B%7%FzCf2>Is2SFp-Fl^)9Ww`g`7wABlH-ra{#z?((K0FFY@W z-}DgjRE<^m-2vLg)5-Ee8A}bezY{X#*&-RsktRtM2-_d=~%ng?(H6ehf0p>=wL zFTR`3d^*kfF;l~ZzBo%TZ*Ewru4!XWNoKl9a_zD$<^>9Wm3O~k&WhV>h<9h($9>g) z0?(scQilV{eA(7QZZm9P5Ic0&&@IAyP-LKrIL^(q&{zZdVlc#>Rfg)<{jU^HjJh*8 z%u>%H1Du~un(g+_zMrRPfR<=#6XFO`ZJrj{JM({Ek-}KCft4F@+^v_ZLdnT{guswB zhd0y%@c0PzwxHDp0TCXS`)58*OPu-d=NdoWNvu7!j;M1WhbpubBxEltge?_2it4-n zk(LPzm{FCr8EJt&IgGaej!jk@iCN^j3tdPcugDDiX&&Q|_iqbCe^e+PCTgg_zv_&t z!+^Oj8FAJUh`z5ddqVGs%Q56hjPg=sGgHqUAXr($VQ%t+v)fm?b4b)v(ik{#maP05 z<(DrS+kVqW59)<)?5?{{kDQGB<#*@V@%m^-l^6)Mvr+KX!os4TGt~0Fk1en;w@2*v zo)>W(?_UdC#{L_yKYsSTwM1SgobVD1Bh4wl9nqgw$pPfi;gOaDF{^>iz4s=lY<~mT z4&5B59F43j+jqzJkT)1SHd7_zB!YhjbD+03ME^S#ZNtd%?N#u8J)Qone7Ne5Cu($K ze6Pcs_IhOW=DK8ON_+kPHTBhTQ9fU|yGtW2NJy+Ah~(1UCEX#lARyf!-62RS-JR0i zrG#{MH%sTz-1Ymr_w%`b&%1lhoH;Y|%z2+@-tGd6iR7>3H=-_5i@3BaX7{bW&riJ` zMJAp3Jf25bs36t0xmZB>S^ZXMIrCsD30}X;OwN$6 z-L2N$BKd2|7`F;1(hM9 zn=e`~M)(z(B4Hb%5RnMJ$D2OknUPJ^#b={9zL$34o4lmwObtub(LbD4_o$w4q^Fk4 z7^8jj!iib9>bzCU-!)E4MA*g{HVv(MDsX;`2b``5o0|)ue%Z`Mwfyat{N7bzWig6w zqzSoK5Z$gtW7kJ+($7GG!$6 zI(SHJOVtfS!{lCE=tii=m>gT1c_JEx9TJ`dn zrw9g(o%8!P&+AK59RsO)k86%xFnIF1J@({QTY@B)TPd*#7Ui(OR*GeA?~s2i_As!NLu0OK0wr9~r<{fhWkS8#cKFEp%*3no$Xq5!>&8i!+h{f-j<4%& z;vY+3Cv?Y|-q-X0MZ;ntNcvf3bX{GpvK{U6{6FK)cZAg9Uno!bZ!;#L(NVW8qly6( z;xT~pdN+sBz^H>I59_E0t1*<*4+Y>PRWWFIIo_IsWFYFm*=Q&GZNW<=0hLceyDMc4 zD=BtFL@T>KAtR*A69f)Y@YjKG?U$=B?$Z)hWMosmu8kw86C@UBmK`hJ5m-yKc=GMp zZ`!a@pf_9*iSAz_gy%v#8mv>Ddie`lY;?(&ye_JO@)$aj0t{8cAm|l%YwpqtJilMC zv_ejJAG^?~cw9I`EY)cu_=Youp}d7nSl1shcye1t42eH)cp7ES_6f+UPSherKgBj$ zWRY`tab+n%nJ(TM*BA}SnMqtoLoA$=UDj@>IoqFIus*>fQbhGu9Fkj(#tG9STwbZ+ zm3AjOFvkwv)ydd!MAXMnz2w=?i>-CCh958cR0Oxf=ZvE*4swO_OW{YOoN_+28Hpzs zUI{P7U7JV4Qv^X#h#E7so(0-)md|5kfFJapHiV>yPY`Kk&I6vul39ebRf#Ri6|A2! zcgHm#jW-sP_o?QKVuS56dAZ=E23rT#x4iRz4uhxYKA)(a}db)7(_eq5?wL5!f{$XT0L2D`FK z`~DzH2V(=h&(;rV@+VdUkNtccV-2Uab57`shPLe|K%aLp?MN-radae& za7esoG^LbNM~G9!BdBUCVbgV3*dGkteE)l1xBLLL!_nq={Nv%&RTmto{teFWAQkE| z^WC1@j4x{AM+`Vg;Qj9m?UghsS3h+&{9y;hn-Nn)libhlK}$bQ$Bre=G{qcOc~)9V<-&a!}$4rB)p}-n1^MuhIg00KH+z1tQ@PFlYqy<)Mla?DObbe zf>E=pKte_Lp~B_2uL;G%HwehevdTSfqj;lhp~hThRWm^Nu;4;c%dhUti$KygAFblQ zbzGKsIG#+hT`k&m)X~qF6xZcKQU6$GZ%UqL zBZxonKtfyRCO`D!b*s-w%JDq1+u2N;$=#OnmD|}GTb#|Ik=?QYG&-rr$mSIZ#>f=a zbQY}WMZ`uQIi=eg(736z;XPMsO((#5LFAjsFh@Jg_dGW9<_Fu9;BrA3)OXeXH+D8m zrLFdJ52op}>xg}3>f7PlaiLuJQ`lElv2|oWyBsLlHrOHaj9Ar7-`ZHb(&22W6Ki3{ zJ7_SX>D!v=p3&&vp=CCk=!cho`y5m5A)Jieu;5!&@2hF8NbjNcf|IYWX;Xp)3g(a^ zgvlj6PTJtLz52)G7nGh?Frs}ZaGA(+a8&S_^YW->tgy)@>y@6ZF1yzw=fX8^=QGj+ zhCQ_*nju*hb7xY-inIzSNgZ1{U&^v3>~(L_kfuW1kOwr@xpaAw=9t9!u4W& z-N054*dVY-t?wN>Lfd$~V1;y1SkZnrkU~0cYNW|Zm8Nt*#c4zfn z_0{R(>_l8A8clWxKE1kkOa8Jy8oh(j4rf`DTK%jA8Uc}`X`_=M?E#B$`}wg&Fs43m z;%M8N;GC(@)UlT5MEmF#^n1njB_*cnNevlZ8O>}tovjmSDZlpLOk}c`5|3nPC*-K%oNBtzqZ2ixbBfm=0xka&$)< zh?_!e;P!?wnW43Bje{>!xCV>tvpQ1*y@PwqcdC`9L&0YURPj$K8%mywnWq;G{!mc@ z*B_*F+PuoGqbb}r^(Qapq-u78h+e?A;cOzyO_9<{38^Qujp0bo+SW=<8Jy$&y2Y2W=L!Eu!=du^Ea*1wUP0Q^PrgdPDzexC!OS_#lsazveQjn{ND_PM2e+c3W+)N7*N zX0i0{s||)WvFo(;K&IoshufH@?v`AsNYx3iV}n%e61$xdrjx4^A9xF<>5fx&&4(;c z7#iCbHIW9Gflk5AgUg!1m@}ni4Xr`+NP20~?o=A!s0nNQ#3NFYe9NoW+3}#3l`I!e zxd*?WY1DZ*()INwYlHA{^Fg_no8RwB7u!$G#xwdVt44DS?i*q6&vR<-&votE^7X&p z&acokzOUk4)xOZe%TIlAmowfYm9^rXkN`xZw$8IHE!-m&lpyBN5VwINm7;5NRaU6r zjSY*Dw0S&9Cbf?>d6|4}K0eM$q8MXDh;E5 z+>;hAk9Q?_g2eY#8E+kPbf-}D%8KJ z$im$I2so*;F*nUYHkSnSu31@kA@vwdSEnAI=jn{~owL{BwlSVdCU(u)DC}V1n8v|5Qwh(7J@SD?DP5*tlPMnrLAxL4< z^&QdQ&e0Ojja6z1>fSnnyQ6JvLdA< zwWptgR(vVlh?vIPMM!_GWj(b;4qb4V&jxXx=QJ0G@m}ywYbivmT&9U0*}yPcgdvU3 zfI`vl5xU2q-$NU#ovs`KjYLUK>KVc=D+WzervYZ4`t#Yj_gPoH{1=2&3e=PYryD3| zlxzyjyic9ZN;g>8n;xW}_BDoYplpA}vrDX;TM)VRALAcIt|6)EAzY1|T)V=Hi|`pHAfTEAyV0RxqQM5wsS^hrsVhhdxNcRCGK zG+8ZX!o8H28D*&lU>n%v1)$KQPWd2iiJS~AYt-Hc+Y6m8$?%5qq48Ieh0aN8LU4}i zB*(4GUGQi%p2fhhu}@@fruX{YK}EDYUS-yJuJrxP?>o}c_hpZVJ*h$y>X-8KkE?)H zi99w#6;TpvXp1%jdL!eXA_Gy zYR)sLN~$<;$O5~kUd1YO1%7Dwuy&qM(xK+|yxYmkYQX`y#Zp#WGySGG#x_Eu*2hb+ zSjWvKFH8$-lV0|I87Q<<$?HBVPNb##-u2-%-%S?&03Uzd3EmgH^YF~C z(8W^nvR5oMvIp+c!@cWwR|g7SlQ3R5i8*#@&Y9}r%l$pLIOE@<6&uX(6FP6)WNS>t zAlY9yvw6bzFH7q+YUS4-k2-l(EU+qX$=7PF#)sCmI;diIw473R6bAWoC?1;KNIl0c zG-`(FOa2&r{&Z??*whFqsD^qz9IK>r%=Y1P2I^Sl82qrsTq}4m5m~app;un7Jb8i~ zTDP z3EkwafMjXS(B6E1s}Jg4jp-oH!n1(Tvu;S&wQwl<5REi{G*Kb5R!HSikXf8LeV?!U z%F$u=)9(p|k8xqFPA;29#6lZ-trK4#(nU42XOEGE4sg>5l5tQpp}@418^^uHx>$Bc zk&|=dNZ7O&8gW~~T~lQ}K5Bh7eJ;AnUy-X4VG7|l5=IbA&o@`Fg`PZ`VS!VU5mNFZ z<**TywyXOLElEmYqP|*Iq>aJ44b&8cxpaP4sczjSnbHdm*#o23cl)Igq?NP-65qa3 zaLCcoW4}-RO2|K2hN|_J>jM17og_T#6}ZZR7DD~Aedy1L&oZA2g~wv8(bI}R{p%*( zGj2z4z<0M*Y$u`Jm@`e^H|2&rKKlZNKKf1q{^Ti35eIyJVujxK0!7;MuJA&ynlV!e z;(GIJYwATMR7%N(YSZv)%3caLWUSd98CMS0%FM?@GnK5C3M{^PwaCB}<&KA3nw4fQ zqD@k!JdGpSd2jmYcR~)sw^n|f>am-7tW`hS8%c2L3pR~% z4Q1LMDUw|_qXWK0OUjI9Ya09NC;m7M-sAxK4h#%jv;Of?Y`@ufQCRimlf7c+uq!il z@m=UuE25foo29$HtYzRX`H9#;JNTn*kKxwsj0~qf5w_ab=lf1>A`78Ptan&3s}_sR z3R&Jru#;Uj=(LM^706o8$kQQ7lWU3Nh6Kab>4)dl*NIi+DZ{_6Y_IOUeS)2m<)&xi z8MOGE8O|20DtMtjx27nlq+1&ZY^^oZ)oh2=IMZ%mY&vxQicuR6S>?iau~v79D#3^{eVbm#cG9o z2Qy_(jn>u1eK^#6>QZQ(DWAUOuCil7Vm*WY)x!GMY}l8);mZrWEo{NQCo!H2s^ux7ID0=98({A7b7Me|UWXap725~W)w+>di*o9v0g{$iFv zIUqxggxnUNHS((Y`XwdVSg^I0i0Z^=@aMx!6;gZlP6eIR`ri0LnGBqz0gn6Ee{PF% zqrS`H@Hkgx=l=d4_ehk6gCwBusd{cre=2X2^TMiG0ecz$a;kVixqw@3G16EIZ2z|a zi&82O)3055Hdj=SLcYHwX-cjTRu@)Zu7^(4jS1|gLZ&FHPR`>X=qI@^a2mk=e&afU z0K(SdfnFC7E=M6>8Tk4y=q^uW*B+I}UUq*Fkb6|aW(O*oBK8S}xD{X_sq!8RsZ+$L zSTWM?aT&1PS?%7d97O>kz57hnWfj9^G}SNC{6vUeOQwkd>cu%;{M9hoCO3PoaM*h) zCw^3*NB&Fe7i=%!3=1|teLqrh>O(LKU)ZT1JV{9nx`kA|YxQ*O6a)$L1-11lzy$HF zt8Lk9{p(R$z8;+iFSoezdtM(pWO!eHLKFp8SZza7v4#=~_bNn)!t>71EbfZ zFQ>x=I-M2Vu=HgT0sI6O=p-gf~Ld3u=)}cR?qvLda#xgTw^giyoZ)fW=+VmnD8T^4YVLUSO3BP zmKjwsS)OUEWZAEuztHnr{m5U`#5w2WVU}AS7(7lUve?3pBk$fX?+2x@zeYKB?toav zE|}3=K_Pr9e9X2a!#1dshZdl`ef_!h09&4l$OcELpV*fDK~#FWfM;<0HnE!YUUEoW zXaY56zm~krlfuwMO!Sx@~&>zu5pgXvvqYQD*TIn&=SYR zfJ0+HNUCscesn#ZZ>Zkyqq~@r{kt-5&G<%o{uq?tLI$G`3(D_(oBH}WY4&q{E3;y|7K6N*M72ZO z<+J$wPG#-8>F8qu=v+HixuklTpuRlnT}aiU;Ea_MVvUh2cX=CJrd5xORulx7jYFgYNf)0+xQFsbxK zmdJ7Z?wCV@ZkLmmiDdpmmntUsT>!Wz0G!Ek@V;_ZM7%CFD@?+_+Z(L2ZrddV*924) zGrh{6Q4_ie@#e-jmh7anz8yX2Uj)C1pn-AO&!*j@YXLKW+WT$PnM~_W7b>S-05@cN zLBsccV#R{sa2aILFwB6;2u_=mt3R1ow6I{~4!4UjXCDY9VYDJH-S=3K{u2A zxOTWPif(k4ZkN!{8a)vG=Y)*^Dw54+-lqrvorN)KfZaZ3DTT6oJ?Sj|mOF)M1oB4$ z%)Atk8NhQh&mw&FFwwA@WvI?M*(&AE$Jt0s{kVI{A`Ujs(*FYGTD8;iH;Fq1%(O6! z6umtELoH=@H6AFOMA(+6K)jpS?Zn;>5%Vu}%1BJv#1fl%NxBso=%6!&xEofynuWc| zB!)J2_WS%dVnAG!n{X>avRR`Jaw$$ljK42=J z%+sMK?Vg5UzkHUY8xmR^GMMdHjWmnB5s!GBPfj_TAj$T_MIrfhtM8{mGSvm`%KfYc z?uPiwnJE1}at_}US3B-%H9uiD+e%Od#}eMW(J>`N9-=PE%fIg_yC-A0t_g*sws&a@ zQz#Q5hEJJ|a4#ys@l+Qh5L#!;1nt3ipl9Y{XV!dd_`U5MWb|RRTYyB3jU7rxPuQQ` z$=O&>fV})m%Qb_j1%w}hffvGJNPhiG<+tUM4&siEm_nJ6))={L5gC=N_d0`gvYN4$ z+1jte!5{s=+6ZRfv>Ru{f$zrcI6y`Wm<^z_XX^C$oK9oJC`m%7LIR1fj5#amzZW=$ zqag+f9T9&&G6GH1Fa28W%%1t$FzKfKZRB;V<6%ICWI&(0y3PChIL3zxgYiZgfStr$MDIj?OEGR{PCakJzz~{_bEnq zp!GwILkKg)fO43nQth3wwiHXs0`E)m-{Mj0(R+Y2e><&RLWbOy?nn4}qW;$%F=fA0 z3;*|qc6%q=qpqA> zCpss^M}LdQln{RG56}iuR|#l{cl>dqAnuw=eEZLFToj#+2U8I`qfR)PR`CY;a?y_( zH2l2k2Mwj!*U??#2UKH<%+bqp1qw}4)1z5Ojz;0Ha3Zt5ia~5`mgeTsJ?xcCF-mJm zZ_F^;{rcVxZB**irL}7t9AIftE&~EBXPgJ@eI3*Jwr~6CqW^fl&%)~6eSE{U&muLi zCp8~@r_HiIRCh(JRtXhPc_h5#C9zo&j%KZQ_3{Zami}L#P%+2m4rxTpjn>-bdao(W z{gyC7H1@RnFBQa5|Hgzo+_j?cjD@Xe80IAUC1;=&c%UXRaH>b4-pf%%(@D?#?JwL5G>Ix?EIF~j}BwiR>}dsnEJzg>)$zO+9=0YlAYQ5QUQ2ge= z1o)Q?{v;p92u+0np_Utb*k^?hRQWJbyPNzW7I7cRSl}||7l+rKk0rED8(LTMhTsPR zA^eCt5(tEi%|}D6CI~vr7!92^@zC!q)%C~V5))i%2ql24GKQb|&6_QC=3j_nN_2D( zVU7=b8oi7fd?P>4jTDm^@Bww<5opTwZ(&16!4v`7f>!~d#%yxQVzUtAHL(b3GBMfz znmz(c0}fq5YYZYuVGJke%Q+-SnMMy~|NG(hkN*BesVlE@lcrQd##sAF)>M`I-bQ&B z>mVk@sd5(A$SBIg3p|szat7I2NvtAe;9i_HXz_o!XGFLM^s)s8B`=*vjSYXn5(qkz zYj*E1EfZ*SpH7tMmEJvBG7Q-Pjzj}>5mH))--uGs*}sxpxU&>LTzzDCe+10r=yVluLzJamQur*jtj_O6b;{jY<0lP-gZkwys2x!Jn)l6+ z6j7{E$#Jw%laP{-Nl-|T_kiXv%#n*wKk5X$cy<*3^_Axuq}(YFsH9*3NCW92+Hnn2 zE07 zBrxfwu^RWP(;M40nV27Ixx7!~MuP~InWy@pyXWb+CDtBd_CM;ngW&X6eQCT-X(!$% zo+J5*2C&1GwncYXabeo1(EZT%eSFkgbP-8}n4BQHbK2aDrof?xNK5@QR`cs_4gyY{ z@}EKq>b~e~V*Y>B)-)zJlE)u8+D@PK^p*8d2E%r<4}2g(~piq zpyWUOuX#<%J_dm%5lym)rko37EW~$7ME~6d@P8izmau3NAhUlNLVt@!j*lD$+nxXa zT!=sliAV0*8_$)*d)Iythfc}pU6L0m@Ne(%qJyBr=`jL)9`C}yr*AZ6ZO6++?l@@D zY0NQEev0^yh~yAVnn!DQi~eN9rpac2uaC*xIa4uhNg$?0WtNEXR`EM@81?l(|2hLE zf(Hp?GHsWe>n0lK_%#*j_0;lc5vy|+9$^+P`Q2kNWPd+!2T>)cN4LU;dNkcD^@P%9nXw|3;2m4=ll#Con$_T+@gsZ5aUC%YKt)^s7_kg9sM zyXsH<%=3SZ0KBiXQf?4u)+z#IVm*7&d{@D3?EZf?$XA8hu4Z)0?wq#=;!A|uxR{Xf z1cDLEn<3#`0_Cj}i)Vm}6 zC(cDOY|eYig|hMV?YB+?MqpBzp6pIX^@BxecC!)Zb_DClG2|Ih58{8g*vteO6XN}Q z|GWxUrp#^UWK?v@)BLv~+G0A3psWJavA{!*X37SUjrfV@@q~tJDGk7OZ)yG?%`OLb zLTYV+_i(`f0#eXvYObr?n>Fw(O!vzy#3DYSfGMm}X@2%#a>Bk#4Kd#6(!i(l4oqcM z*Ts8ZNmB3M*2qHj>lWxBmhagb0Ei6m5?r05-qt7A?B-8t{(h z8%XbMGj0})d-1;SeW6T1n6d~R9ydx#b^sJ;P4XwT-<8Nu4)44U{p~xBX`n$1fXf?} zxa-);umHt4(i4@V!+Ve7k$ZXphz6QVNXSj^0%nn-0M1AsWrF0py)WipV6_&N_jMp99t JT+A@w{{Y~9iR}OY literal 0 HcmV?d00001 diff --git a/frontend/src/assets/first-rank.webp b/frontend/src/assets/first-rank.webp deleted file mode 100644 index c36d524ebf792559608e39af49c82a3a4b1bb6ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1174 zcmV;H1Zn$HNk&GF1ONb6MM6+kP&il$0000G0000g001EX06|PpNI(Gq00EG5Tida@ z8@k4xdFKy&^QjzmR%chX-6>9Kr*l#!t&_^O^~AP)1@HSj_Ztxt0PUT0KC9?F53=5Q zPP!^o2sj~72l1n3+kkMX5~G`5K#d7uy}=0p^Z3RqWWCZ`2x}=xl`Vr7y$UGWcImY( zvm4cVQ;iz+-=<_Ok7Az9@3n88zHGSySSQJTXeaI_Z+ZV?YOt}zKC43k@V?s!?cxh0 zsoHIlyEYuSd2#=W`Xn1vd$scEI0W$IS315uYh&83{(Cn!%34SL?~?-XTp^#PA>|^C zcO;m>`-TnhC<^Y0G{eLO;1)%f2mqL*>_HLFYoTA+60;~?E}-PLo263zty!H5448d% zp~MIeT_`p3zHy=0sFyBg8)dlg6XtK^_6sbL>ktV1mbx1wfJIV0khGM{8OZt`i*S$E z0aj2rASeR>08kMCodGH<03rZBkwBSBC8MGtrz%LW5(#Pm$piq!eo$dY|I2jM+h?E$ zO67CCVZOQfL&c4k|8LGi{sVX;4}Y1`C;ug^9sNh}ciPJ}?>~Rn_XPb#|7ZQ5v)7^m zxRnHfsu0i)p-}2aJ+edo&!xge;yU1coBmp&)WY$=8EUB=Kv`6qTv4lq^Co_Bhp?8>e{TMO`m_|ujyD3%UBmwW56Yr zXrTAd%6ld@tKc^j;QiP{&*-b-A6_^&p}Ix?s6zh!vsHAM!U*~#b_b#;_@8mim$KCO zzwTGrxa7`i?tGz+E;Hv*ySS`Wod};Nznay9*nJ{Db4ckMQ~y{0b)uOifgv{Rq%b-~ zdNNufw`r~qOMyZ0hx-ns-kUCvDqIc557?v|)P%E+KTO52s>H3i2XX~*GY^)HFIgXd zJNM&nW$RJ;RyCMsWq$Q0f)a@I@2LpJ_g8o3wOet`2-}OVpMU za73brM5~k~BZv=|0P6~U+JgiB?*k}q9jwA~oNnyP*f=<~rTt8NQyur`$4WShumy6F z`%NBt?wqGQ2}gtT`P>I5y1)l@yKcfS(9K(pa?FL*t=vZK<#=_oJMwj+wf=I|?85f| z&{5Obb%P0O0__AOd2J_T3gF8cTFeRmZEUs=gpvJ6@eQSyiVvD5bcO@Q*}`RoyvG zil3mWQzxqGZlYCO3MG*i$^3B-0}DwsHs%7Vj?ixIDmsO22etvvguM&XvtK6Bak=(vQd~LN!V2{evom;0jC)8j;bK%8tc%|Qjj#$ z7t0KPN-qlx=hPphJ<8~UO`g|$(#n9m1Ch;a(6xukU^~kM--POTop3};03}jcB*wP^ z-QGwEnI(XU9KPlW2HoHnM6^tXfG1+m*hp|YkBG?GKmusu5@P(SrJnuAYE?>vrpPfe=$IP94u+sbdjTMHSsEGtI85PYKW9y1J^=WeOk){q z>;dMWbc!W^008tsQ$Mm>5_tJXds9IRQmw#USpYz3a>bZqT>-Fk9MKDZ6Slo%@g08v z0Q-=5BGkKE6|7DFg@~d|R77$-MPYA}iF#@PioYcNoq=HS5+b7S*^Kojnx||M<;*vX zXtEv@`KEK+2P|%m8aiw@)SqZP_^(Vwk;#$JooKon=!!)2B@0+w<~yN=<|?KDLh=_7 z7y>42M~G-BSX}Q5xnJsQPPj3s12 zj3hppllKl3@V>TAG+Dla4M5F{X5xMh0ssh@V^@>n~F`!kVoWvFv+Sx#*RMM_hG|F#CoY&adzy!^^aL`7& zi1%U}o4{8@)EBfJ9V8Gf!C%?HAfmfonv!wE-qDJU_x5Ks0RRH-k%XTkxVWE1GP(*f ztLSuxM1+>14qi}rDd$N_XMJ96NYWdgoRn*_(737!pL%EvEkh%O1NdwqiSH>~B9dgH z3S4@T)RVbvk?S54uMb2hkt-{YB1m$#<4fGO{|aoqUdWS> zfe#FoX9h6#ej>}ajGUk)N)idIm2Gld_2vbc-dTf!5=#O1hG}NdnCQ65>>vtF@QfSa z!A+Ti{0J{sX9o5a5)dT>G6RnVD8VORZlH{F3PVw@P5D8>CZ7zTF|&z3^xo75IkWCV zH$;S@u9hnQL-Qsd$ZG5If(Z2le~a`6=!-je%OPK)h)b4(N%^L(=t>=xtr6EdteL&+w+a#E zF@a9($Bqv2(d2I^Rw^NLq?dZ|`=$fED;W+ndFL`tYw{s@o|Ya{hgtPv-bCp)tyvc^ z2f00Q`Xm=^0Imo{0=+~Jv>KuK0RH`Uwtqrz8up|Tp7uk|JueIPWKP6d=LU4jf}$KF zzBZ!L)HAUzb~oSLqMd&YVvCCJgIkJKxo0WD>7~sj@2BLI&LFHsh#zp`l1gVkCoeK+ zZHUS&5~9+2C+bmk7r?BW@(cRO@tsp%c!+!S#5)MjCjk`r^~~!8PB~*AzIe1_(a8@^Q}G`2xXFBVyH6_`A6G8;I1s z*TS6COsCmi=Uk_?6$Soe$MGRY3YDL`HE7knTZEf@#!MM%Uiz$w2=Hv0QexucIZnVG z?9Q*rF3wBp&*ghMw?i5zn|B)3CNmX~IH2d36`imvq^**1aPUvJtDcDnFYjWV(z#;O zUtbw?X}b7_IrXEIyJJY}R(3DG544%#%vWwO^H;5(*ZA{w`^s>UJQ2=o{DC@9aw1||7(`E}L&+{Sr``vu5u_5uyRk`I zI&cH(BhqQ4WCa&n9r~xjGuaB*-66e6QriD2a1?I6ulUuP0Ygq|l)FU*t7I zNPqdzWy_4N3-4m0XW7cE*;l^AvL1|P+;06;`;+kc00VzqwuFohp!nHCDna4%zb@k< z6At==dHDl8bWS7_Z451k2G={ZUfJG;n}0N9y+5L z_=f7f^NgwDCmwO~1jP~`tGAhmtaXn)I~$atO5U$GOGvQdKIUzikln?1D?5|+xQ%by z;s5+!G&6_|2@IBf>xOXjdOr{M^!tX&in3ffo4rfxC~{6Q)8ZLuC)_O6y>q=Z-+Ot* z!Xho}W#Ff{CHw>wGcYy#c zWo@uLv(;jUJD6ni26z02I4Vk$?FYG^{Ok)wCcC8+l_V6i{f>%0QOsA&n~;xnrf~fa zX_qIsUnLKy%N2wEZXZDi0pG|EvTSW%TdaNNt=e9~mX^}^Pb5^K|1+Mo70wN0p!9C+ zk^5R%wS%AyWI8ZDw>R9h^Mew;QLH|fwX}`aiGQD6T<+^>OL&XHxs7d4E-l1&bVFfj{fH@krP$a=3)xPiyqJ%pmAzEm4YsAhdr|tE;_}ic4=2G zEZdn@fbW)c*%VL%O`UFi)&5*S9H^~GfgtHb42?zNH+j< zR>vZoj||cC|8{!msw?y05rOVz6z$30p>2j~gH_qm48eHGKa7C%K6uAUqYMPIp~xVsL)WDDhW_ei5XW-(6vUQxh$P zXs$(ymvxH5Rx0Kcwwsh+D~zk(fas8P>LvRn3Ly}Dbyj)Ou!k_w5qU{VpKFS+(R9+Z zm_rTYKM8fAB`Tr4Hi^Ed)K(j6&+6Rr)yMmsGLF)uan@7EW7Jqhn(tBKdotb9g($#X zNc&Nu*vw^b?QFM2nROH*?ft^#EhGyZFYQZwEAW3Pt2J3-X@{KCUe-X1q(tN;Yb7#8`q038Ji zTLw|;Yyva;kktscoCIb2%-wh8(Tk^dPHvpoG>ebHF)Oj<8+#=T=J~^hrg4dmT1T1Q zw__mm&#J=5-1NEKR=047cSadyk3>icjl6F`dQ~FZUI450$$Jg*!v=fzU;x}q6I-7M zD0$Zb*T{}G9Rk-f)aCPIzIE#WojxKy!N7oj2F$f}mtE(m5R-`e<)+T)?& z<8-8WMTZUtY>LHu10A`OV)I~{0kAX%fS<{g$`ff$<>gB4fv!JIH|YGtTUK}GMlL6`;{1|geE=T$5+w-N3Zo>A1AuNsHDSoQ zoRX6x)a7R?nrx))p8y%LZ^Q7k-(i3yurx*v39*jC?Y6hjyrH;E*I=D3MfnZ>3+r4M zAja0}IfSz`7Ll36c7(O&7Sz{b@(A)D``c35*~AbfT@(eD#sb&_cEim?5tVuk>l`YM zlHYN6{)=u+B~bD=M)%{LlEcy%d1X+EXqT`YG)s4>FqLDEstOO8YO6*L6G~jkz&}0#j$~%482a`V_Z43 zSB#=jS&V8hFj`U>hd#T>FyJA8|7qn=krv^aIExs~gzG79IYiSn*+z!FV+^p;TT+}i zT7+bD37p3;=EKS5P#-OZ5|MZPXE6JtPoR_w(pba=AELPD7#_aJE@Q3;HYf5&IwGnC z&nL(TxFkS!R8=CPgtt8UlurgFeX5wVGa34}eQ)ajn0O>N-Akon29W!BYfPNWK+@AZ zQpnMhOpj!vt$w6nqEk}X)c=O$;SvCh%YLM!-z=v&HfQ=tUh*{7a{yskNY$F}O#xsL z&ZTk4^9Bq|A$8-=k2GK-k#{PPNbigImQW$0Tw9_c@p%Vd5}UklE>b+({2zjx=bHJG zg~n>Q;fqJnmq%o^k=1(V?l}9{2nQGZ`w+%Td_d{P)zP&go32><}lC;*)SDr5j; z06vjCmq?|fA)zf9nlP{u2|yZD3Eisn4T|rbb2p!FM_YG%z;syj0O@h`0O@1>yTUK| z0P)ZKSB1VKyyxw|A4jG8_xdl(e_wmy^=0Y>_?PsL@xPRO72pHv*ZN*G{%gI!KU4UV zC;{RzoUf<-g1=oq?0V?>)cwl#UHzwKKqrt3_V54eitwunbkf+BOQcn%%2O}~*#JL! z7lNr@q`crTu)FsU;(3EO1$F43Gx5xw%&@!XAI6)dT?2wlX|am#;ck)KL9V^Dqi(nY zY=1M^S(>)NbJwdtYg*M>+NQz~Ux&f?6|iqF`#Z*#=Y>UXM#H_6^oE?wyG9B! z_X7k~FV(ra7LCyxIK~DLPDlzUZ<_K1a8Ziee_tQu6S^$5$FUwvpP0~TniLazkGqK!*j8UKRUxdI(z&`b6yy$C6Jh`t4$q>^@`shVut*>LRjSX|AuVtM~1W``GlAF~;$OKgYy zQ0+#S);xg3=NwZck4c3+D3v{e#FRg-kYX19C_bZ7{lz5nF%6Tugf7h+L%P`N2*4+D3S)$ZFk!s$rsLLN!(S2U&OpMDlnY{ZK9#?k z#Dq}6KUlMYh^B^sg~2M>IXu_1ipRpefP|A^*8_IIKy9sE$EE~=-mGTMP zdmF_^wi=iesG3tqCUEu;?mY@4sXM6L#*_H6^)dB?;GJp}dlEsF!K)FqHEg~*K|%LacyOHGu02WaT ztKkuHx+C%Ke=;uISIeqZToRy1xm zzxoLs5mc1Yq_JvL-HQcmiXlu)X(+sb>d)8t!(C6WMGX(GQz#>MzvlcJbAKCFr0bVO z#E=>IxtdU8>;4{!%G(M)b^j8QDutN0(Qs~G8^~rls{=oJP~IzPG$Z2IUnKR}>%)cI8h9VJ{bPGTK&k9X5 z@{4<432-iC=V}`ra<`c3x(%tu7Xv7#LL0pa(T4lU&`_b3s2O7nv!7->{Ec;t`Er?o9*L&HVwV%AKW&Xg^dp1-^ z%pZP!du?vhS{1?)#KUyMer@M<_|mhk63O_2#{YM+?B9hDGQR_=R1oWF<;U&Vo|v`S z?K7fk2U0sfsTAdiO->3fq~wh3JEF6$8d0na(oMqmaCJ@^B5U($Dk_Cd<$-xiSx7Uilzz2KMrp#KV+MT8&pf?Jb z$;2m}%wS>;e?0^k9&Snx;TeNVnSkd7X`^o#Tv^`!Nn;> zs6A>&QWcOXCwiuRL^R#UC@eqryCEV{yCC_c|Kng$5t(Sx@;ML9*#x`P=vjh_Jcdtd zB13;|w(h+o?PivVkHI~E2ez&zmHuR7;%uI+L1f;CSH?lbR+oK!ga;ijqGyl0JIM6K z`bA-fS51hoXX}(gbfj*4NBK;Xg3?hlm=@hDBQQ*mWgk((9*^!@Cf-oPf1iska~ukn zjMKZ}E35!h4*o^&)8`!JTnSrr6p+}bjES)OTzK8h&KNe~;euGg^SDwlDEsiERphm4 z|8uNK4o%i^Va8+Uy)&_LMKG|e$??U7W0&oj69k|vWBXpD8?}Ke3k2&C3MUyZ;GBrc z*|-R?A-Hz#;+o7{F|x)Pu!6Ku4dvqdy6zv_5_G{!E2u5WC~n90z&QiSAJ>0KW!T8# zHbuw9bIbpXS^`1o1;O8Y8X5tq%!xy~X-L5lVM(9_lTq3^TJZa~SWD}|K}nV@d*#jo zxL~DxarCA9!@2Vt7U2Z2Gb$=(ezUXkNm`*sUvG!3{_uXK&7!zm)F{~ zYJ{b@7ERhP#B<{0_MP7nM~@m`#?4*ye{JuQFTmi}x#!-a5gARTxDm1Ey->0Sb&zcj0KA##O`hV-FTIgzkRvUf+ywo`lz+@mC6HhzEq9E{jGe60%&V!)DxA#|-5+ zT1HTGb}_Ew#4lZ&FGCk*n;VAbIUhR~07UiGGN7sp%{Tz5DFiD=(?gW}7VNTW&B_1e wIskx!#F7dW{fouytFB_8NgMq9dbUjtwcH5b;WGdK!U92m?DTN|`%8cT02f6JvH$=8 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/ranking-third.webp b/frontend/src/assets/ranking-third.webp new file mode 100644 index 0000000000000000000000000000000000000000..292e589d180c1dd8839e432a350f1e03dc30b5a6 GIT binary patch literal 3654 zcmV-M4!QACNk&FK4gdgGMM6+kP&il$0000G0001E003hE06|PpNZ14b00E$OTiY2) zpU_oRW81cE+qP}nMrv%^w(ZxpQDeJZx$h5^N}k+LN5llcdFS`%62W?1#8giIA+8-{U` z`FF!_tn?ek_sj#N^dh!NYiGOF+uQJN=UQ!lQ2AILh z2Sa#~2vvOBm+zypFMQH4Um5p1!>VH|L45MxlzlXnt%rsgTly8Lf1F+iAnETy$bx!9 z(?+HY>svlu(mWItT^hQMV!_LyZ7owyAeBDYBZfLc<1Ei*yd2jVS`Q!*gQ2M`((BE(&{P}nw`CsnsiwDrebn8Rj_y7monu>Ta>uYy@NfJL`h%3Q{a5(Hx zDLo2YaV2(HQhQZ{{A~gq(g)b(-5xuhE6mhQhY8FdABK<$`p@KGK|5`Ung2^EqV|G3 zwstXhP5CD)4)~5Rx3rP&0f(-UkUfIG^4ZzT+!Xom1WDzy2H48nHeA9>Y-#oou$_s! zI|8y4R#-4Gu#LG*m}JK|Y)n_zngyBpNls_Vw=uW1D*hGQG?yiFr|ugL{XUn1RMm#9 zIC1Z%KY#!J#-W8hiY0Q8)*s3C|7h(~mug`&TR-iYz?P@zww&)6}2 zQc6{`M{JY6$sMjk|IgxBX~dCwJ1p{=tn#|5yKH}6xF}Xn(addtR1cM`QZ+Vc>wVP_ z&slc8AAn5DBOLwF&8G@wu2Gn{jadL7-xYE%c2N=l`Oc6Pg+xqF3>Q5Uf)+39Bed&V z7WsW)0G=Vy7NNfsh07C&nIo$KK!T+v3w_-b09r(a`6fNw_FiY=nE;UF2+NHb2mk}f z;$e2UU(Vz}asWxrv*h3?05}?AHiN{mH|qmPc!FgI`vb`Nj+u`_@H$pbia5FnfO*W( zg#`6B)v14307(0g*Ff+Y*6^!DK*kzAN!@kec@XZsXpfkgTqEX~;=;O-J-Jszr78L! z>q!j-WqVAl>uo^`SRuJaR%RtJi65(wyG=|B*7;QmDZ91e){_@Be z7EaUH>@v27kPGA%Hdzsm{B9P=M2GC%E=6k7YfVP1&vi5hPD zkDSDPIjfily4QIAWojD$Jo&pVIsN^UNHgyJ|DWxf-ZULV16EKtAV3KK0PrRNodGIj z0Av6@kvf-1rK2JtFB!Rruo4Ms1}FfnZ#MIH?5{V%5%czg^dsg0&ST66oUf!G?cQ)5 zXdZwaET7ykKs=@QqxSE}4?%oG`xD#`SnOT(FPeYF-WR<; z#OFFsPkRaZYWVii(Xkim&g)GR!t7KzZUqMaFbQ|Qj(ob@Qjiq zg9hwPTZ{b=E|`!Ls=ad2ki`eU@5EH<>4ql^J7YQEDq%iD=rsUlmrs4CM&oNDVYYh+ zDB5?CbUP~WU6KLpY0yc!sg1U1-!i*&|L5+?)mCNj_F;I|YpKeYoqh_2QDE@*Sn+j( z^2w?!{lG2tkP{8hO}V2K(UNm3FPV+x+fGf1wpD%on*r|fNa4l-EFROmK84Vp{B6Zv z0092|I+Fc&vV`WZitP?xo(>eQ)zmTm>GQ%v>fmGR-HV(5RL!1*b_4Y;b^K(#ON@u5 zq-=54`R;0UH$}%&e_F+kzJL8&PHfFzkKRo>*Zc^W-S@OLQ8-$%r994(PNjkw+o)># zD_-MjjYBkl@MW$*$yN%dZY#VvI)NQl#b=o|23f6!t_BBx;hy&_4t?iW%F6)G#|w?n zB@m|JrVpZoBtP?M_JpqSw!kR>bx4%T+y<=4dsVaRQTZoHGC9U8i7|j8z`(EHiV<2o zk*Nq6IA*{soZh_6nloHAxZ5B5GRjBitv}9+HnXA>xY6uIkfwcZV~QS70xW& zV!kzTo?g5)_iOx4m=q^M>rFq&a+W0uhKT~u0X_=oiC{vQJJiCUMDXh549^o{>Jeb9azZ9LRi4T-jlmEtnS&{Z2}ZUvUI-tixBSam|c zr)kknjldmSBRTPMK}W`_XX()WxuYh?uwo=7tGb(bnNXb8Y+dKjB@@9)5xUe}BVJsG z(-P+?f07G$T3}J4=Awf_=-Tvgff6Z?W%XP4sl(2O7yB^Joo(UIe1zRM$X56Q{NSO? zzcI;`8f;0aw7o%S&O`q+`~% zVUzIMZDyV=_S`(k_Mic9hO1lo;XgRBWc)N#nTF%f$Zlsl7eMTZ;zM1JkP9jiXC%9L zH8)pqfVWj(2=#?Jn_J0TNHMS%6@TV^Ft;rI=Mr5|XESqq;LpEC5s*PdecW=b7Q5#U zK~WIdO5%<9ssCxj=|{9}fC%0K-EYiB&Q_C;jJb5Qd@_FYn#f4P%=eu^8OzHgA76QY zkzZk;}p0mZbIF)UvxJyVZexk4TLlHD0v&Z=~6u%pROaIcXPzZtwhV1es z6tnNwfnUUX``WeXUXfSV+N!=hTV4V^Ow^mbf4s_(@zw4UCr@5s89ul^TmR_e9u>rs z-~V7(D6!GE-xMch0Mf0M76S?=`h3v_UdYte{A=VFMrM;EM(^)u@Hk>E+<;c~60d!2?tgR} zSWSE)5T(1w`*O>a0nHorvD2X^KalR#YZt4I$Aw!pkhFel*{jGU$#YS2jyGy)7K@MC z&;JQ22iB=S9(@)w-bZg_tge+mJ2dIHY#0?(_wy%1BJn`H)4*0v4FzV>>@yzzmMAG0 zp{BC==9N#BUJ@t0APxiU$zW3NlqtB=_e=+1(pfoynT|geJ3Q<64r>#CNx~NN$J;`m zhhUe@bO0NyG=qpJINmyrSo4+@`<^TiPInQ0sT$afFPWFZB~7JLMHhDh=Dq$X#~Jl> zCr}SQEhHr(YxkGhi(ci&$f~x8-6ZZ|1t3;oMavMYl^QYMHgvVjE5dJRlo?Y-qW5>| zscf?{IQ`TQ|NmfEvu*#AYaDF*8@B^!@I5<`Kc?->c9k8mdO#3G6gXtj9}XE$I&d`u z>0_im|H+&rY;E5>MF*kTyF{y_Sgq=wW|V9f(Y4tH`4RvDH~iW_463Qa0*;Sp3IRUD Y>`ck-|11PMAOH^c7N(2$n*aa+0Hm=P$p8QV literal 0 HcmV?d00001 diff --git a/frontend/src/assets/second-rank.webp b/frontend/src/assets/second-rank.webp deleted file mode 100644 index 6f1784d1e5855c67ff979a5878bfbe1bb98f966a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1106 zcmV-Y1g-m0Nk&FW1ONb6MM6+kP&il$0000G0000g001KZ06|PpNHzfg00EG5+t#ty z(s!IxD($4SZ9AoH+fK!6RCdM6wr$&$b*|p?o+lzE0L;CleE*#^nORNV_Yjc5h-bzj7lhuqJPfOMG z9!E;y{|l@RstfO1d->kUZG!<&_Vz4k-+fSuxeapO*NOk2kf>a${3l5+G7)Jc*mI4v!T_A_6Fs=D;5Z9jzbJIMf|WdstU#uMTpa)`KZw0F11`1lkbg~T8fc~u z&OAg5J+L)s`9bu+i{~R$iX-&jY8FOCMuE}?{~U1RVN_rg0IbgwjRF8xP&gp&0ssI| z5CEM4Dk}ga06vjGok}I6qamj$Ag~e%Kp1FjfxrPY1@nIb{0sUl`|yx<1yeup8~{JS zatQum2eO>;udoli~C=(T*@{#-XVcN%+a>H)SHG>W|D7z+T&m@-a8? zcJP@*Q-l|z$Nmk`4hRah`G0<@`zy`LljxoTE&pmYM1EvL!~<#ub_rzs7ifU6%maiB z5*?)8bCyg$oJ;S)vGoxSLx$j6_V9V9&Mebq;6ntO7mToqB!|E-xo`v^-UMutTGJq|S78#JwWt_7#Kfa<5CA8w zW}%AWqSJ=jKI=V;v0z6qpM9Wa-~~_vp$Nb_{xjCI316~2iMK4IK_TYV9d?k+ z1e;*Ux#j6za+ih^==L6qWOL9Gu>MLmX?jBmka$Vot68K>0^W8t=+T*{onURL%|G2I Ym3R{VQpb!XGzb(GpkF1E&ZU|F0A`;M2><{9 diff --git a/frontend/src/assets/third-rank.webp b/frontend/src/assets/third-rank.webp deleted file mode 100644 index 656a7cc5ee87734afd54134ab89c9728ee2e7461..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1082 zcmV-A1jYMONk&F81ONb6MM6+kP&il$0000G0000g001EX06|PpNIL-l00EFI+qP+2 z^EzW>+qUg{A5t^2ZQHhObKjTQwr%^3V4uC_Tz?P|6F}CEcVWH$Kdf7jtmh0X)%7Hu zB=9##%>4sz7|HizWsydglZ+#zHRYe$3O%$y>3xt5cd?mDZ(~g{C}cU-nW8aT;rf}S zrV}t6IphB45>WyutCgkK{1rs53joYjvl|FJ2(b~~bH%B<7xz!Cwwu3#%C5oupry(< zm@_E>2CN_7UqKgO`-V!;df>-M$ABYHf6$h?egp8Subm3fA#|a{=U|Vdv_C*DF@xt& z%m)aLp%EBIf)60t-F=;xfY%3^A3-D-v>w7oBsN3(mmkj?^22z|H8k;NYIwt2ui=6t zYqy3W#9pgms~u~hhOfMi8cq>AK*MAn8FEnq6=F>!X-K7sED#z^f^i09x7#TJ09H^q zAkYE;0Pqa}odGH<03rZBkwBP9rK6%DCo5>M5(#JkziYEPJ%J#{(B9c=w0-ER#{Byp zTYLv<8KB=F^8>sZHay}pWApd?4{%TAKi5Cz^_~5|EXiP7TEMsqQ+R*fg@Ud10DS@A z)KLGBbpgAupXgzySXK%|q5?@0x?y>l3iUKE^%Ok=(I?A;dlgm^;ef zHJI1Xu1`?p4CPtXqThd7E6Wp8r1ptfR{h%SmNpMsO(ITiV;1N0E8tVmw(1Ad%51%> z>WeXV<$_DEjvU8s4d7{gO#}+woooFqQrSk0l**2T+|dm0u&Ny*j#p)T)70!|oYiwts>VZHW_~L-mZcYQAR6Q#-u``+NM>Pt&=UekM7YYn1dY z7hq=oO~V~NZf-Ma_4Uf_Lw_Qb}zzW8Qy5NGwaIdkF(ZN6L1-*W3LxO6nmw z9{ku%D#ER#HNV2zz;@Lh3NdDu{>HqSJLoaL6DhlR%?hG``AVpvahIy6X?c{_RhcBT zzr2{=`-K^O@-eUWQ%*&u7@BT$!OAK;pldWAGP$^Uz7Lq?LmT>>12s#xnLT$K5uW-u z!G%fH3~X>03|KUv_3)rx+$!;z^VBi&m(0;7sI3#6lk|g=Ea?zEMn@n@Q4!NfI!U4~ z1CW=N0m2f3Uv9bG9e@N4fQ}{iNXhgb<9E9iN{BxzLawHOCBCHwYfC?fusfDza>+Ip zs{9X-CQ{S8!Hq)$ diff --git a/frontend/src/components/AlarmContainer/AlarmContainer.stories.tsx b/frontend/src/components/AlarmContainer/AlarmContainer.stories.tsx new file mode 100644 index 000000000..5b5a8033e --- /dev/null +++ b/frontend/src/components/AlarmContainer/AlarmContainer.stories.tsx @@ -0,0 +1,24 @@ +import type { Meta } from '@storybook/react'; + +import { CSSProperties } from 'react'; + +import AlarmContainer from '.'; + +const meta: Meta = { + component: AlarmContainer, +}; + +export default meta; + +export const Default = () => { + return {}} />; +}; + +const style: CSSProperties = { + maxHeight: '500px', + overflow: 'scroll', +}; + +export const LimitHeight = () => { + return {}} style={style} />; +}; diff --git a/frontend/src/components/AlarmContainer/ContentAlarmList/index.tsx b/frontend/src/components/AlarmContainer/ContentAlarmList/index.tsx new file mode 100644 index 000000000..fcc8bf77c --- /dev/null +++ b/frontend/src/components/AlarmContainer/ContentAlarmList/index.tsx @@ -0,0 +1,82 @@ +import { Fragment } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { useContentAlarmList } from '@hooks/query/alarm/useContentAlarmList'; +import { useReadAlarm } from '@hooks/query/alarm/useReadAlarm'; + +import LoadingSpinner from '@components/common/LoadingSpinner'; +import SquareButton from '@components/common/SquareButton'; + +import { PATH } from '@constants/path'; + +import { SHORTEN_TEXT_LENGTH } from '../constant'; +import * as LS from '../ListStyle'; +import * as S from '../style'; + +export default function ContentAlarmList({ closeToolTip }: { closeToolTip: () => void }) { + const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isListEmpty } = + useContentAlarmList(); + const { mutate } = useReadAlarm('CONTENT'); + + const navigation = useNavigate(); + + if (isListEmpty) { + return 현재 도착한 알림이 없습니다!; + } + + const handleAlarmClick = (alarmId: number, isChecked: boolean, postId: number) => { + if (!isChecked) mutate(alarmId); + + navigation(`${PATH.POST}/${postId}`); + closeToolTip(); + }; + + return ( + + {data?.pages.map((listInfo, pageIndex) => ( + + {listInfo.alarmList.map(alarm => { + const { postId, postTitle: title, commentWriter: nickname } = alarm.detail; + const shortTitle = + title.length < SHORTEN_TEXT_LENGTH.TITLE + ? title + : `${title.slice(0, SHORTEN_TEXT_LENGTH.TITLE)}...`; + const shortNickname = + nickname.length < SHORTEN_TEXT_LENGTH.NICKNAME + ? nickname + : `${nickname.slice(0, SHORTEN_TEXT_LENGTH.NICKNAME)}...`; + + return ( + + { + handleAlarmClick(alarm.alarmId, alarm.isChecked, postId); + }} + > +

+ {nickname === '' + ? `"${shortTitle}" 게시글이 마감되었습니다!` + : `"${shortNickname}" 님이 "${shortTitle}" 게시글에 댓글을 달았습니다!`} +

+

{alarm.createdAt}

+
+
+ ); + })} +
+ ))} + {isFetchingNextPage && ( + + + + )} + {!isFetchingNextPage && hasNextPage && ( + + fetchNextPage()}> + 더보기 + + + )} +
+ ); +} diff --git a/frontend/src/components/AlarmContainer/ListStyle.ts b/frontend/src/components/AlarmContainer/ListStyle.ts new file mode 100644 index 000000000..273d7a6c4 --- /dev/null +++ b/frontend/src/components/AlarmContainer/ListStyle.ts @@ -0,0 +1,53 @@ +import styled from 'styled-components'; + +export const Description = styled.p` + margin: 30px 0; + + font: var(--text-body); + text-align: center; + font-weight: 500; +`; + +export const ListContainer = styled.ul` + font: var(--text-default); +`; + +export const ListItem = styled.li<{ $isRead: boolean }>` + display: flex; + + border: 1px solid var(--gray); + align-items: center; + min-height: 60px; + margin: 5px 0; + + background-color: ${props => props.$isRead && 'var(--bright-gray)'}; +`; + +export const ButtonWrapper = styled.li` + margin-top: 10px; +`; + +export const LinkButton = styled.button` + height: 100%; + width: 100%; + padding: 10px; + + text-align: left; + + cursor: pointer; + + &:hover { + background-color: var(--gray); + } + + & > *:first-child { + font-weight: 500; + } + + & > *:last-child { + margin-top: 5px; + + text-align: right; + font: var(--text-small); + } +`; diff --git a/frontend/src/components/AlarmContainer/ReportAlarmList/index.tsx b/frontend/src/components/AlarmContainer/ReportAlarmList/index.tsx new file mode 100644 index 000000000..33a114636 --- /dev/null +++ b/frontend/src/components/AlarmContainer/ReportAlarmList/index.tsx @@ -0,0 +1,75 @@ +import { Fragment } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { useReadAlarm } from '@hooks/query/alarm/useReadAlarm'; +import { useReportAlarmList } from '@hooks/query/alarm/useReportAlarmList'; + +import LoadingSpinner from '@components/common/LoadingSpinner'; +import SquareButton from '@components/common/SquareButton'; + +import { PATH } from '@constants/path'; +import { REPORT_TYPE } from '@constants/policyMessage'; + +import { SHORTEN_TEXT_LENGTH } from '../constant'; +import * as LS from '../ListStyle'; +import * as S from '../style'; + +export default function ReportAlarmList({ closeToolTip }: { closeToolTip: () => void }) { + const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isListEmpty } = + useReportAlarmList(); + const { mutate } = useReadAlarm('REPORT'); + + const navigation = useNavigate(); + + if (isListEmpty) { + return 현재 도착한 알림이 없습니다!; + } + + const handleAlarmClick = (alarmId: number, isChecked: boolean, reportId: number) => { + if (!isChecked) mutate(alarmId); + + navigation(`${PATH.REPORT_ALARM}/${reportId}`); + closeToolTip(); + }; + + return ( + + {data?.pages.map((listInfo, pageIndex) => ( + + {listInfo.alarmList.map(alarm => { + const { reportId, type, content } = alarm.detail; + const shortContent = + content.length < SHORTEN_TEXT_LENGTH.DEFAULT + ? content + : `${content.slice(0, SHORTEN_TEXT_LENGTH.DEFAULT)}...`; + + return ( + + { + handleAlarmClick(alarm.alarmId, alarm.isChecked, reportId); + }} + > +

{`신고를 받아 "${shortContent}" ${REPORT_TYPE[type].actionMessage}`}

+

{alarm.detail.createdAt}

+
+
+ ); + })} +
+ ))} + {isFetchingNextPage && ( + + + + )} + {!isFetchingNextPage && hasNextPage && ( + + fetchNextPage()}> + 더보기 + + + )} +
+ ); +} diff --git a/frontend/src/components/AlarmContainer/constant.ts b/frontend/src/components/AlarmContainer/constant.ts new file mode 100644 index 000000000..6bd31e403 --- /dev/null +++ b/frontend/src/components/AlarmContainer/constant.ts @@ -0,0 +1,5 @@ +export const SHORTEN_TEXT_LENGTH = { + DEFAULT: 8, + TITLE: 10, + NICKNAME: 6, +}; diff --git a/frontend/src/components/AlarmContainer/index.tsx b/frontend/src/components/AlarmContainer/index.tsx new file mode 100644 index 000000000..a64efe2d2 --- /dev/null +++ b/frontend/src/components/AlarmContainer/index.tsx @@ -0,0 +1,49 @@ +import { CSSProperties, Suspense } from 'react'; + +import { useToggleSwitch } from '@hooks'; + +import ErrorBoundary from '@pages/ErrorBoundary'; + +import LoadingSpinner from '@components/common/LoadingSpinner'; +import ToggleSwitch from '@components/common/ToggleSwitch'; + +import ContentAlarmList from './ContentAlarmList'; +import ReportAlarmList from './ReportAlarmList'; +import * as S from './style'; + +const CONTENT = '알림'; +const REPORT = '신고'; + +interface AlarmContainerProps { + style?: CSSProperties; + closeToolTip: () => void; +} + +export default function AlarmContainer({ style, closeToolTip }: AlarmContainerProps) { + const { selectedButton, firstButton, secondButton } = useToggleSwitch(CONTENT, REPORT); + + return ( + + + + + + + + } + > + {selectedButton === CONTENT && } + {selectedButton === REPORT && } + + + + + ); +} diff --git a/frontend/src/components/AlarmContainer/style.ts b/frontend/src/components/AlarmContainer/style.ts new file mode 100644 index 000000000..8a115a60f --- /dev/null +++ b/frontend/src/components/AlarmContainer/style.ts @@ -0,0 +1,26 @@ +import styled from 'styled-components'; + +export const Container = styled.div` + display: grid; + grid-template-rows: 40px auto; + gap: 10px; + + height: 100%; + padding: 10px; +`; + +export const Content = styled.div` + padding: 10px; + border: 1px solid var(--primary-color); + border-radius: 4px; + + overflow: scroll; +`; + +export const LoadingSpinnerWrapper = styled.div` + display: flex; + align-items: center; + justify-content: center; + + height: 200px; +`; diff --git a/frontend/src/components/PostForm/CategoryWrapper/index.tsx b/frontend/src/components/PostForm/CategoryWrapper/index.tsx index 6362d8714..d744de40b 100644 --- a/frontend/src/components/PostForm/CategoryWrapper/index.tsx +++ b/frontend/src/components/PostForm/CategoryWrapper/index.tsx @@ -6,6 +6,8 @@ import { useCategoryList } from '@hooks/query/category/useCategoryList'; import MultiSelect from '@components/common/MultiSelect'; import { Option } from '@components/common/MultiSelect/types'; +import { POST_CATEGORY } from '@constants/policy'; + import { changeCategoryToOption } from '@utils/post/changeCategoryToOption'; interface CategoryWrapperProps { @@ -30,6 +32,7 @@ export default function CategoryWrapper({ multiSelectHook }: CategoryWrapperProp handleOptionAdd={handleOptionAdd} handleOptionDelete={handleOptionDelete} placeholder="카테고리를 선택해주세요." + maxOptionCount={POST_CATEGORY.MAX_AMOUNT} /> ); } diff --git a/frontend/src/components/PostForm/index.tsx b/frontend/src/components/PostForm/index.tsx index cdfbd90eb..25e211063 100644 --- a/frontend/src/components/PostForm/index.tsx +++ b/frontend/src/components/PostForm/index.tsx @@ -1,27 +1,21 @@ import type { UseMutateFunction } from '@tanstack/react-query'; -import React, { HTMLAttributes, useState } from 'react'; +import React, { HTMLAttributes, useContext, useState } from 'react'; import { Navigate, useNavigate } from 'react-router-dom'; +import { ResponsiveFlex } from 'votogether-design-system'; + import { PostInfo } from '@type/post'; -import { - useMultiSelect, - useContentImage, - useText, - useToast, - useToggle, - useWritingOption, -} from '@hooks'; +import { useMultiSelect, useContentImage, useText, useToggle, useWritingOption } from '@hooks'; -import ErrorBoundary from '@pages/ErrorBoundary'; +import { ToastContext } from '@hooks/context/toast'; import HeaderTextButton from '@components/common/HeaderTextButton'; import Modal from '@components/common/Modal'; import NarrowTemplateHeader from '@components/common/NarrowTemplateHeader'; import SquareButton from '@components/common/SquareButton'; import TimePickerOptionList from '@components/common/TimePickerOptionList'; -import Toast from '@components/common/Toast'; import WritingVoteOptionList from '@components/optionList/WritingVoteOptionList'; import { PATH } from '@constants/path'; @@ -40,12 +34,13 @@ import { getDeadlineMessage } from '@utils/post/getDeadlineMessage'; import { getSelectedDHMTimeOption } from '@utils/post/getSelectedTimeOption'; import { checkIrreplaceableTime } from '@utils/time/checkIrreplaceableTime'; +import { theme } from '@styles/theme'; + import CategoryWrapper from './CategoryWrapper'; import { DEADLINE_OPTION, DeadlineOptionInfo, DeadlineOptionName } from './constants'; import ContentImagePart from './ContentImageSection'; import * as S from './style'; import { checkValidationPost } from './validation'; - interface PostFormProps extends HTMLAttributes { data?: PostInfo; mutate: UseMutateFunction; @@ -65,9 +60,18 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) writer, } = data ?? {}; + //기타 훅 const navigate = useNavigate(); + const { addMessage } = useContext(ToastContext); + const { isOpen: isModalOpen, openComponent, closeComponent: closeModal } = useToggle(); + + //게시글 정보 관련 훅 const contentImageHook = useContentImage(serverImageUrl); const { handlePasteImage } = contentImageHook; + + const categorySelectHook = useMultiSelect(categoryIds ?? [], POST_CATEGORY.MAX_AMOUNT); + const { text: writingTitle, handleTextChange: handleTitleChange } = useText(title ?? ''); + const { text: writingContent, handleTextChange: handleContentChange } = useText(content ?? ''); const writingOptionHook = useWritingOption( serverVoteInfo?.options.map(option => ({ ...option, @@ -75,46 +79,25 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) })) ); + //마감시간 관련 코드 const deadlineDHMTime = calculateDeadlineDHMTime(createTime, deadline); + const baseTime = createTime ? new Date(createTime) : new Date(); - const { isToastOpen, openToast, toastMessage } = useToast(); const [selectTimeOption, setSelectTimeOption] = useState< DeadlineOptionName | '사용자지정' | null >(getSelectedDHMTimeOption(deadlineDHMTime)); - const { isOpen, openComponent, closeComponent } = useToggle(); - const [time, setTime] = useState(deadlineDHMTime); - const baseTime = createTime ? new Date(createTime) : new Date(); - const closeModal = () => { - if (data && checkIrreplaceableTime(time, data.createTime)) { - openToast('마감시간 지정 조건을 다시 확인해주세요.'); - const updatedTime = { - day: 0, - hour: 0, - minute: 0, - }; - setTime(updatedTime); - setSelectTimeOption(null); - } - - setSelectTimeOption(Object.values(time).every(time => time === 0) ? null : '사용자지정'); - closeComponent(); - }; + const [userSelectTime, setUserSelectTime] = useState(deadlineDHMTime); - const { text: writingTitle, handleTextChange: handleTitleChange } = useText(title ?? ''); - const { - text: writingContent, - handleTextChange: handleContentChange, - addText: addContent, - } = useText(content ?? ''); - const multiSelectHook = useMultiSelect(categoryIds ?? [], POST_CATEGORY.MAX_AMOUNT); + if (postId && writer && !checkWriter(writer.id)) return ; + // 마감시간 관련 핸들러 const handleDeadlineButtonClick = (option: DeadlineOptionInfo) => { const targetTime = option.time; if (data && checkIrreplaceableTime(targetTime, data.createTime)) - return openToast('마감시간 지정 조건을 다시 확인해주세요.'); + return addMessage('마감시간 지정 조건을 다시 확인해주세요.'); setSelectTimeOption(option.name); - setTime(targetTime); + setUserSelectTime(targetTime); }; const handleResetButton = () => { @@ -124,12 +107,26 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) hour: 0, minute: 0, }; - setTime(updatedTime); + setUserSelectTime(updatedTime); } }; - const handleInsertContentLink = () => { - addContent('[[이 괄호 안에 링크를 작성해주세요]] '); + const handleModalClose = () => { + if (data && checkIrreplaceableTime(userSelectTime, data.createTime)) { + addMessage('마감시간 지정 조건을 다시 확인해주세요.'); + const updatedTime = { + day: 0, + hour: 0, + minute: 0, + }; + setUserSelectTime(updatedTime); + setSelectTimeOption(null); + } + + setSelectTimeOption( + Object.values(userSelectTime).every(time => time === 0) ? null : '사용자지정' + ); + closeModal(); }; const handlePostFormSubmit = (e: React.FormEvent) => { @@ -137,15 +134,15 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) const formData = new FormData(); //예외처리 - const { selectedOptionList } = multiSelectHook; + const { selectedOptionList } = categorySelectHook; const errorMessage = checkValidationPost( selectedOptionList, writingTitle, writingContent, writingOptionHook.optionList, - time + userSelectTime ); - if (errorMessage) return openToast(errorMessage); + if (errorMessage) return addMessage(errorMessage); const writingOptionList = writingOptionHook.optionList.map( ({ id, isServerId, text, imageUrl }, index) => { @@ -168,7 +165,7 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) formData.append(`postOptions[${index}].content`, deleteOverlappingNewLine(option.content)); formData.append(`postOptions[${index}].imageUrl`, option.imageUrl); }); - formData.append('deadline', addTimeToDate(time, baseTime)); + formData.append('deadline', addTimeToDate(userSelectTime, baseTime)); fileInputList.forEach((item: HTMLInputElement, index: number) => { if (!item.files) return; @@ -184,7 +181,15 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) } }; - if (postId && writer && !checkWriter(writer.id)) return ; + const primaryButton = { + text: '저장', + handleClick: closeModal, + }; + + const secondaryButton = { + text: '초기화', + handleClick: handleResetButton, + }; return ( <> @@ -197,11 +202,16 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps)
- + - - - + ) => @@ -223,11 +233,6 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) onPaste={handlePasteImage} required /> - - - 본문에 링크 넣기 - - @@ -239,13 +244,17 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) - {getDeadlineMessage({ hour: time.hour, day: time.day, minute: time.minute })} + {getDeadlineMessage({ + hour: userSelectTime.hour, + day: userSelectTime.day, + minute: userSelectTime.minute, + })} {data && ( 현재 시간으로부터 글 작성일({createTime})로부터 {MAX_DEADLINE}일 이내 ( @@ -297,41 +306,25 @@ export default function PostForm({ data, mutate, isSubmitting }: PostFormProps) - - {isOpen && ( - - <> - -

마감 시간 선택

- - X - -
- - - {POST_DEADLINE_POLICY.DEFAULT} - - - - - 초기화 - - - - + + {isModalOpen && ( + + + + {POST_DEADLINE_POLICY.DEFAULT} + + + )} - {isToastOpen && ( - - {toastMessage} - - )} ); } diff --git a/frontend/src/components/PostForm/style.ts b/frontend/src/components/PostForm/style.ts index 811496a3a..467e80f64 100644 --- a/frontend/src/components/PostForm/style.ts +++ b/frontend/src/components/PostForm/style.ts @@ -23,36 +23,6 @@ export const HeaderButton = styled.button` cursor: pointer; `; -export const Wrapper = styled.div` - display: grid; - grid-template-columns: 1fr; - justify-items: center; - justify-content: center; - gap: 20px; - - padding: 70px 10px 20px 10px; - - & > * { - width: 100%; - } - - @media (min-width: ${theme.breakpoint.sm}) { - grid-template-columns: 2fr 1fr; - gap: 30px; - - padding: 30px 40px 20px 40px; - } - - @media (min-width: ${theme.breakpoint.md}) { - grid-template-columns: 1fr 300px; - padding: 30px 80px 20px 80px; - } - - @media (min-width: ${theme.breakpoint.lg}) { - grid-template-columns: 1fr 400px; - } -`; - export const LeftSide = styled.div<{ $hasImage: boolean }>` display: flex; flex-direction: column; @@ -181,6 +151,20 @@ export const OptionListWrapper = styled.div` } `; +export const ModalBody = styled.div` + display: flex; + flex-direction: column; + justify-content: start; + align-items: center; + gap: 7px; + + min-height: 100%; + + font: var(--text-body); + + box-sizing: border-box; +`; + export const Deadline = styled.div` font: var(--text-body); font-weight: bold; @@ -257,19 +241,6 @@ export const CloseButton = styled.button` cursor: pointer; `; -export const ModalBody = styled.div` - display: flex; - flex-direction: column; - align-items: center; - justify-content: start; - align-items: center; - gap: 10px; - - padding: 10px 0; - - font: var(--text-caption); -`; - export const ResetButtonWrapper = styled.div` display: flex; diff --git a/frontend/src/components/ReportModal/ReportModal.stories.tsx b/frontend/src/components/ReportModal/ReportModal.stories.tsx index 7b8ba17bb..d9ae04599 100644 --- a/frontend/src/components/ReportModal/ReportModal.stories.tsx +++ b/frontend/src/components/ReportModal/ReportModal.stories.tsx @@ -12,6 +12,7 @@ type Story = StoryObj; export const Nickname: Story = { render: () => ( {}} reportType="NICKNAME" handleCancelClick={() => {}} handleReportClick={() => {}} @@ -23,6 +24,7 @@ export const Nickname: Story = { export const Comment: Story = { render: () => ( {}} reportType="COMMENT" handleCancelClick={() => {}} handleReportClick={() => {}} @@ -34,6 +36,7 @@ export const Comment: Story = { export const Post: Story = { render: () => ( {}} reportType="POST" handleCancelClick={() => {}} handleReportClick={() => {}} diff --git a/frontend/src/components/ReportModal/index.tsx b/frontend/src/components/ReportModal/index.tsx index b352d9a38..3ea7504eb 100644 --- a/frontend/src/components/ReportModal/index.tsx +++ b/frontend/src/components/ReportModal/index.tsx @@ -1,37 +1,42 @@ -import { ReportType } from '@type/report'; +import { ReportMessage, ReportType } from '@type/report'; import { useSelect } from '@hooks'; +import Modal from '@components/common/Modal'; import Select from '@components/common/Select'; -import TwoButtonModal from '@components/common/TwoButtonModal'; import { REPORT_TYPE } from './constants'; - +import * as S from './style'; interface UserReportModalProps { + handleModalClose: () => void; reportType: ReportType; handleCancelClick: () => void; - handleReportClick: (reason: string) => void; + handleReportClick: (reason: ReportMessage) => void; isReportLoading: boolean; } export default function ReportModal({ + handleModalClose, reportType, handleCancelClick, handleReportClick, isReportLoading, }: UserReportModalProps) { const { name, reportMessageList } = REPORT_TYPE[reportType]; - const defaultReportMessage = Object.keys(reportMessageList)[0]; - const { selectedOption, handleOptionChange } = useSelect(defaultReportMessage); + const defaultReportMessage = Object.keys(reportMessageList)[0] as ReportMessage; + const { selectedOption, handleOptionChange } = useSelect(defaultReportMessage); const handlePrimaryButtonClick = () => { - !isReportLoading && handleReportClick(selectedOption); + if (isReportLoading) return; + + handleReportClick(selectedOption); handleCancelClick(); }; return ( - - + +
); } diff --git a/frontend/src/components/ReportModal/style.ts b/frontend/src/components/ReportModal/style.ts new file mode 100644 index 000000000..b0416d422 --- /dev/null +++ b/frontend/src/components/ReportModal/style.ts @@ -0,0 +1,5 @@ +import { styled } from 'styled-components'; + +export const ModalBody = styled.p` + padding: 20px; +`; diff --git a/frontend/src/components/ToastContainer/index.tsx b/frontend/src/components/ToastContainer/index.tsx new file mode 100644 index 000000000..193f05571 --- /dev/null +++ b/frontend/src/components/ToastContainer/index.tsx @@ -0,0 +1,20 @@ +import { ToastInfo } from '@hooks/context/toast'; + +import Toast from '@components/common/Toast'; + +import * as S from './style'; +interface ToastContainerProps { + toastList: ToastInfo[]; +} + +export default function ToastContainer({ toastList }: ToastContainerProps) { + return ( + + {toastList.map(toast => ( + + {toast.text} + + ))} + + ); +} diff --git a/frontend/src/components/ToastContainer/style.ts b/frontend/src/components/ToastContainer/style.ts new file mode 100644 index 000000000..b891f6fee --- /dev/null +++ b/frontend/src/components/ToastContainer/style.ts @@ -0,0 +1,30 @@ +import styled from 'styled-components'; + +import { theme } from '@styles/theme'; + +// 컨테이너를 가로중앙에 위치시키기 위해 left = width * 1/2로 설정 +export const Container = styled.div` + width: 80%; + + position: fixed; + bottom: 20vh; + left: 10%; + + z-index: ${theme.zIndex.toast}; + + > * { + margin-top: 3px; + } + + @media (min-width: ${theme.breakpoint.sm}) { + width: 60%; + + left: 20%; + } + + @media (min-width: ${theme.breakpoint.md}) { + width: 50%; + + left: 25%; + } +`; diff --git a/frontend/src/components/comment/CommentList/CommentItem/CommentItem.stories.tsx b/frontend/src/components/comment/CommentList/CommentItem/CommentItem.stories.tsx index f802d0fc8..724a1c454 100644 --- a/frontend/src/components/comment/CommentList/CommentItem/CommentItem.stories.tsx +++ b/frontend/src/components/comment/CommentList/CommentItem/CommentItem.stories.tsx @@ -1,8 +1,8 @@ import type { Meta, StoryObj } from '@storybook/react'; -import { MOCK_TRANSFORMED_COMMENT_LIST } from '@mocks/mockData/comment'; +import { COMMENT_USER } from '@constants/post'; -import { COMMENT_USER } from '../constants'; +import { MOCK_TRANSFORMED_COMMENT_LIST } from '@mocks/mockData/comment'; import CommentItem from '.'; diff --git a/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/CommentMenu.stories.tsx b/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/CommentMenu.stories.tsx deleted file mode 100644 index 338865652..000000000 --- a/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/CommentMenu.stories.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/react'; - -import { COMMENT_MENU } from '../../constants'; - -import CommentMenu from '.'; - -const meta: Meta = { - component: CommentMenu, -}; - -export default meta; -type Story = StoryObj; - -export const WriterUser: Story = { - render: () => {}} />, -}; - -export const NotWriterUser: Story = { - render: () => {}} />, -}; diff --git a/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/index.tsx b/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/index.tsx deleted file mode 100644 index cde3ae431..000000000 --- a/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/index.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { MouseEvent } from 'react'; - -import { type CommentAction, type CommentMenuItem } from '@components/comment/CommentList/types'; - -import * as S from './style'; - -interface CommentMenuProps { - menuList: CommentMenuItem[]; - handleMenuClick: (menu: CommentAction) => void; -} - -export default function CommentMenu({ menuList, handleMenuClick }: CommentMenuProps) { - return ( - - {menuList.map(({ content, color, action }) => ( - { - event.stopPropagation(); - handleMenuClick(action); - }} - > - {content} - - ))} - - ); -} diff --git a/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/style.ts b/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/style.ts deleted file mode 100644 index 26658404f..000000000 --- a/frontend/src/components/comment/CommentList/CommentItem/CommentMenu/style.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { styled } from 'styled-components'; - -import { type CommentMenuItem } from '../../types'; - -const COLOR_PALETTE: Record = { - red: 'var(--primary-color)', - black: '#727171', -}; - -export const Container = styled.div` - display: flex; - flex-direction: column; - align-items: center; - - width: max-content; - border: 1px solid rgba(0, 0, 0, 0.4); - border-radius: 6px; - - background-color: var(--white); - - font: var(--text-caption); -`; - -export const Menu = styled.button<{ $color: CommentMenuItem['color'] }>` - padding: 10px 15px; - border-bottom: 1px solid rgba(0, 0, 0, 0.4); - - color: ${({ $color }) => COLOR_PALETTE[$color]}; - background-color: white; - - cursor: pointer; - - &:hover { - background-color: var(--gray); - } - - &:first-child { - border-radius: 6px 6px 0 0; - } - - &:last-child { - border-radius: 0 0 6px 6px; - border-bottom: none; - } -`; diff --git a/frontend/src/components/comment/CommentList/CommentItem/index.tsx b/frontend/src/components/comment/CommentList/CommentItem/index.tsx index 8c08f45ac..73b12ce49 100644 --- a/frontend/src/components/comment/CommentList/CommentItem/index.tsx +++ b/frontend/src/components/comment/CommentList/CommentItem/index.tsx @@ -1,29 +1,26 @@ -import { useEffect, useState } from 'react'; +import { useState } from 'react'; import { useParams } from 'react-router-dom'; import { Comment } from '@type/comment'; -import { ReportRequest } from '@type/report'; +import { CommentAction, CommentUser } from '@type/menu'; +import { ReportMessage, ReportRequest } from '@type/report'; import { useToggle } from '@hooks'; -import { useToast } from '@hooks'; import { useDeleteComment } from '@hooks/query/comment/useDeleteComment'; - -import { reportContent } from '@api/report'; +import { useReportContent } from '@hooks/query/report/useReportContent'; import CommentTextForm from '@components/comment/CommentList/CommentTextForm'; import DeleteModal from '@components/common/DeleteModal'; -import Toast from '@components/common/Toast'; +import Menu from '@components/common/Menu'; import ReportModal from '@components/ReportModal'; +import { COMMENT_ACTION, COMMENT_MENU, COMMENT_USER, COMMENT_USER_MENU } from '@constants/post'; + import { convertTextToElement } from '@utils/post/convertTextToElement'; import ellipsis from '@assets/ellipsis-horizontal.svg'; -import { COMMENT_ACTION, COMMENT_MENU, COMMENT_USER, COMMENT_USER_MENU } from '../constants'; -import { type CommentAction, type CommentUser } from '../types'; - -import CommentMenu from './CommentMenu'; import * as S from './style'; interface CommentItemProps { comment: Comment; @@ -31,64 +28,29 @@ interface CommentItemProps { } export default function CommentItem({ comment, userType }: CommentItemProps) { - const [isReportCommentLoading, setIsReportCommentLoading] = useState(false); - const [isReportNicknameLoading, setIsReportNicknameLoading] = useState(false); - const { isOpen, toggleComponent, closeComponent } = useToggle(); - const { isToastOpen, openToast, toastMessage } = useToast(); const { id, member, content, createdAt, isEdit } = comment; const [action, setAction] = useState(null); const params = useParams() as { postId: string }; const postId = Number(params.postId); - const { mutate, isError, error, isLoading: isCommentDeleting } = useDeleteComment(postId, id); + const { mutate: deleteComment, isLoading: isCommentDeleting } = useDeleteComment(postId, id); + const { mutate: reportContent, isLoading: isContentReporting } = useReportContent(); const handleMenuClick = (menu: CommentAction) => { closeComponent(); setAction(menu); }; - const handleCommentReportClick = async (reason: string) => { + const handleCommentReportClick = async (reason: ReportMessage) => { const reportData: ReportRequest = { type: 'COMMENT', id, reason }; - setIsReportCommentLoading(true); - - await reportContent(reportData) - .then(res => { - openToast('댓글을 신고했습니다.'); - }) - .catch(e => { - if (e instanceof Error) { - const errorResposne = JSON.parse(e.message); - openToast(errorResposne.message); - return; - } - openToast('댓글 신고가 실패했습니다.'); - }) - .finally(() => { - setIsReportCommentLoading(false); - }); + reportContent(reportData); }; - const handleNicknameReportClick = async (reason: string) => { + const handleNicknameReportClick = async (reason: ReportMessage) => { const reportData: ReportRequest = { type: 'NICKNAME', id: member.id, reason }; - setIsReportNicknameLoading(true); - - await reportContent(reportData) - .then(res => { - openToast('작성자 닉네임을 신고했습니다.'); - }) - .catch(e => { - if (e instanceof Error) { - const errorResposne = JSON.parse(e.message); - openToast(errorResposne.message); - return; - } - openToast('작성자 닉네임 신고가 실패했습니다.'); - }) - .finally(() => { - setIsReportNicknameLoading(false); - }); + reportContent(reportData); }; const handleCancelClick = () => { @@ -96,17 +58,9 @@ export default function CommentItem({ comment, userType }: CommentItemProps) { }; const handleDeleteClick = () => { - mutate(); + deleteComment(); }; - useEffect(() => { - if (isError && error instanceof Error) { - const errorResponse = JSON.parse(error.message); - openToast(errorResponse.message); - return; - } - }, [isError, error]); - const USER_TYPE = COMMENT_USER_MENU[userType]; const isAllowedMenu = userType !== COMMENT_USER.GUEST && action !== COMMENT_ACTION.EDIT; @@ -137,7 +91,7 @@ export default function CommentItem({ comment, userType }: CommentItemProps) { > {isOpen && ( - + )} @@ -164,25 +118,22 @@ export default function CommentItem({ comment, userType }: CommentItemProps) { )} {action === COMMENT_ACTION.USER_REPORT && ( )} {action === COMMENT_ACTION.COMMENT_REPORT && ( )} - {isToastOpen && ( - - {toastMessage} - - )} ); } diff --git a/frontend/src/components/comment/CommentList/CommentTextForm/index.tsx b/frontend/src/components/comment/CommentList/CommentTextForm/index.tsx index 57f6c8b53..6805859e5 100644 --- a/frontend/src/components/comment/CommentList/CommentTextForm/index.tsx +++ b/frontend/src/components/comment/CommentList/CommentTextForm/index.tsx @@ -1,14 +1,14 @@ -import { ChangeEvent, useEffect } from 'react'; +import { ChangeEvent, KeyboardEvent, useContext, useEffect } from 'react'; import { useParams } from 'react-router-dom'; import { Comment } from '@type/comment'; -import { useToast } from '@hooks'; import { useText } from '@hooks'; import { useCreateComment, useEditComment } from '@hooks'; +import { ToastContext } from '@hooks/context/toast'; + import SquareButton from '@components/common/SquareButton'; -import Toast from '@components/common/Toast'; import { POST_COMMENT } from '@constants/policy'; @@ -26,13 +26,8 @@ export default function CommentTextForm({ initialComment, handleCancelClick, }: CommentTextFormProps) { - const { - text: content, - handleTextChange, - resetText, - addText: addContent, - } = useText(initialComment.content); - const { isToastOpen, openToast, toastMessage } = useToast(); + const { addMessage } = useContext(ToastContext); + const { text: content, handleTextChange, resetText } = useText(initialComment.content); const params = useParams() as { postId: string }; const postId = Number(params.postId); @@ -42,21 +37,17 @@ export default function CommentTextForm({ const { mutate: createComment, isSuccess: isCreateSuccess, - isError: isCreateError, - error: createError, isLoading: createLoading, } = useCreateComment(postId); const { mutate: editComment, isSuccess: isEditSuccess, - isError: isEditError, - error: editError, isLoading: editLoading, } = useEditComment(postId, commentId); const handleUpdateComment = () => { if (content.trim() === '') { - openToast('댓글에 내용을 입력해주세요.'); + addMessage('댓글에 내용을 입력해주세요.'); return; } if (isEdit) { @@ -66,6 +57,14 @@ export default function CommentTextForm({ createComment({ content: deleteOverlappingNewLine(content) }); }; + const handleKeyboardCommentSubmit = (event: KeyboardEvent) => { + const isPressCtrlAndEnterKey = (event.metaKey || event.ctrlKey) && event.key === 'Enter'; + + if (isPressCtrlAndEnterKey) { + handleUpdateComment(); + } + }; + useEffect(() => { isCreateSuccess && resetText(); }, [isCreateSuccess]); @@ -74,22 +73,6 @@ export default function CommentTextForm({ isEditSuccess && handleCancelClick && handleCancelClick(); }, [isEditSuccess]); - useEffect(() => { - if (isCreateError && createError instanceof Error) { - const errorResponse = JSON.parse(createError.message); - openToast(errorResponse.message); - return; - } - }, [isCreateError, createError]); - - useEffect(() => { - if (isEditError && editError instanceof Error) { - const errorResponse = JSON.parse(editError.message); - openToast(errorResponse.message); - return; - } - }, [isEditError, editError]); - return ( ) => handleTextChange(e, POST_COMMENT)} + onKeyDown={handleKeyboardCommentSubmit} /> + Ctrl(Command) + Enter 키로 댓글을 저장할 수 있습니다 {isEdit && ( @@ -111,16 +96,6 @@ export default function CommentTextForm({ )} - - addContent('[[괄호 안에 링크 작성]] ')} - theme="blank" - type="button" - > - 링크 넣기 - - - {isToastOpen && ( - - {toastMessage} - - )} ); } diff --git a/frontend/src/components/comment/CommentList/CommentTextForm/style.ts b/frontend/src/components/comment/CommentList/CommentTextForm/style.ts index 8b559482b..0098ee9a4 100644 --- a/frontend/src/components/comment/CommentList/CommentTextForm/style.ts +++ b/frontend/src/components/comment/CommentList/CommentTextForm/style.ts @@ -20,13 +20,12 @@ export const TextArea = styled.textarea` resize: none; &::placeholder { - font-size: 14px; + font-size: 1.4rem; } @media (max-width: ${theme.breakpoint.sm}) { &::placeholder { - font-size: 12px; - line-height: 2rem; + font: var(--text-small); } } @@ -58,3 +57,16 @@ export const ButtonWrapper = styled.div` font: var(--text-body); } `; + +export const KeyDescription = styled.span` + margin-top: 20px; + + text-align: right; + font: var(--text-small); + + color: var(--dark-gray); + + @media (min-width: ${theme.breakpoint.sm}) { + font-size: 1.4rem; + } +`; diff --git a/frontend/src/components/comment/CommentList/constants.ts b/frontend/src/components/comment/CommentList/constants.ts deleted file mode 100644 index d3a135691..000000000 --- a/frontend/src/components/comment/CommentList/constants.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { CommentMenu, CommentMenuItem, CommentUser } from './types'; - -export const COMMENT_USER = { - GUEST: 'GUEST', - NOT_WRITER: 'NOT_WRITER', - WRITER: 'WRITER', -} as const; - -export const COMMENT_ACTION = { - DELETE: 'delete', - USER_REPORT: 'userReport', - COMMENT_REPORT: 'commentReport', - EDIT: 'edit', -} as const; - -export const COMMENT_USER_MENU: Record = { - [COMMENT_USER.GUEST]: COMMENT_USER.NOT_WRITER, - [COMMENT_USER.NOT_WRITER]: COMMENT_USER.NOT_WRITER, - [COMMENT_USER.WRITER]: COMMENT_USER.WRITER, -} as const; - -export const COMMENT_MENU: Record = { - [COMMENT_USER.NOT_WRITER]: [ - { color: 'black', content: '닉네임 신고', action: COMMENT_ACTION.USER_REPORT }, - { color: 'black', content: '댓글 신고', action: COMMENT_ACTION.COMMENT_REPORT }, - ], - [COMMENT_USER.WRITER]: [ - { content: '수정', color: 'black', action: COMMENT_ACTION.EDIT }, - { content: '삭제', color: 'red', action: COMMENT_ACTION.DELETE }, - ], -}; diff --git a/frontend/src/components/comment/CommentList/index.tsx b/frontend/src/components/comment/CommentList/index.tsx index 212d7b4b8..ceec3fbc8 100644 --- a/frontend/src/components/comment/CommentList/index.tsx +++ b/frontend/src/components/comment/CommentList/index.tsx @@ -4,12 +4,13 @@ import { useCommentList, useMoreComment, AuthContext } from '@hooks'; import SquareButton from '@components/common/SquareButton'; +import { COMMENT_USER } from '@constants/post'; + import { smoothScrollToTop } from '@utils/scrollToTop'; import CommentItem from './CommentItem'; import CommentLoginSection from './CommentLoginSection'; import CommentTextForm from './CommentTextForm'; -import { COMMENT_USER } from './constants'; import * as S from './style'; interface CommentListProps { @@ -62,6 +63,9 @@ export default function CommentList({ postId, postWriterName }: CommentListProps )} + {commentList && commentList.length !== 0 && ( + 댓글 {commentList.length}개 + )} {slicedCommentList.map((comment, index) => { if (index % 10 === 9) { return ( diff --git a/frontend/src/components/comment/CommentList/style.ts b/frontend/src/components/comment/CommentList/style.ts index 21a98e255..62e03fe77 100644 --- a/frontend/src/components/comment/CommentList/style.ts +++ b/frontend/src/components/comment/CommentList/style.ts @@ -21,6 +21,13 @@ export const ListContainer = styled.div` position: relative; `; +export const CommentCount = styled.p` + margin-left: 1px; + + font: var(--text-body); + font-weight: bold; +`; + export const MoreButtonWrapper = styled.div` width: 80px; height: 46px; diff --git a/frontend/src/components/comment/CommentList/types.ts b/frontend/src/components/comment/CommentList/types.ts deleted file mode 100644 index b082af694..000000000 --- a/frontend/src/components/comment/CommentList/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { COMMENT_ACTION, COMMENT_USER } from './constants'; - -export type CommentAction = (typeof COMMENT_ACTION)[keyof typeof COMMENT_ACTION]; - -export type CommentUser = (typeof COMMENT_USER)[keyof typeof COMMENT_USER]; - -export type CommentMenu = Exclude; - -export interface CommentMenuItem { - content: string; - color: 'black' | 'red'; - action: CommentAction; -} diff --git a/frontend/src/components/common/Accordion/Accordion.stories.tsx b/frontend/src/components/common/Accordion/Accordion.stories.tsx index 10e7d22aa..1512914c4 100644 --- a/frontend/src/components/common/Accordion/Accordion.stories.tsx +++ b/frontend/src/components/common/Accordion/Accordion.stories.tsx @@ -38,7 +38,20 @@ export const NicknameChange: Story = { }; export const DeleteUserAccount = () => { - const { isOpen, openComponent, closeComponent } = useToggle(); + const { isOpen, openComponent, closeComponent: closeModal } = useToggle(); + + const primaryButton = { + text: '탈퇴', + handleClick: () => { + alert('회원 탈퇴가 완료되었습니다.'); + }, + }; + + const secondaryButton = { + text: '취소', + handleClick: closeModal, + }; + return ( @@ -47,20 +60,17 @@ export const DeleteUserAccount = () => { {isOpen && ( - + - 정말 탈퇴하시겠어요? 탈퇴 버튼 클릭 시,

계정은 삭제되며 복구되지 않아요.
- - - 탈퇴 - - - 취소 - -
)} @@ -92,21 +102,6 @@ const ModalBody = styled.div` font: var(--text-caption); `; -const ModalTitle = styled.div` - font: var(--text-title); -`; - const ModalDescription = styled.div` font: var(--text-body); `; - -const ButtonListWrapper = styled.div` - display: flex; - justify-content: space-around; - gap: 20px; - - width: 90%; - height: 50px; - - margin-top: 20px; -`; diff --git a/frontend/src/components/common/ActiveContainer/ActiveContainer.stories.tsx b/frontend/src/components/common/ActiveContainer/ActiveContainer.stories.tsx new file mode 100644 index 000000000..2139d7e58 --- /dev/null +++ b/frontend/src/components/common/ActiveContainer/ActiveContainer.stories.tsx @@ -0,0 +1,33 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import IconButton from '../IconButton'; + +import ActiveContainer from '.'; + +const meta: Meta = { + component: ActiveContainer, + decorators: [ + storyFn => ( +
{storyFn()}
+ ), + ], +}; + +export default meta; +type Story = StoryObj; + +export const Active: Story = { + render: () => ( + + + + ), +}; + +export const NotActive: Story = { + render: () => ( + + + + ), +}; diff --git a/frontend/src/components/common/ActiveContainer/index.tsx b/frontend/src/components/common/ActiveContainer/index.tsx new file mode 100644 index 000000000..5638eb6e7 --- /dev/null +++ b/frontend/src/components/common/ActiveContainer/index.tsx @@ -0,0 +1,17 @@ +import { ReactNode } from 'react'; + +import * as S from './style'; + +interface ActiveContainerProps { + isActive: boolean; + children: ReactNode; +} + +export default function ActiveContainer({ isActive, children }: ActiveContainerProps) { + return ( + + + {children} + + ); +} diff --git a/frontend/src/components/common/ActiveContainer/style.ts b/frontend/src/components/common/ActiveContainer/style.ts new file mode 100644 index 000000000..df6863d6b --- /dev/null +++ b/frontend/src/components/common/ActiveContainer/style.ts @@ -0,0 +1,17 @@ +import { styled } from 'styled-components'; + +export const Container = styled.div` + position: relative; +`; + +export const Active = styled.div<{ $isActive: boolean }>` + width: 7px; + height: 7px; + border-radius: 50%; + + position: absolute; + bottom: 32px; + left: 32px; + + background-color: ${props => props.$isActive && 'var(--primary-color)'}; +`; diff --git a/frontend/src/components/common/AppInstallPrompt/BookMarkPrompt/style.ts b/frontend/src/components/common/AppInstallPrompt/BookMarkPrompt/style.ts index 09b08b8bf..c4c1b7d81 100644 --- a/frontend/src/components/common/AppInstallPrompt/BookMarkPrompt/style.ts +++ b/frontend/src/components/common/AppInstallPrompt/BookMarkPrompt/style.ts @@ -85,7 +85,7 @@ export const Description = styled.p` font-weight: 700; @media (max-width: 375px) and (min-width: 280px) { - font-size: 1.4rem; + font: var(--text-default); } `; diff --git a/frontend/src/components/common/AppInstallPrompt/index.tsx b/frontend/src/components/common/AppInstallPrompt/index.tsx index f31e3de87..032294991 100644 --- a/frontend/src/components/common/AppInstallPrompt/index.tsx +++ b/frontend/src/components/common/AppInstallPrompt/index.tsx @@ -2,6 +2,8 @@ import { Fragment, useEffect, useState } from 'react'; import ChannelTalk from '@components/ChannelTalk'; +import { APP_VISIBLE_MAX_AGE } from '@constants/cookie'; + import { getCookie, setCookie } from '@utils/cookie'; import { BeforeInstallPromptEvent } from '../../../../window'; @@ -39,7 +41,7 @@ export default function AppInstallPrompt() { }; const handleCancelClick = () => { - setCookie({ key: 'isAppInstallVisible', value: 'false', maxAge: 7 * 24 * 60 * 60 }); + setCookie({ key: 'isAppInstallVisible', value: 'false', maxAge: APP_VISIBLE_MAX_AGE }); setBookMarkPrompt(null); setDeferredPrompt(null); diff --git a/frontend/src/components/common/Banner/style.ts b/frontend/src/components/common/Banner/style.ts index 0e7c03efa..e89b0083d 100644 --- a/frontend/src/components/common/Banner/style.ts +++ b/frontend/src/components/common/Banner/style.ts @@ -28,10 +28,12 @@ export const Wrapper = styled.div` `; export const IconImage = styled.img` + justify-self: center; + width: 18px; height: 18px; - justify-self: center; + cursor: pointer; `; export const Content = styled.div` diff --git a/frontend/src/components/common/Dashboard/CategorySection/style.ts b/frontend/src/components/common/Dashboard/CategorySection/style.ts index 9f9ddf988..065171126 100644 --- a/frontend/src/components/common/Dashboard/CategorySection/style.ts +++ b/frontend/src/components/common/Dashboard/CategorySection/style.ts @@ -22,7 +22,7 @@ export const ContentContainer = styled.div` } @media (min-width: ${theme.breakpoint.md}) { - height: calc(100vh - 400px); + height: calc(100vh - 440px); } `; @@ -33,7 +33,7 @@ export const SelectedStateWrapper = styled.div` justify-self: start; width: 100%; - border-bottom: 2px solid var(--gray); + border-bottom: 2px solid var(--bright-gray); padding-bottom: 20px; `; diff --git a/frontend/src/components/common/Dashboard/CategoryToggle/index.tsx b/frontend/src/components/common/Dashboard/CategoryToggle/index.tsx index 760df3e5b..62ba9619a 100644 --- a/frontend/src/components/common/Dashboard/CategoryToggle/index.tsx +++ b/frontend/src/components/common/Dashboard/CategoryToggle/index.tsx @@ -1,14 +1,11 @@ -import React, { useContext, useEffect, useState } from 'react'; +import React, { useContext, useState } from 'react'; import { Category } from '@type/category'; -import { useToast } from '@hooks'; - import { AuthContext } from '@hooks/context/auth'; +import { ToastContext } from '@hooks/context/toast'; import { useCategoryFavoriteToggle } from '@hooks/query/category/useCategoryFavoriteToggle'; -import Toast from '@components/common/Toast'; - import chevronDown from '@assets/chevron-down.svg'; import chevronUp from '@assets/chevron-up.svg'; import starFilled from '@assets/star-filled.svg'; @@ -28,26 +25,23 @@ export default function CategoryToggle({ isInitialOpen = true, }: CategoryToggleProps) { const [isToggleOpen, setIsToggleOpen] = useState(isInitialOpen); - const { isToastOpen, openToast, toastMessage } = useToast(); - const { mutate, isError, error } = useCategoryFavoriteToggle(); + const { mutate } = useCategoryFavoriteToggle(); const { loggedInfo } = useContext(AuthContext); + const { addMessage } = useContext(ToastContext); const handleToggleClick = () => { setIsToggleOpen(prevIsToggleOpen => !prevIsToggleOpen); }; - useEffect(() => { - if (isError && error instanceof Error) { - if (!loggedInfo.isLoggedIn) { - openToast('즐겨찾기는 로그인 후 이용할 수 있습니다.'); - return; - } - const errorResponse = JSON.parse(error.message); - openToast(errorResponse.message); + const handleFavoriteCategoryClick = (categoryId: number, isFavorite: boolean) => { + if (!loggedInfo.isLoggedIn) { + addMessage('즐겨찾기는 로그인 후 이용할 수 있습니다.'); return; } - }, [isError, error]); + + mutate({ id: categoryId, isFavorite }); + }; return ( @@ -64,7 +58,10 @@ export default function CategoryToggle({ {categoryList.length === 0 && 현재 카테고리가 없습니다} {categoryList.map(({ id, name, isFavorite }) => ( - mutate({ id, isFavorite })}> + handleFavoriteCategoryClick(id, isFavorite)} + > {name} @@ -72,11 +69,6 @@ export default function CategoryToggle({ ))} )} - {isToastOpen && ( - - {toastMessage} - - )} ); } diff --git a/frontend/src/components/common/Dashboard/GuestProfile/index.tsx b/frontend/src/components/common/Dashboard/GuestProfile/index.tsx index 22b5fd926..3b831a0da 100644 --- a/frontend/src/components/common/Dashboard/GuestProfile/index.tsx +++ b/frontend/src/components/common/Dashboard/GuestProfile/index.tsx @@ -4,14 +4,22 @@ import { Link } from 'react-router-dom'; import { BASE_PATH } from '@constants/path'; import kakaoLogin from '@assets/kakao_login.webp'; +import bigKaKaoLogin from '@assets/kakao_login_large.webp'; import * as S from './style'; -export default function GuestProfile() { +interface GuestProfileProps { + isLargeKaKao?: boolean; +} + +export default function GuestProfile({ isLargeKaKao = false }: GuestProfileProps) { return ( - + 로그인 후 이용할 수 있습니다 diff --git a/frontend/src/components/common/Dashboard/GuestProfile/style.ts b/frontend/src/components/common/Dashboard/GuestProfile/style.ts index c9eeb1814..745de2776 100644 --- a/frontend/src/components/common/Dashboard/GuestProfile/style.ts +++ b/frontend/src/components/common/Dashboard/GuestProfile/style.ts @@ -7,7 +7,7 @@ export const Container = styled(ProfileContainer)` `; export const Image = styled.img` - width: 183px; + width: 100%; height: 40px; `; diff --git a/frontend/src/components/common/Dashboard/UserProfile/UserProfile.stories.tsx b/frontend/src/components/common/Dashboard/UserProfile/UserProfile.stories.tsx index 677cf0c73..be74c889d 100644 --- a/frontend/src/components/common/Dashboard/UserProfile/UserProfile.stories.tsx +++ b/frontend/src/components/common/Dashboard/UserProfile/UserProfile.stories.tsx @@ -17,6 +17,8 @@ const MOCK_USER_INFO: User = { birthYear: 1989, postCount: 4, voteCount: 128, + hasLatestAlarm: false, + role: 'USER', }; export const NoBadge: Story = { diff --git a/frontend/src/components/common/Dashboard/UserProfile/index.tsx b/frontend/src/components/common/Dashboard/UserProfile/index.tsx index 2630478c0..6853c8f67 100644 --- a/frontend/src/components/common/Dashboard/UserProfile/index.tsx +++ b/frontend/src/components/common/Dashboard/UserProfile/index.tsx @@ -1,3 +1,5 @@ +import { useLocation } from 'react-router-dom'; + import { User } from '@type/user'; import { PATH } from '@constants/path'; @@ -14,9 +16,19 @@ interface UserProfileProps { export default function UserProfile({ userInfo }: UserProfileProps) { const { nickname, postCount, voteCount } = userInfo; + const { pathname } = useLocation(); + return ( - {nickname} + {pathname === PATH.USER_INFO ? ( + {nickname} + ) : ( + + + {nickname} + + + )} diff --git a/frontend/src/components/common/Dashboard/index.tsx b/frontend/src/components/common/Dashboard/index.tsx index 1f00c417d..9aaef89ea 100644 --- a/frontend/src/components/common/Dashboard/index.tsx +++ b/frontend/src/components/common/Dashboard/index.tsx @@ -5,6 +5,10 @@ import { AuthContext } from '@hooks/context/auth'; import ErrorBoundary from '@pages/ErrorBoundary'; +import { PATH } from '@constants/path'; + +import arrowRight from '@assets/arrow-right.png'; + import Skeleton from '../Skeleton'; import SquareButton from '../SquareButton'; @@ -29,6 +33,10 @@ export default function Dashboard() { {userInfo ? : } + + 공지사항 보러가기 + + }> diff --git a/frontend/src/components/common/Dashboard/profileStyle.ts b/frontend/src/components/common/Dashboard/profileStyle.ts index ff27f8293..af25aa151 100644 --- a/frontend/src/components/common/Dashboard/profileStyle.ts +++ b/frontend/src/components/common/Dashboard/profileStyle.ts @@ -12,5 +12,5 @@ export const ProfileContainer = styled.section` font: var(--text-body); - background-color: var(--gray); + background-color: var(--bright-gray); `; diff --git a/frontend/src/components/common/Dashboard/style.ts b/frontend/src/components/common/Dashboard/style.ts index f5d85df0d..03084af21 100644 --- a/frontend/src/components/common/Dashboard/style.ts +++ b/frontend/src/components/common/Dashboard/style.ts @@ -1,3 +1,5 @@ +import { Link } from 'react-router-dom'; + import { styled } from 'styled-components'; import { theme } from '@styles/theme'; @@ -10,16 +12,34 @@ export const Container = styled.div` width: 225px; height: 100vh; padding: 20px; - border-right: 2px solid var(--gray); + border-right: 2px solid var(--bright-gray); @media (min-width: ${theme.breakpoint.sm}) { height: 100%; } `; +export const NoticeListLink = styled(Link)` + display: flex; + justify-content: center; + align-items: center; + + position: relative; + right: 6px; + width: 100%; + margin-top: 18px; + font: var(--text-body); +`; + +export const Image = styled.img` + width: 10px; + height: 10px; + margin-left: 10px; +`; + export const CategorySectionWrapper = styled.div` width: 100%; - margin-top: 32px; + margin-top: 25px; `; export const ButtonWrapper = styled.div` diff --git a/frontend/src/components/common/DeleteModal/index.tsx b/frontend/src/components/common/DeleteModal/index.tsx index a55f1c896..ee12d76dd 100644 --- a/frontend/src/components/common/DeleteModal/index.tsx +++ b/frontend/src/components/common/DeleteModal/index.tsx @@ -1,13 +1,15 @@ -import TwoButtonModal from '../../common/TwoButtonModal'; +import { useToggle } from '@hooks'; + +import Modal from '../Modal'; import * as S from './style'; export type TargetForDelete = 'MEMBERSHIP' | 'POST' | 'COMMENT'; const TARGET_FOR_DELETE: Record = { - MEMBERSHIP: '계정을', - POST: '게시글을', - COMMENT: '댓글을', + MEMBERSHIP: '계정', + POST: '게시글', + COMMENT: '댓글', }; interface DeleteModalProps { @@ -23,26 +25,33 @@ export default function DeleteModal({ handleDeleteClick, isDeleting, }: DeleteModalProps) { + const { isOpen: isModalOpen, closeComponent: closeModal } = useToggle(true); + const handlePrimaryButtonClick = () => { !isDeleting && handleDeleteClick(); handleCancelClick(); }; return ( - - {`${TARGET_FOR_DELETE[target]} 삭제하시겠습니까?\n${TARGET_FOR_DELETE[target]} 삭제하면 취소할 수 없습니다.`} - + <> + {isModalOpen && ( + + {`${TARGET_FOR_DELETE[target]}을 삭제하시겠습니까?\n삭제 버튼 클릭 시 취소할 수 없습니다.`} + + )} + ); } diff --git a/frontend/src/components/common/DeleteModal/style.ts b/frontend/src/components/common/DeleteModal/style.ts index 18a1d0b4c..dfcc37be7 100644 --- a/frontend/src/components/common/DeleteModal/style.ts +++ b/frontend/src/components/common/DeleteModal/style.ts @@ -1,14 +1,10 @@ import { styled } from 'styled-components'; -import { theme } from '@styles/theme'; - export const Description = styled.p` + padding: 0 20px; + color: #67727e; - font: var(--text-caption); + font-size: 14px; white-space: pre-wrap; - - @media (min-width: ${theme.breakpoint.sm}) { - font: var(--text-body); - } `; diff --git a/frontend/src/components/common/Drawer/Drawer.stories.tsx b/frontend/src/components/common/Drawer/Drawer.stories.tsx index f37c1d6bc..8e68819c5 100644 --- a/frontend/src/components/common/Drawer/Drawer.stories.tsx +++ b/frontend/src/components/common/Drawer/Drawer.stories.tsx @@ -18,7 +18,7 @@ export const LeftSideBar = () => { return (
- + {}} /> @@ -31,7 +31,7 @@ export const RightSideBar = () => { return (
- + {}} /> diff --git a/frontend/src/components/common/Drawer/index.tsx b/frontend/src/components/common/Drawer/index.tsx index dff587262..a5f54d8d3 100644 --- a/frontend/src/components/common/Drawer/index.tsx +++ b/frontend/src/components/common/Drawer/index.tsx @@ -35,9 +35,9 @@ export default forwardRef(function Drawer( }; const handleKeyDown = (event: KeyboardEvent) => { - event.preventDefault(); - if (event.currentTarget.open && event.key === 'Escape') { + event.preventDefault(); + handleDrawerClose(); } }; @@ -56,7 +56,6 @@ export default forwardRef(function Drawer( > 사이드바 닫기버튼 {children} -
); }); diff --git a/frontend/src/components/common/ErrorItem/ErrorItem.stories.tsx b/frontend/src/components/common/ErrorItem/ErrorItem.stories.tsx new file mode 100644 index 000000000..6cf9b18c5 --- /dev/null +++ b/frontend/src/components/common/ErrorItem/ErrorItem.stories.tsx @@ -0,0 +1,40 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import ErrorItem from '.'; + +const meta: Meta = { + component: ErrorItem, + args: { + text: '에러메세지를 작성할 수 있습니다.', + hasIcon: true, + hasRetryInteraction: true, + hasHomeInteraction: true, + }, + argTypes: { + hasIcon: { + control: { + type: 'radio', + }, + options: [true, false], + }, + hasRetryInteraction: { + control: { + type: 'radio', + }, + options: [true, false], + }, + hasHomeInteraction: { + control: { + type: 'radio', + }, + options: [true, false], + }, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: args => , +}; diff --git a/frontend/src/components/common/ErrorItem/index.tsx b/frontend/src/components/common/ErrorItem/index.tsx new file mode 100644 index 000000000..2aad80aba --- /dev/null +++ b/frontend/src/components/common/ErrorItem/index.tsx @@ -0,0 +1,61 @@ +import { useNavigate } from 'react-router-dom'; + +import LogoButton from '../LogoButton'; +import SquareButton from '../SquareButton'; + +import * as S from './style'; + +export interface ErrorItemProps { + text?: string; + hasIcon?: boolean; + hasRetryInteraction?: boolean; + hasHomeInteraction?: boolean; +} + +export default function ErrorItem({ + text = '요청하신 데이터를 불러오는데 실패했습니다.', + hasIcon: haveIcon = false, + hasRetryInteraction = false, + hasHomeInteraction = false, +}: ErrorItemProps) { + const navigate = useNavigate(); + + return ( + <> + + {haveIcon && } + {text} + {hasRetryInteraction && ( + + 문제가 지속되는 경우 votogether2023@gmail.com 로 문의해주세요. + + )} + + {hasHomeInteraction && ( + + { + navigate('/'); + }} + > + 홈으로 가기 + + + )} + {hasRetryInteraction && ( + + window.location.reload()} + aria-label="다시 시도" + theme="blank" + > + 다시 시도 + + + )} + + + + ); +} diff --git a/frontend/src/components/common/ErrorItem/style.ts b/frontend/src/components/common/ErrorItem/style.ts new file mode 100644 index 000000000..d06800044 --- /dev/null +++ b/frontend/src/components/common/ErrorItem/style.ts @@ -0,0 +1,47 @@ +import { styled } from 'styled-components'; + +export const Wrapper = styled.div` + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 20px; + + position: relative; +`; + +export const Title = styled.h1` + width: 90%; + margin-top: 20px; + + color: rgba(0, 0, 0, 0.7); + + font-size: 20px; + font-weight: bold; + + text-align: center; + word-break: keep-all; +`; + +export const Description = styled.p` + width: 90%; + + color: gray; + + font: var(--text-body); + text-align: center; + word-break: keep-all; +`; + +export const ButtonContainer = styled.div` + display: flex; + + gap: 20px; + + margin-top: 50px; +`; + +export const ButtonWrapper = styled.div` + width: 140px; + height: 50px; +`; diff --git a/frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx b/frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx deleted file mode 100644 index 5e6ea822b..000000000 --- a/frontend/src/components/common/ErrorMessage/ErrorMessage.stories.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/react'; - -import ErrorMessage from '.'; - -const meta: Meta = { - component: ErrorMessage, -}; - -export default meta; -type Story = StoryObj; - -export const Default: Story = { - render: () => , -}; diff --git a/frontend/src/components/common/ErrorMessage/index.tsx b/frontend/src/components/common/ErrorMessage/index.tsx deleted file mode 100644 index 5f9f68766..000000000 --- a/frontend/src/components/common/ErrorMessage/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useNavigate } from 'react-router-dom'; - -import LogoButton from '../LogoButton'; -import SquareButton from '../SquareButton'; - -import * as S from './style'; - -export default function ErrorMessage() { - const navigate = useNavigate(); - - return ( - <> - - 요청하신 데이터를 불러오는데 실패했습니다. - - - 오류가 지속되는 경우 votogether2023@gmail.com 로 문의해주세요. - - - - { - navigate('/'); - }} - > - 홈으로 가기 - - - - window.location.reload()} - aria-label="다시 시도" - theme="blank" - > - 다시 시도 - - - - - - ); -} diff --git a/frontend/src/components/common/ErrorMessage/style.ts b/frontend/src/components/common/ErrorMessage/style.ts deleted file mode 100644 index 3ddc24393..000000000 --- a/frontend/src/components/common/ErrorMessage/style.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { styled } from 'styled-components'; - -import { theme } from '@styles/theme'; - -export const HeaderContainer = styled.header` - position: fixed; - width: 100%; - top: 0; - - z-index: ${theme.zIndex.header}; - - @media (min-width: ${theme.breakpoint.sm}) { - display: none; - } -`; - -export const Wrapper = styled.div` - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 20px; - - position: relative; - - margin: 70px 10px 20px 10px; -`; - -export const HeaderWrapper = styled.div` - width: 100%; - - position: fixed; - - z-index: ${theme.zIndex.header}; - - @media (min-width: ${theme.breakpoint.md}) { - display: none; - } -`; - -export const Title = styled.h1` - width: 90%; - margin-top: 40px; - - color: rgba(0, 0, 0, 0.7); - - font-size: 20px; - font-weight: bold; - - text-align: center; - word-break: keep-all; -`; - -export const Description = styled.p` - width: 90%; - margin-bottom: 50px; - - color: gray; - - font: var(--text-body); - text-align: center; - word-break: keep-all; -`; - -export const Direction = styled.div` - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 10px; -`; - -export const RetryText = styled.p` - font: var(--text-body); - font-weight: bold; -`; - -export const ButtonWrapper = styled.div` - width: 140px; - height: 50px; -`; - -export const Text = styled.p` - width: 90%; - - color: gray; - - font: var(--text-body); - text-align: center; -`; - -export const Image = styled.img` - width: 24px; - height: 24px; - - position: relative; - top: 2px; - - margin-right: 4px; -`; - -export const RetryWrapper = styled.div` - display: flex; - justify-content: center; - align-items: center; -`; - -export const ButtonContainer = styled.div` - display: flex; - - gap: 20px; -`; diff --git a/frontend/src/components/common/IconButton/IconButton.stories.tsx b/frontend/src/components/common/IconButton/IconButton.stories.tsx index 29fc59a37..d26692883 100644 --- a/frontend/src/components/common/IconButton/IconButton.stories.tsx +++ b/frontend/src/components/common/IconButton/IconButton.stories.tsx @@ -37,8 +37,8 @@ export const Retry: Story = { render: () => , }; -export const UserInfo: Story = { - render: () => , +export const Alarm: Story = { + render: () => , }; export const Ranking: Story = { diff --git a/frontend/src/components/common/IconButton/index.tsx b/frontend/src/components/common/IconButton/index.tsx index 012a64cc1..5ed497a69 100644 --- a/frontend/src/components/common/IconButton/index.tsx +++ b/frontend/src/components/common/IconButton/index.tsx @@ -1,15 +1,15 @@ import { ButtonHTMLAttributes } from 'react'; import backIcon from '@assets/back.svg'; +import bellIcon from '@assets/bell.png'; import categoryIcon from '@assets/category.svg'; import ranking from '@assets/ranking.png'; import retryIcon from '@assets/retry.svg'; import searchIcon from '@assets/search_white.svg'; -import userInfo from '@assets/user.png'; import * as S from './style'; -type IconCategory = 'category' | 'back' | 'search' | 'retry' | 'userInfo' | 'ranking'; +type IconCategory = 'category' | 'back' | 'search' | 'retry' | 'alarm' | 'ranking'; interface IconInfo { name: string; @@ -38,9 +38,9 @@ const ICON_CATEGORY: Record = { url: retryIcon, isRoundBackground: false, }, - userInfo: { - name: '사용자 페이지 이동', - url: userInfo, + alarm: { + name: '알림', + url: bellIcon, isRoundBackground: true, }, ranking: { diff --git a/frontend/src/components/common/IconButton/style.ts b/frontend/src/components/common/IconButton/style.ts index 1317df709..7b8d16708 100644 --- a/frontend/src/components/common/IconButton/style.ts +++ b/frontend/src/components/common/IconButton/style.ts @@ -5,7 +5,12 @@ export const Button = styled.button<{ $isRoundBackground: boolean }>` height: 35px; border-radius: 50%; - background-color: ${props => (props.$isRoundBackground ? 'var(--gray)' : 'rgba(0, 0, 0, 0)')}; + background-color: ${props => (props.$isRoundBackground ? 'var(--bright-gray)' : '')}; cursor: pointer; + + > * { + width: ${props => props.$isRoundBackground && '20px'}; + height: ${props => props.$isRoundBackground && '20px'}; + } `; diff --git a/frontend/src/components/common/ImageZoomModal/ImageZoomModal.stories.tsx b/frontend/src/components/common/ImageZoomModal/ImageZoomModal.stories.tsx new file mode 100644 index 000000000..5417d0b99 --- /dev/null +++ b/frontend/src/components/common/ImageZoomModal/ImageZoomModal.stories.tsx @@ -0,0 +1,68 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import React from 'react'; + +import styled from 'styled-components'; + +import { useImageZoomModal } from '@hooks/useImageZoomModal'; + +import { theme } from '@styles/theme'; + +import ImageZoomModal from '.'; + +const meta: Meta = { + component: ImageZoomModal, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; + +function ImageZoomModalStory() { + const { closeZoomModal, handleCloseClick, handleImageClick, imageSrc, zoomModalRef } = + useImageZoomModal(); + + return ( + <> + + {IMAGE_URL_LIST.map(item => ( + + ))} + + + + ); +} + +const getRandomImageUrl = (signal: number) => `https://source.unsplash.com/random/sig=${signal}`; + +const IMAGE_URL_LIST = Array.from({ length: 50 }, (__, index) => getRandomImageUrl(index)); + +const Container = styled.div` + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 15px; + + @media (min-width: ${theme.breakpoint.md}) { + grid-template-columns: repeat(4, 1fr); + } + + @media (min-width: ${theme.breakpoint.lg}) { + grid-template-columns: repeat(5, 1fr); + } +`; + +const Image = styled.img` + width: 100%; + object-fit: contain; + + cursor: pointer; +`; diff --git a/frontend/src/components/common/ImageZoomModal/index.tsx b/frontend/src/components/common/ImageZoomModal/index.tsx new file mode 100644 index 000000000..62208280c --- /dev/null +++ b/frontend/src/components/common/ImageZoomModal/index.tsx @@ -0,0 +1,36 @@ +import { ForwardedRef, MouseEvent, forwardRef } from 'react'; + +import cancel from '@assets/x_mark_black.svg'; + +import * as S from './style'; + +interface ImageZoomModalProps { + src: string; + handleCloseClick: (event: MouseEvent) => void; + closeZoomModal: () => void; +} + +const ImageZoomModal = forwardRef(function ImageZoomModal( + { src, handleCloseClick, closeZoomModal }: ImageZoomModalProps, + ref: ForwardedRef +) { + return ( + + + 이미지 확대 창 닫기 + + + + + + + ); +}); + +export default ImageZoomModal; diff --git a/frontend/src/components/common/ImageZoomModal/style.ts b/frontend/src/components/common/ImageZoomModal/style.ts new file mode 100644 index 000000000..ff90d63d4 --- /dev/null +++ b/frontend/src/components/common/ImageZoomModal/style.ts @@ -0,0 +1,71 @@ +import { styled } from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const Dialog = styled.dialog` + position: fixed; + + margin: auto; + + overflow: visible; + + background: none; + + z-index: ${theme.zIndex.modal}; + + &::backdrop { + background-color: rgba(0, 0, 0, 0.35); + } +`; + +export const Container = styled.div` + position: relative; + + width: 100%; + height: 100%; +`; + +export const HiddenCloseButton = styled.button` + position: absolute; + top: 0; + right: 99999px; +`; + +export const CloseButton = styled.button` + display: flex; + justify-content: center; + align-items: center; + + position: absolute; + top: -50px; + left: 0; + right: 0; + + width: fit-content; + margin: 0 auto; + padding: 8px; + border-radius: 50%; + + transition: background-color 0.2s ease-in-out; + + background-color: rgba(255, 255, 255, 0.7); + + cursor: pointer; + + &:hover { + background-color: rgba(255, 255, 255, 1); + } +`; + +export const IconImage = styled.img` + width: 24px; + height: 24px; +`; + +export const Image = styled.img` + width: 100%; + height: 100%; + max-height: 80vh; + + object-fit: contain; +`; diff --git a/frontend/src/components/common/LogoButton/index.tsx b/frontend/src/components/common/LogoButton/index.tsx index eee09b238..3fb63393c 100644 --- a/frontend/src/components/common/LogoButton/index.tsx +++ b/frontend/src/components/common/LogoButton/index.tsx @@ -1,4 +1,6 @@ -import { ButtonHTMLAttributes } from 'react'; +import { ButtonHTMLAttributes, useState } from 'react'; + +import EventMascot from '@pages/EventMascot'; import logo from '@assets/logo.svg'; import votogether from '@assets/projectName.svg'; @@ -29,11 +31,20 @@ interface LogoButtonProps extends ButtonHTMLAttributes { export default function LogoButton({ content, ...rest }: LogoButtonProps) { const src = contentCategory[content].url; const ariaLabelText = contentCategory[content].name; + const [count, setCount] = useState(0); + + //이벤트를 위한 코드 + const handleLogoClick = () => { + if (count > 5) return; + + setCount(count + 1); + }; if (content === 'full') { return ( - 로고 아이콘 + 로고 아이콘 + {count > 5 && } 보투게더 아이콘 ); @@ -41,7 +52,8 @@ export default function LogoButton({ content, ...rest }: LogoButtonProps) { return ( - 보투게더 아이콘 + 보투게더 아이콘 + {count > 5 && } ); } diff --git a/frontend/src/components/common/Menu/Menu.stories.tsx b/frontend/src/components/common/Menu/Menu.stories.tsx new file mode 100644 index 000000000..f3ee6b9ce --- /dev/null +++ b/frontend/src/components/common/Menu/Menu.stories.tsx @@ -0,0 +1,42 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { PostAction } from '@type/menu'; + +import { COMMENT_MENU } from '@constants/post'; + +import { MenuItem } from './types'; + +import Menu from '.'; + +const meta: Meta = { + component: Menu, +}; + +export default meta; +type Story = StoryObj; + +const NOT_WRITER_POST_MENU_LIST: MenuItem[] = [ + { color: 'black', content: '닉네임 신고', action: 'NICKNAME_REPORT' }, + { color: 'black', content: '게시글 신고', action: 'POST_REPORT' }, +]; + +const WRITER_POST_MENU_LIST: MenuItem[] = [ + { color: 'black', content: '수 정', action: 'EDIT' }, + { color: 'red', content: '삭 제', action: 'DELETE' }, +]; + +export const NotPostWriterUser: Story = { + render: () => {}} />, +}; + +export const PostWriterUser: Story = { + render: () => {}} />, +}; + +export const CommentWriterUser: Story = { + render: () => {}} />, +}; + +export const NotCommentWriterUser: Story = { + render: () => {}} />, +}; diff --git a/frontend/src/components/common/PostMenu/index.tsx b/frontend/src/components/common/Menu/index.tsx similarity index 63% rename from frontend/src/components/common/PostMenu/index.tsx rename to frontend/src/components/common/Menu/index.tsx index cc9cd296b..24614e1db 100644 --- a/frontend/src/components/common/PostMenu/index.tsx +++ b/frontend/src/components/common/Menu/index.tsx @@ -1,21 +1,22 @@ import { MouseEvent } from 'react'; -import { PostAction, PostMenuItem } from '@type/menu'; - import * as S from './style'; +import { MenuItem } from './types'; -interface PostMenuProps { - menuList: PostMenuItem[]; - handleMenuClick: (menu: PostAction) => void; +interface MenuProps { + menuList: MenuItem[]; + handleMenuClick: (menu: T) => void; } -export default function PostMenu({ menuList, handleMenuClick }: PostMenuProps) { +export default function Menu({ menuList, handleMenuClick }: MenuProps) { return ( {menuList.map(({ content, color, action }) => ( { event.stopPropagation(); diff --git a/frontend/src/components/common/PostMenu/style.ts b/frontend/src/components/common/Menu/style.ts similarity index 93% rename from frontend/src/components/common/PostMenu/style.ts rename to frontend/src/components/common/Menu/style.ts index 7fb0b182b..255237150 100644 --- a/frontend/src/components/common/PostMenu/style.ts +++ b/frontend/src/components/common/Menu/style.ts @@ -22,6 +22,8 @@ export const Container = styled.div` `; export const Menu = styled.button<{ $color: MenuColor }>` + width: 100%; + padding: 10px 15px; border-bottom: 1px solid rgba(0, 0, 0, 0.4); @@ -31,7 +33,7 @@ export const Menu = styled.button<{ $color: MenuColor }>` cursor: pointer; &:hover { - background-color: var(--gray); + background-color: var(--bright-gray); } &:first-child { diff --git a/frontend/src/components/common/Menu/types.ts b/frontend/src/components/common/Menu/types.ts new file mode 100644 index 000000000..31c6bac7b --- /dev/null +++ b/frontend/src/components/common/Menu/types.ts @@ -0,0 +1,5 @@ +export interface MenuItem { + content: string; + color: 'black' | 'red'; + action: T; +} diff --git a/frontend/src/components/common/MobileLayoutTemplate/index.tsx b/frontend/src/components/common/MobileLayoutTemplate/index.tsx new file mode 100644 index 000000000..d37fe3ca0 --- /dev/null +++ b/frontend/src/components/common/MobileLayoutTemplate/index.tsx @@ -0,0 +1,29 @@ +import { ReactNode } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import IconButton from '../IconButton'; +import NarrowTemplateHeader from '../NarrowTemplateHeader'; + +import * as S from './style'; + +interface MobileLayoutTemplateProps { + children: ReactNode; +} + +export default function MobileLayoutTemplate({ children }: MobileLayoutTemplateProps) { + const navigate = useNavigate(); + + return ( + <> + + { + navigate(-1); + }} + /> + + {children} + + ); +} diff --git a/frontend/src/components/common/MobileLayoutTemplate/style.ts b/frontend/src/components/common/MobileLayoutTemplate/style.ts new file mode 100644 index 000000000..939ccd4cc --- /dev/null +++ b/frontend/src/components/common/MobileLayoutTemplate/style.ts @@ -0,0 +1,11 @@ +import { styled } from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const ContentWrapper = styled.div` + margin: 70px 10px 20px 10px; + + @media (min-width: ${theme.breakpoint.sm}) { + margin-top: 30px; + } +`; diff --git a/frontend/src/components/common/Modal/Modal.stories.tsx b/frontend/src/components/common/Modal/Modal.stories.tsx index 3dfba3a4e..be42cc73f 100644 --- a/frontend/src/components/common/Modal/Modal.stories.tsx +++ b/frontend/src/components/common/Modal/Modal.stories.tsx @@ -19,7 +19,7 @@ const meta: Meta = { export default meta; export const Default = () => { - const [isOpen, setIsOpen] = useState(false); + const [isOpen, setIsOpen] = useState(true); const openModal = () => { setIsOpen(true); @@ -29,15 +29,33 @@ export const Default = () => { setIsOpen(false); }; + const primaryButton = { + text: 'Primary', + handleClick: () => { + alert('You Clicked Primary Button!'); + }, + }; + + const secondaryButton = { + text: 'Secondary', + handleClick: () => { + setIsOpen(false); + }, + }; + return ( <> Open Modal {isOpen && ( - -

This is Default Modal

-
+ )} ); @@ -54,29 +72,18 @@ export const Wide = () => { setIsOpen(false); }; - return ( - <> - - Open Modal - - {isOpen && ( - -

This is Wide Modal

-
- )} - - ); -}; - -export const WithCloseButton = () => { - const [isOpen, setIsOpen] = useState(false); - - const openModal = () => { - setIsOpen(true); + const primaryButton = { + text: 'Primary', + handleClick: () => { + alert('You Clicked Primary Button!'); + }, }; - const closeModal = () => { - setIsOpen(false); + const secondaryButton = { + text: 'Secondary', + handleClick: () => { + setIsOpen(false); + }, }; return ( @@ -85,18 +92,13 @@ export const WithCloseButton = () => { Open Modal {isOpen && ( - - <> - -

Modal Title

- X -
- - This is Description - This is Content - - -
+ )} ); @@ -113,10 +115,24 @@ export const CloseByESC = () => { setIsOpen(false); }; + const primaryButton = { + text: 'Primary', + handleClick: () => { + alert('You Clicked Primary Button!'); + }, + }; + + const secondaryButton = { + text: 'Secondary', + handleClick: () => { + setIsOpen(false); + }, + }; + useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') { - closeModal(); + secondaryButton.handleClick(); } }; @@ -135,9 +151,13 @@ export const CloseByESC = () => { Open Modal {isOpen && ( - -

Close This Modal by ESC

-
+ )} ); @@ -159,7 +179,7 @@ export const WithTimePicker = () => { setIsOpen(false); }; - const handleResetBUtton = () => { + const handleResetButton = () => { if (window.confirm('정말 초기화하시겠습니까?')) { const updatedTime = { day: 0, @@ -170,28 +190,35 @@ export const WithTimePicker = () => { } }; + const primaryButton = { + text: '저장', + handleClick: () => { + setIsOpen(false); + }, + }; + + const secondaryButton = { + text: '초기화', + handleClick: handleResetButton, + }; + return ( <> 사용자 지정 {isOpen && ( - - <> - -

마감 시간 선택

- X -
- - 최대 {MAX_DEADLINE}일을 넘을 수 없습니다. - - - - 초기화 - - - - + + + 최대 {MAX_DEADLINE}일을 넘을 수 없습니다. + + )} @@ -218,7 +245,6 @@ const Body = styled.div` align-items: center; gap: 10px; - padding: 10px 0; font: var(--text-caption); `; diff --git a/frontend/src/components/common/Modal/index.tsx b/frontend/src/components/common/Modal/index.tsx index 945199f26..7c5eca7bf 100644 --- a/frontend/src/components/common/Modal/index.tsx +++ b/frontend/src/components/common/Modal/index.tsx @@ -1,40 +1,74 @@ -import React, { useEffect, useRef } from 'react'; +import React, { useEffect, useRef, PropsWithChildren } from 'react'; import { Size } from '@type/style'; +import SquareButton from '../SquareButton'; + import * as S from './style'; -interface ModalProps { - onModalClose: () => void; - children: React.JSX.Element; - size: Size; +interface ButtonProps { + text: string; + handleClick: () => void; +} + +interface ModalProps extends PropsWithChildren { + title?: string; + size?: Size; + primaryButton: ButtonProps; + secondaryButton: ButtonProps; + handleModalClose: () => void; } -export default function Modal({ onModalClose, children, size }: ModalProps) { +export default function Modal({ + title, + children, + size = 'sm', + primaryButton, + secondaryButton, + handleModalClose, +}: ModalProps) { const BackDropRef = useRef(null); + const { text: primaryText, handleClick: primaryClick } = primaryButton; + const { text: secondaryText, handleClick: secondaryClick } = secondaryButton; + useEffect(() => { const handler = (e: MouseEvent) => { if (e.target === BackDropRef.current) { - onModalClose(); + handleModalClose(); } }; document.addEventListener('click', handler); return () => document.removeEventListener('click', handler); - }, [BackDropRef, onModalClose]); + }, [BackDropRef, handleModalClose]); return ( - {children} + + {title} + + {children && {children}} + + + + {secondaryText} + + + + + {primaryText} + + + ); diff --git a/frontend/src/components/common/Modal/style.ts b/frontend/src/components/common/Modal/style.ts index a3b6eb9a3..63fdcc0bf 100644 --- a/frontend/src/components/common/Modal/style.ts +++ b/frontend/src/components/common/Modal/style.ts @@ -2,6 +2,8 @@ import { styled } from 'styled-components'; import { Size } from '@type/style'; +import { theme } from '@styles/theme'; + const MODAL_SIZE: Record = { sm: '290px', md: '590px', @@ -24,24 +26,29 @@ export const Backdrop = styled.div` background: rgba(0, 0, 0, 0.35); `; -export const Container = styled.div<{ size: Size }>` - display: grid; - grid-template-rows: 1fr 6fr; +export const Container = styled.dialog<{ size: Size }>` + display: flex; + flex-direction: column; + justify-content: space-between; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); - width: ${props => MODAL_SIZE[props.size]}; - height: 290px; + width: ${props => (props.size ? MODAL_SIZE[props.size] : '96%')}; + max-width: 290px; border-radius: 12px; border: 2px solid #f6f6f6; - padding: 5px; background-color: white; box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.5); + + @media (min-width: ${theme.breakpoint.sm}) { + width: ${props => (props.size ? MODAL_SIZE[props.size] : '50%')}; + max-width: 500px; + } `; export const HiddenCloseButton = styled.button` @@ -49,3 +56,36 @@ export const HiddenCloseButton = styled.button` left: -10000px; top: -10000px; `; + +export const Title = styled.span` + padding: 15px 2px 0 20px; + margin: 5px 0 16px; + + color: #334253; + + font: var(--text-title); + font-weight: 500; +`; + +export const Body = styled.div` + font: var(--text-body); + + box-sizing: border-box; +`; + +export const ButtonContainer = styled.div` + display: flex; + gap: 12px; + + padding: 0 17px; + margin: 16px 0 15px 0; + + @media (min-width: ${theme.breakpoint.sm}) { + gap: 14px; + } +`; + +export const ButtonWrapper = styled.div` + width: 100%; + height: 40px; +`; diff --git a/frontend/src/components/common/MultiSelect/index.tsx b/frontend/src/components/common/MultiSelect/index.tsx index bf47f35d4..19150808f 100644 --- a/frontend/src/components/common/MultiSelect/index.tsx +++ b/frontend/src/components/common/MultiSelect/index.tsx @@ -15,6 +15,7 @@ interface MultiSelectProps { handleOptionAdd: (newItem: Option) => void; handleOptionDelete: (optionId: number) => void; placeholder?: string; + maxOptionCount?: number; } export default function MultiSelect({ @@ -22,6 +23,7 @@ export default function MultiSelect({ optionList, handleOptionAdd, handleOptionDelete, + maxOptionCount, placeholder = '여러 개의 옵션을 선택해주세요', }: MultiSelectProps) { const [isOpen, setIsOpen] = useState(false); @@ -35,6 +37,15 @@ export default function MultiSelect({ setIsOpen(!isOpen); }; + const addOption = ({ id, name }: Option) => { + handleOptionAdd({ id, name }); + + // selectedOptionList.length 는 추가되기 이전의 값 + if (maxOptionCount && selectedOptionList.length + 1 >= maxOptionCount) { + setIsOpen(false); + } + }; + const handleOutsideClick = (event: MouseEvent) => { if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) { setIsOpen(false); @@ -90,7 +101,7 @@ export default function MultiSelect({ aria-label={`클릭시 ${name} 추가`} onClick={e => { e.stopPropagation(); - handleOptionAdd({ id, name }); + addOption({ id, name }); }} > {name} diff --git a/frontend/src/components/common/NarrowMainHeader/NarrowMainHeader.stories.tsx b/frontend/src/components/common/NarrowMainHeader/NarrowMainHeader.stories.tsx index 33986112a..5425083e6 100644 --- a/frontend/src/components/common/NarrowMainHeader/NarrowMainHeader.stories.tsx +++ b/frontend/src/components/common/NarrowMainHeader/NarrowMainHeader.stories.tsx @@ -11,5 +11,7 @@ export default meta; type Story = StoryObj; export const Primary: Story = { - render: () => {}} />, + render: () => ( + {}} handleAlarmOpenClick={() => {}} /> + ), }; diff --git a/frontend/src/components/common/NarrowMainHeader/index.tsx b/frontend/src/components/common/NarrowMainHeader/index.tsx index d55cf2fcd..8d3b1ec0d 100644 --- a/frontend/src/components/common/NarrowMainHeader/index.tsx +++ b/frontend/src/components/common/NarrowMainHeader/index.tsx @@ -5,6 +5,7 @@ import { useToggle } from '@hooks'; import { PATH } from '@constants/path'; +import AlarmIconButton from '../ActiveContainer'; import IconButton from '../IconButton'; import LogoButton from '../LogoButton'; import SearchBar from '../SearchBar'; @@ -12,10 +13,16 @@ import SearchBar from '../SearchBar'; import * as S from './style'; interface NarrowMainHeaderProps { - handleMenuOpenClick: () => void; + handleCategoryOpenClick: () => void; + handleAlarmOpenClick: () => void; + isAlarmActive?: boolean; } -export default function NarrowMainHeader({ handleMenuOpenClick }: NarrowMainHeaderProps) { +export default function NarrowMainHeader({ + handleCategoryOpenClick, + handleAlarmOpenClick, + isAlarmActive, +}: NarrowMainHeaderProps) { const { isOpen: isSearchInputOpen, openComponent: openSearchInput, @@ -28,10 +35,6 @@ export default function NarrowMainHeader({ handleMenuOpenClick }: NarrowMainHead navigate('/'); }; - const moveUserInfoPage = () => { - navigate(PATH.USER_INFO); - }; - const moveRankingPage = () => { navigate(PATH.RANKING); }; @@ -44,10 +47,12 @@ export default function NarrowMainHeader({ handleMenuOpenClick }: NarrowMainHead ) : ( - + - + + + ); diff --git a/frontend/src/components/common/NarrowMainHeader/style.ts b/frontend/src/components/common/NarrowMainHeader/style.ts index a71e0a16d..befcb4d70 100644 --- a/frontend/src/components/common/NarrowMainHeader/style.ts +++ b/frontend/src/components/common/NarrowMainHeader/style.ts @@ -12,6 +12,7 @@ export const Container = styled.header` position: fixed; top: 0; + left: 0; background-color: var(--header); diff --git a/frontend/src/components/common/PostMenu/PostMenu.stories.tsx b/frontend/src/components/common/PostMenu/PostMenu.stories.tsx deleted file mode 100644 index aea81fb8c..000000000 --- a/frontend/src/components/common/PostMenu/PostMenu.stories.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { Meta, StoryObj } from '@storybook/react'; - -import { PostMenuItem } from '@type/menu'; - -import PostMenu from '.'; - -const meta: Meta = { - component: PostMenu, -}; - -export default meta; -type Story = StoryObj; - -const menuList: PostMenuItem[] = [ - { color: 'black', content: '닉네임 신고', action: 'NICKNAME_REPORT' }, - { color: 'black', content: '게시글 신고', action: 'POST_REPORT' }, - { color: 'black', content: '방구', action: 'DELETE' }, -]; - -export const Default: Story = { - render: () => {}} />, -}; diff --git a/frontend/src/components/common/Skeleton/style.ts b/frontend/src/components/common/Skeleton/style.ts index 98f6cef01..fd308d9bd 100644 --- a/frontend/src/components/common/Skeleton/style.ts +++ b/frontend/src/components/common/Skeleton/style.ts @@ -7,6 +7,8 @@ export const Container = styled.div` flex-direction: column; gap: 9px; + width: 100%; + @media (min-width: ${theme.breakpoint.sm}) { gap: 12px; } diff --git a/frontend/src/components/common/TimePickerOptionList/style.ts b/frontend/src/components/common/TimePickerOptionList/style.ts index 34bd4a401..3c2ba41f3 100644 --- a/frontend/src/components/common/TimePickerOptionList/style.ts +++ b/frontend/src/components/common/TimePickerOptionList/style.ts @@ -25,6 +25,6 @@ export const PickedTimeText = styled.p` align-items: center; gap: 20px; - font: var(--text-caption); + font-size: 14px; font-weight: bold; `; diff --git a/frontend/src/components/common/Toast/Toast.stories.tsx b/frontend/src/components/common/Toast/Toast.stories.tsx index c53cb2b55..a31ff01cf 100644 --- a/frontend/src/components/common/Toast/Toast.stories.tsx +++ b/frontend/src/components/common/Toast/Toast.stories.tsx @@ -1,111 +1,70 @@ import type { Meta } from '@storybook/react'; -import { useToast } from '@hooks'; +import { useEffect, useRef, useState } from 'react'; + +import { Size } from '@type/style'; + +import { ToastInfo } from '@hooks/context/toast'; + +import { TOAST_TIME } from '@constants/animation'; import Toast from '.'; const meta: Meta = { component: Toast, + args: { + size: 'sm', + }, + argTypes: { + size: { + description: '토스트의 사이즈 조정', + control: { + type: 'radio', + }, + options: ['sm', 'md', 'lg', 'free'], + }, + }, }; export default meta; -export const SizeCase = () => { - const { isToastOpen: isSmOpen, openToast: openSmComponent, toastMessage: smMessage } = useToast(); - const { isToastOpen: isMdOpen, openToast: openMdComponent, toastMessage: mdMessage } = useToast(); - const { isToastOpen: isLgOpen, openToast: openLgComponent, toastMessage: lgMessage } = useToast(); - const { - isToastOpen: isFreeOpen, - openToast: openFreeComponent, - toastMessage: freeMessage, - } = useToast(); +export const SizeCase = (args: { size: Size | 'free' }) => { + //contextApi에 있는 훅 이동 + const [toastList, setToastList] = useState([]); + const timeId = useRef(null); - return ( - <> - - {isSmOpen && ( - - {smMessage} - - )} - - {isMdOpen && ( - - {mdMessage} - - )} - - {isLgOpen && ( - - {lgMessage} - - )} - - {isFreeOpen && ( - - {freeMessage} - - )} - - ); -}; + useEffect(() => { + if (timeId.current) window.clearTimeout(timeId.current); + + if (toastList.length !== 0) { + timeId.current = window.setTimeout(() => { + setToastList([]); + + if (timeId.current) window.clearTimeout(timeId.current); + }, TOAST_TIME); + } + }, [toastList]); -export const PositionCase = () => { - const { - isToastOpen: isTopOpen, - openToast: openTopComponent, - toastMessage: topMessage, - } = useToast(); - const { - isToastOpen: isBottomOpen, - openToast: openBottomComponent, - toastMessage: bottomMessage, - } = useToast(); + const addMessage = (message: string) => { + if (toastList.find(toast => toast.text === message)) return; + + const id = Date.now(); + setToastList(toastList => [...toastList, { id, text: message }]); + }; return ( <> - {isTopOpen && ( - - {topMessage} - - )} - - {isBottomOpen && ( - - {bottomMessage} + {toastList.map(toast => ( + + {toast.text} - )} + ))} ); }; diff --git a/frontend/src/components/common/Toast/index.tsx b/frontend/src/components/common/Toast/index.tsx index 5e9160d99..d4f1a193b 100644 --- a/frontend/src/components/common/Toast/index.tsx +++ b/frontend/src/components/common/Toast/index.tsx @@ -1,19 +1,27 @@ +import { memo, useState } from 'react'; + import { Size } from '@type/style'; +import { TOAST_TIME } from '@constants/animation'; + import * as S from './style'; interface ToastProps { children: string; size: Size | 'free'; - position: 'top' | 'bottom'; } -export default function Toast({ children, size, position }: ToastProps) { +export default memo(function Toast({ children, size }: ToastProps) { + const [isShown, setIsShown] = useState(true); + + const timeId = window.setTimeout(() => { + window.clearTimeout(timeId); + setIsShown(false); + }, TOAST_TIME); + return ( - - - {children} - - + + {children} + ); -} +}); diff --git a/frontend/src/components/common/Toast/style.ts b/frontend/src/components/common/Toast/style.ts index 045ac1cd4..bcbf68c35 100644 --- a/frontend/src/components/common/Toast/style.ts +++ b/frontend/src/components/common/Toast/style.ts @@ -4,9 +4,7 @@ import { Size } from '@type/style'; import { TOAST_TIME } from '@constants/animation'; -import { theme } from '@styles/theme'; - -import { POSITION, SQUARE_SIZE } from '../ToastNSnackBarStyle'; +import { SQUARE_SIZE } from '../ToastNSnackBarStyle'; export const fadeInOutAnimation = keyframes` 0%, 100%{ @@ -17,22 +15,15 @@ export const fadeInOutAnimation = keyframes` } `; -export const Wrapper = styled.div<{ $position: 'top' | 'bottom' }>` - position: fixed; - left: 50%; - transform: translateX(-50%); - - top: ${props => POSITION[props.$position]}; -`; - -export const Content = styled.div<{ $size: Size | 'free' }>` - display: flex; +export const Content = styled.div<{ $size: Size | 'free'; $isShown: boolean }>` + display: ${props => (props.$isShown ? 'flex' : 'none')}; align-items: center; justify-content: center; width: ${props => SQUARE_SIZE[props.$size].width}; - height: ${props => SQUARE_SIZE[props.$size].height}; + min-height: ${props => SQUARE_SIZE[props.$size].height}; border-radius: 4px; + padding: 10px 15px; background-color: rgba(0, 0, 0, 0.6); color: var(--white); @@ -40,7 +31,5 @@ export const Content = styled.div<{ $size: Size | 'free' }>` font: var(--text-caption); letter-spacing: 1px; - animation: ${fadeInOutAnimation} ${TOAST_TIME}s linear infinite; - - z-index: ${theme.zIndex.modal}; + animation: ${fadeInOutAnimation} ${TOAST_TIME}ms linear infinite; `; diff --git a/frontend/src/components/common/ToastNSnackBarStyle.ts b/frontend/src/components/common/ToastNSnackBarStyle.ts index 78d5c1abe..d7955472a 100644 --- a/frontend/src/components/common/ToastNSnackBarStyle.ts +++ b/frontend/src/components/common/ToastNSnackBarStyle.ts @@ -7,5 +7,5 @@ export const SQUARE_SIZE = { sm: { width: '250px', height: '40px' }, md: { width: '400px', height: '40px' }, lg: { width: '500px', height: '45px' }, - free: { width: '80%', height: '50px' }, + free: { width: '100%', height: '50px' }, }; diff --git a/frontend/src/components/common/ToggleSwitch/style.ts b/frontend/src/components/common/ToggleSwitch/style.ts index c82f8bef0..339a284a6 100644 --- a/frontend/src/components/common/ToggleSwitch/style.ts +++ b/frontend/src/components/common/ToggleSwitch/style.ts @@ -3,7 +3,7 @@ import { styled } from 'styled-components'; import { Size } from '@type/style'; const SIZE = { - sm: { height: '40px' }, + sm: { height: '45px' }, md: { height: '60px' }, lg: { height: '80px' }, free: { height: '100%' }, diff --git a/frontend/src/components/common/ToolTip/ToolTip.stories.tsx b/frontend/src/components/common/ToolTip/ToolTip.stories.tsx new file mode 100644 index 000000000..8884571cc --- /dev/null +++ b/frontend/src/components/common/ToolTip/ToolTip.stories.tsx @@ -0,0 +1,41 @@ +import type { Meta } from '@storybook/react'; + +import ToolTip from '.'; + +const meta: Meta = { + component: ToolTip, +}; + +export default meta; + +export const SizeS = () => { + return ( + +
+ + ); +}; + +export const SizeM = () => { + return ( + +
+ + ); +}; + +export const SizeL = () => { + return ( + +
+ + ); +}; + +export const SizeFree = () => { + return ( + +
+ + ); +}; diff --git a/frontend/src/components/common/ToolTip/index.tsx b/frontend/src/components/common/ToolTip/index.tsx new file mode 100644 index 000000000..b5d8ec4b7 --- /dev/null +++ b/frontend/src/components/common/ToolTip/index.tsx @@ -0,0 +1,20 @@ +import { ReactNode } from 'react'; + +import { Size } from '@type/style'; + +import * as S from './style'; + +interface ToolTipProps { + size: Size | 'free'; + children: ReactNode; +} + +export default function ToolTip({ size, children }: ToolTipProps) { + return ( + + + + {children} + + ); +} diff --git a/frontend/src/components/common/ToolTip/style.ts b/frontend/src/components/common/ToolTip/style.ts new file mode 100644 index 000000000..80466198e --- /dev/null +++ b/frontend/src/components/common/ToolTip/style.ts @@ -0,0 +1,51 @@ +import { styled } from 'styled-components'; + +import { Size } from '@type/style'; + +const SIZE = { + sm: { height: '300px', width: '250px' }, + md: { height: '460px', width: '315px' }, + lg: { height: '740px', width: '420px' }, + free: { height: '100%', width: '100%' }, +}; + +export const Container = styled.div` + display: flex; + flex-direction: column; + align-items: flex-end; + + width: fit-content; + height: fit-content; + + position: relative; +`; + +export const Pointer = styled.div` + width: 0; + height: 0; + border-left: 17px solid transparent; + border-right: 17px solid transparent; + border-bottom: 20px solid var(--gray); + margin-right: 20px; +`; + +export const InnerPointer = styled.div` + width: 0; + height: 0; + border-left: 17px solid transparent; + border-right: 17px solid transparent; + border-bottom: 20px solid var(--white); + margin-right: 20px; + + position: absolute; + top: 3px; +`; + +export const Content = styled.div<{ $size: Size | 'free' }>` + height: ${props => SIZE[props.$size].height}; + width: ${props => SIZE[props.$size].width}; + border: 2px solid var(--gray); + border-radius: 4px; + + background-color: var(--white); +`; diff --git a/frontend/src/components/common/TwoButtonModal/index.tsx b/frontend/src/components/common/TwoButtonModal/index.tsx deleted file mode 100644 index 51e70b75e..000000000 --- a/frontend/src/components/common/TwoButtonModal/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { PropsWithChildren, useEffect, useRef } from 'react'; - -import SquareButton from '@components/common/SquareButton'; - -import * as S from './style'; - -interface ButtonProps { - text: string; - handleClick: () => void; -} - -interface CommentModalProps extends PropsWithChildren { - title: string; - primaryButton: ButtonProps; - secondaryButton: ButtonProps; -} - -export default function TwoButtonModal({ - title, - primaryButton, - secondaryButton, - children, -}: CommentModalProps) { - const BackDropRef = useRef(null); - - const { text: primaryText, handleClick: primaryClick } = primaryButton; - const { text: secondaryText, handleClick: secondaryClick } = secondaryButton; - - useEffect(() => { - const handler = (e: MouseEvent) => { - if (e.target === BackDropRef.current) { - secondaryClick(); - } - }; - - document.addEventListener('click', handler); - - return () => document.removeEventListener('click', handler); - }, [BackDropRef, secondaryClick]); - - return ( - - - - {title} - - {children} - - - - {secondaryText} - - - - - {primaryText} - - - - - - ); -} diff --git a/frontend/src/components/common/TwoButtonModal/style.ts b/frontend/src/components/common/TwoButtonModal/style.ts deleted file mode 100644 index 2e25d5ae3..000000000 --- a/frontend/src/components/common/TwoButtonModal/style.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { styled } from 'styled-components'; - -import { theme } from '@styles/theme'; - -export const Container = styled.div` - display: flex; - justify-content: center; - align-items: center; - - width: 100vw; - height: 100vh; - padding: 0 12px; - - position: fixed; - top: 0; - left: 0; - - background-color: rgba(0, 0, 0, 0.5); - - z-index: ${theme.zIndex.modal}; - - @media (min-width: ${theme.breakpoint.sm}) { - padding: 0; - } -`; - -export const ModalContainer = styled.div` - display: flex; - flex-direction: column; - - width: 100%; - max-width: 400px; - padding: 30px; - border-radius: 8px; - - background-color: white; -`; - -export const Title = styled.span` - margin-bottom: 32px; - - color: #334253; - - font: var(--text-title); - font-weight: 500; - - @media (min-width: ${theme.breakpoint.sm}) { - font-size: 2.4rem; - } -`; - -export const ButtonContainer = styled.div` - display: flex; - gap: 12px; - - @media (min-width: ${theme.breakpoint.sm}) { - gap: 14px; - } -`; - -export const ButtonWrapper = styled.div` - width: 100%; - height: 48px; - margin-top: 44px; -`; diff --git a/frontend/src/components/common/UpButton/index.tsx b/frontend/src/components/common/UpButton/index.tsx index 29d7d6db7..e4d057f7e 100644 --- a/frontend/src/components/common/UpButton/index.tsx +++ b/frontend/src/components/common/UpButton/index.tsx @@ -1,15 +1,31 @@ -import React from 'react'; +import React, { useState } from 'react'; import chevronUp from '@assets/chevron_up_primary.svg'; +import mascotYo from '@assets/dangseon-yo.png'; import * as S from './style'; interface UpButtonProps extends React.ButtonHTMLAttributes {} export default function UpButton({ ...rest }: UpButtonProps) { + const [count, setCount] = useState(0); + + //이벤트를 위한 코드 + const handleLogoClick = () => { + if (count > 5) return; + + setCount(count + 1); + }; + const handleClick = () => { + setCount(0); + }; + return ( - - 페이지 최상단으로 스크롤 올리기 - + <> + + 페이지 최상단으로 스크롤 올리기 + + 5} /> + ); } diff --git a/frontend/src/components/common/UpButton/style.ts b/frontend/src/components/common/UpButton/style.ts index 9ecf51165..a68e8598c 100644 --- a/frontend/src/components/common/UpButton/style.ts +++ b/frontend/src/components/common/UpButton/style.ts @@ -10,3 +10,31 @@ export const Button = styled.button` cursor: pointer; `; + +//이벤트를 위한 코드 +export const Image = styled.img<{ $isMoving: boolean }>` + width: 50px; + height: 50px; + + position: absolute; + right: 13px; + bottom: 83px; + z-index: -1; + + ${props => + props.$isMoving + ? `animation: move 1s linear infinite; + + @keyframes move { + 0% { + right: 13px; + } + 50% { + right: 200px; + } + 100% { + right: 13px; + } + }` + : ''}; +`; diff --git a/frontend/src/components/common/WideHeader/index.tsx b/frontend/src/components/common/WideHeader/index.tsx index f28b3543a..eb981dbf6 100644 --- a/frontend/src/components/common/WideHeader/index.tsx +++ b/frontend/src/components/common/WideHeader/index.tsx @@ -1,28 +1,58 @@ +import { CSSProperties, MouseEvent, useContext, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; +import { AuthContext, ToastContext, useToggle } from '@hooks'; + +import { useReadLatestAlarm } from '@hooks/query/user/useReadLatestAlarm'; + import { PATH } from '@constants/path'; +import AlarmContainer from '../../AlarmContainer'; +import AlarmIconButton from '../ActiveContainer'; import IconButton from '../IconButton'; import LogoButton from '../LogoButton'; import SearchBar from '../SearchBar'; +import ToolTip from '../ToolTip'; import * as S from './style'; +// 70px = 토글 스위치의 크기(40px) 및 상하 padding(각 10px), gap(10px) +const alarmToolTipStyle: CSSProperties = { + maxHeight: '600px', + width: '450px', +}; + export default function WideHeader() { const navigate = useNavigate(); + const { isOpen, openComponent, closeComponent } = useToggle(); + const toolTipRef = useRef(null); + + const { addMessage } = useContext(ToastContext); + const loggedInfo = useContext(AuthContext).loggedInfo; + const isAlarmActive = loggedInfo.userInfo?.hasLatestAlarm; + + const { mutate } = useReadLatestAlarm(); const movePostListPage = () => { navigate('/'); }; - const moveUserInfoPage = () => { - navigate(PATH.USER_INFO); - }; - const moveRankingPage = () => { navigate(PATH.RANKING); }; + const handleToolTipOpen = () => { + if (!loggedInfo.isLoggedIn) return addMessage('알림은 로그인 후 이용할 수 있습니다.'); + + openComponent(); + mutate(); + }; + + const handleToolTipClick = (e: MouseEvent) => { + const targetElement = e.target; + targetElement === toolTipRef.current && closeComponent(); + }; + return ( @@ -30,9 +60,18 @@ export default function WideHeader() { - + + + + {isOpen && ( + + + + + + )} ); } diff --git a/frontend/src/components/common/WideHeader/style.ts b/frontend/src/components/common/WideHeader/style.ts index 20b390593..c3fac0cac 100644 --- a/frontend/src/components/common/WideHeader/style.ts +++ b/frontend/src/components/common/WideHeader/style.ts @@ -1,5 +1,7 @@ import { styled } from 'styled-components'; +import { theme } from '@styles/theme'; + export const Container = styled.div` display: flex; justify-content: space-between; @@ -24,3 +26,24 @@ export const Wrapper = styled.div` display: flex; gap: 15px; `; + +export const ToolTipBackdrop = styled.div` + width: 100vw; + height: 100vh; + + position: fixed; + top: 0; + left: 0; + + z-index: ${theme.zIndex.modal}; + + > * { + position: absolute; + top: 55px; + // 헤더 오른쪽 공백값(80px) + // + 랭킹 아이콘 크기(35px) + // + 아이콘 사이 간격(15px) + // - 툴팁 화살표 오른쪽 공백(20px) + right: calc(80px + 35px + 15px - 20px); + } +`; diff --git a/frontend/src/components/notice/AdminNoticeEdit/AdminNoticeEdit.stories.tsx b/frontend/src/components/notice/AdminNoticeEdit/AdminNoticeEdit.stories.tsx new file mode 100644 index 000000000..580dc6021 --- /dev/null +++ b/frontend/src/components/notice/AdminNoticeEdit/AdminNoticeEdit.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import AdminNoticeEdit from '.'; + +const meta: Meta = { + component: AdminNoticeEdit, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/components/notice/AdminNoticeEdit/index.tsx b/frontend/src/components/notice/AdminNoticeEdit/index.tsx new file mode 100644 index 000000000..fe35de53e --- /dev/null +++ b/frontend/src/components/notice/AdminNoticeEdit/index.tsx @@ -0,0 +1,36 @@ +import { useEffect } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; + +import { NoticeRequest } from '@type/notice'; + +import { useModifyNotice, useNoticeDetail } from '@hooks'; + +import { PATH } from '@constants/path'; + +import NoticeForm from '../NoticeForm'; +import { NOTICE_WRITE_TYPE } from '../NoticeForm/constant'; + +export default function AdminNoticeEdit() { + const navigate = useNavigate(); + const { noticeId: noticeIdParam } = useParams() ?? 0; + const noticeId = Number(noticeIdParam); + + const { data } = useNoticeDetail(noticeId); + const { mutate, isSuccess } = useModifyNotice(); + + useEffect(() => { + if (isSuccess) { + navigate(PATH.ADMIN_NOTICE); + } + }, [isSuccess, navigate]); + + if (!data) return <>; + + return ( + mutate({ noticeId, notice })} + writeType={NOTICE_WRITE_TYPE.EDIT} + /> + ); +} diff --git a/frontend/src/components/notice/AdminNoticeTableFetcher/AdminNoticeTableFetcher.stories.tsx b/frontend/src/components/notice/AdminNoticeTableFetcher/AdminNoticeTableFetcher.stories.tsx new file mode 100644 index 000000000..03be23de0 --- /dev/null +++ b/frontend/src/components/notice/AdminNoticeTableFetcher/AdminNoticeTableFetcher.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import AdminNoticeTableFetcher from '.'; + +const meta: Meta = { + component: AdminNoticeTableFetcher, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/components/notice/AdminNoticeTableFetcher/index.tsx b/frontend/src/components/notice/AdminNoticeTableFetcher/index.tsx new file mode 100644 index 000000000..cf0595789 --- /dev/null +++ b/frontend/src/components/notice/AdminNoticeTableFetcher/index.tsx @@ -0,0 +1,89 @@ +import { SquareButton, Table } from 'votogether-design-system'; + +import { useDeleteNotice, usePagedNoticeList } from '@hooks'; + +import { PATH } from '@constants/path'; + +import * as S from './style'; + +export default function AdminNoticeTableFetcher() { + const { + data, + setPage, + page, + hasNextPage, + hasPrevPage, + fetchNextPage, + fetchPrevPage, + getPageNumberList, + } = usePagedNoticeList(); + const { mutate: deleteNotice } = useDeleteNotice(); + + const handleNoticeDeleteClick = (title: string, noticeId: number) => { + const isDeleteConfirmed = window.confirm(`공지사항 제목: "${title}" 을 삭제하시겠습니까?`); + + if (isDeleteConfirmed) { + deleteNotice(noticeId); + } + }; + + if (!data) return <>; + + return ( + + ({ + title, + content, + bannerTitle, + bannerSubtitle, + createdAt, + deadline, + editButton: ( + + 수정 + + ), + deleteButton: ( + handleNoticeDeleteClick(title, id)}> + 삭제 + + ), + }) + )} + /> + + {hasPrevPage && ( + fetchPrevPage()}> + {'<'} + + )} + {getPageNumberList(data.totalPageNumber).map(item => ( + { + setPage(item); + }} + > + {item} + + ))} + {hasNextPage && ( + fetchNextPage(data.totalPageNumber)}> + {'>'} + + )} + + + ); +} diff --git a/frontend/src/components/notice/AdminNoticeTableFetcher/style.ts b/frontend/src/components/notice/AdminNoticeTableFetcher/style.ts new file mode 100644 index 000000000..77f6b6211 --- /dev/null +++ b/frontend/src/components/notice/AdminNoticeTableFetcher/style.ts @@ -0,0 +1,30 @@ +import { Link } from 'react-router-dom'; + +import { styled } from 'styled-components'; + +export const Container = styled.div` + padding: 100px; +`; + +export const ButtonContainer = styled.div` + display: flex; + justify-content: center; + gap: 10px; + + margin-top: 20px; +`; + +export const ButtonWrapper = styled.div` + width: 60px; + height: 60px; +`; + +export const EditButtonWrapper = styled(Link)` + width: 100%; + height: 60px; +`; + +export const DeleteButtonWrapper = styled.div` + width: 100%; + height: 60px; +`; diff --git a/frontend/src/components/notice/BannerFetcher/index.tsx b/frontend/src/components/notice/BannerFetcher/index.tsx new file mode 100644 index 000000000..f41922fbf --- /dev/null +++ b/frontend/src/components/notice/BannerFetcher/index.tsx @@ -0,0 +1,26 @@ +import { useBannerNotice } from '@hooks'; + +import Banner from '@components/common/Banner'; + +import { PATH } from '@constants/path'; + +interface BannerFetcherProps { + handleClose: () => void; +} + +export default function BannerFetcher({ handleClose }: BannerFetcherProps) { + const { data } = useBannerNotice(); + + if (!data) return <>; + + const { id, bannerTitle, bannerSubtitle } = data; + + return ( + + ); +} diff --git a/frontend/src/components/notice/BannerSkeleton/index.tsx b/frontend/src/components/notice/BannerSkeleton/index.tsx new file mode 100644 index 000000000..1982e42e6 --- /dev/null +++ b/frontend/src/components/notice/BannerSkeleton/index.tsx @@ -0,0 +1,5 @@ +import * as S from './style'; + +export default function BannerSkeleton() { + return ; +} diff --git a/frontend/src/components/notice/BannerSkeleton/style.ts b/frontend/src/components/notice/BannerSkeleton/style.ts new file mode 100644 index 000000000..c50272cc2 --- /dev/null +++ b/frontend/src/components/notice/BannerSkeleton/style.ts @@ -0,0 +1,15 @@ +import { styled } from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const Box = styled.div` + width: 100%; + height: 60px; + border-radius: 7px; + + background-color: #eee; + background: linear-gradient(110deg, #ececec 8%, #f5f5f5 18%, #ececec 33%); + background-size: 200% 100%; + + animation: 1.7s ${theme.animation.skeletonGradientWave} linear infinite; +`; diff --git a/frontend/src/components/notice/NoticeDetail/NoticeDetail.stories.tsx b/frontend/src/components/notice/NoticeDetail/NoticeDetail.stories.tsx new file mode 100644 index 000000000..71d6e3ddc --- /dev/null +++ b/frontend/src/components/notice/NoticeDetail/NoticeDetail.stories.tsx @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { MOCK_TRANSFORM_NOTICE } from '@mocks/mockData/notice'; + +import NoticeDetail from '.'; + +const meta: Meta = { + component: NoticeDetail, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/components/notice/NoticeDetail/index.tsx b/frontend/src/components/notice/NoticeDetail/index.tsx new file mode 100644 index 000000000..1949968ab --- /dev/null +++ b/frontend/src/components/notice/NoticeDetail/index.tsx @@ -0,0 +1,47 @@ +import { useNavigate } from 'react-router-dom'; + +import { Notice } from '@type/notice'; + +import SquareButton from '@components/common/SquareButton'; + +import { PATH } from '@constants/path'; + +import * as S from './style'; + +interface NoticeDetailProps { + notice: Notice; +} + +export default function NoticeDetail({ notice: { title, content, createdAt } }: NoticeDetailProps) { + const navigate = useNavigate(); + + return ( + + {title} + 작성일 : {createdAt} + {content} + + + { + navigate(PATH.HOME); + }} + > + 홈으로 가기 + + + + { + navigate(PATH.NOTICES); + }} + > + {`공지사항\n목록으로 가기`} + + + + + ); +} diff --git a/frontend/src/pages/AnnouncementPage/style.ts b/frontend/src/components/notice/NoticeDetail/style.ts similarity index 51% rename from frontend/src/pages/AnnouncementPage/style.ts rename to frontend/src/components/notice/NoticeDetail/style.ts index f79813f1e..ee1c0ff56 100644 --- a/frontend/src/pages/AnnouncementPage/style.ts +++ b/frontend/src/components/notice/NoticeDetail/style.ts @@ -2,64 +2,67 @@ import { styled } from 'styled-components'; import { theme } from '@styles/theme'; -export const Wrapper = styled.div` +export const Container = styled.div` display: flex; flex-direction: column; - justify-content: space-between; - align-items: center; - gap: 30px; - padding-top: 55px; - position: relative; + width: 100%; + max-width: 600px; +`; - @media (min-width: 768px) { - padding-top: 20px; - } +export const Title = styled.h1` + margin-top: 20px; - @media (min-width: ${theme.breakpoint.sm}) { - padding-top: 20px; - } + font: var(--text-title); `; -export const HeaderWrapper = styled.div` - width: 100%; +export const CreatedAt = styled.span` + margin: 20px 0; - position: fixed; + font: var(--text-body); + font-size: 1.4rem; + text-align: right; - z-index: ${theme.zIndex.header}; + color: var(--text-dark-gray); +`; - @media (min-width: ${theme.breakpoint.sm}) { - display: none; - } +export const Content = styled.p` + font: var(--text-body); + + white-space: pre-wrap; `; -export const MainWrapper = styled.section` +export const ButtonContainer = styled.div` display: flex; flex-direction: column; justify-content: space-between; - align-items: start; + align-items: center; gap: 20px; - width: 90%; -`; - -export const Title = styled.h1` - width: 90%; - margin-top: 20px; + margin-top: 50px; - font-size: 20px; - font-weight: bold; -`; + @media (min-width: ${theme.breakpoint.sm}) { + flex-direction: row; + justify-content: center; + gap: 80px; -export const Content = styled.p` - font: var(--text-body); + padding: 0 100px; + } `; export const ButtonWrapper = styled.div` display: flex; - width: 100%; - height: 50px; + height: 40px; - padding: 8px; + @media (min-width: ${theme.breakpoint.sm}) { + width: 140px; + height: 60px; + + white-space: pre-wrap; + + &:first-child { + display: none; + } + } `; diff --git a/frontend/src/components/notice/NoticeDetailFetcher/index.tsx b/frontend/src/components/notice/NoticeDetailFetcher/index.tsx new file mode 100644 index 000000000..25bd4ecc8 --- /dev/null +++ b/frontend/src/components/notice/NoticeDetailFetcher/index.tsx @@ -0,0 +1,16 @@ +import { useParams } from 'react-router-dom'; + +import { useNoticeDetail } from '@hooks'; + +import NoticeDetail from '../NoticeDetail'; + +export default function NoticeDetailFetcher() { + const { noticeId: NoticeIdParam } = useParams(); + const noticeId = Number(NoticeIdParam) ?? 0; + + const { data: notice } = useNoticeDetail(noticeId); + + if (!notice) return <>; + + return ; +} diff --git a/frontend/src/components/notice/NoticeForm/constant.ts b/frontend/src/components/notice/NoticeForm/constant.ts new file mode 100644 index 000000000..2c3b525be --- /dev/null +++ b/frontend/src/components/notice/NoticeForm/constant.ts @@ -0,0 +1,4 @@ +export const NOTICE_WRITE_TYPE = { + CREATE: '작성', + EDIT: '수정', +} as const; diff --git a/frontend/src/components/notice/NoticeForm/index.tsx b/frontend/src/components/notice/NoticeForm/index.tsx new file mode 100644 index 000000000..84554a300 --- /dev/null +++ b/frontend/src/components/notice/NoticeForm/index.tsx @@ -0,0 +1,108 @@ +import { ChangeEvent, FormEvent, useState } from 'react'; + +import { Notice, NoticeRequest } from '@type/notice'; +import { StringDate } from '@type/time'; + +import { useText } from '@hooks'; + +import { InputLengthRange } from '@hooks/useText'; + +import SquareButton from '@components/common/SquareButton'; + +import { addTimeToDate } from '@utils/post/addTimeToDate'; + +import { NOTICE_WRITE_TYPE } from './constant'; +import * as S from './style'; + +type NoticeWriteType = (typeof NOTICE_WRITE_TYPE)[keyof typeof NOTICE_WRITE_TYPE]; + +interface NoticeFormProps { + notice: Notice; + writeType: NoticeWriteType; + writeNotice: (notice: NoticeRequest) => void; +} + +export default function NoticeForm({ notice, writeType, writeNotice }: NoticeFormProps) { + const title = useText(notice.title); + const content = useText(notice.content); + const bannerTitle = useText(notice.bannerTitle); + const bannerSubTitle = useText(notice.bannerSubtitle); + const [deadline, setDeadline] = useState(notice.deadline); + + const handleDateChange = (event: ChangeEvent) => { + /** + * 2023-11-01T17:26 와 같은 형식인 데이터 + */ + const updatedDeadline = event.currentTarget.value.replace('T', ' ') as StringDate; + setDeadline(updatedDeadline); + }; + + return ( + ) => { + event.preventDefault(); + + const notice: NoticeRequest = { + title: title.text, + content: content.text, + deadline, + bannerTitle: bannerTitle.text, + bannerSubtitle: bannerSubTitle.text, + }; + + writeNotice(notice); + }} + > + 공지사항 {writeType} 페이지 + + + + + + 마감기한 + + + + 제출 + + + ); +} + +interface CustomInputProps { + label: string; + handleTextChange: ( + event: ChangeEvent, + limit: InputLengthRange + ) => void; + limit: number; + text: string; + rows?: number; +} + +function CustomTextarea({ label, handleTextChange, text, limit, rows = 10 }: CustomInputProps) { + return ( + + + {label} ({text.length}/{limit}) + + ) => + handleTextChange(event, { MAX_LENGTH: limit, MIN_LENGTH: 0 }) + } + maxLength={limit} + required + /> + + ); +} diff --git a/frontend/src/components/notice/NoticeForm/style.ts b/frontend/src/components/notice/NoticeForm/style.ts new file mode 100644 index 000000000..555b9aa0a --- /dev/null +++ b/frontend/src/components/notice/NoticeForm/style.ts @@ -0,0 +1,43 @@ +import styled from 'styled-components'; + +export const Container = styled.form` + display: flex; + flex-direction: column; + + gap: 30px; + + padding: 50px; +`; + +export const Title = styled.h1` + font: var(--text-page-title); +`; + +export const TextareaContainer = styled.div` + display: flex; + flex-direction: column; + gap: 10px; +`; + +export const Textarea = styled.textarea` + border: 1px solid black; + padding: 6px; + + font: var(--text-body); +`; + +export const Label = styled.label` + font: var(--text-title); +`; + +export const ButtonWrapper = styled.div` + width: 300px; + height: 100px; + + align-self: center; +`; + +export const DateInput = styled.input` + padding: 30px 10px; + border: 1px solid black; +`; diff --git a/frontend/src/components/notice/NoticeList/NoticeItem/NoticeItem.stories.tsx b/frontend/src/components/notice/NoticeList/NoticeItem/NoticeItem.stories.tsx new file mode 100644 index 000000000..adb0c31d6 --- /dev/null +++ b/frontend/src/components/notice/NoticeList/NoticeItem/NoticeItem.stories.tsx @@ -0,0 +1,17 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { MOCK_TRANSFORM_NOTICE } from '@mocks/mockData/notice'; + +import NoticeItem from '.'; + +const meta: Meta = { + component: NoticeItem, + decorators: [storyFn =>
{storyFn()}
], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/components/notice/NoticeList/NoticeItem/index.tsx b/frontend/src/components/notice/NoticeList/NoticeItem/index.tsx new file mode 100644 index 000000000..de190359b --- /dev/null +++ b/frontend/src/components/notice/NoticeList/NoticeItem/index.tsx @@ -0,0 +1,19 @@ +import { Notice } from '@type/notice'; + +import { PATH } from '@constants/path'; + +import * as S from './style'; + +interface NoticeItemProps { + notice: Notice; +} +export default function NoticeItem({ notice: { id, title, createdAt } }: NoticeItemProps) { + return ( + + + {title} + {createdAt} + + + ); +} diff --git a/frontend/src/components/notice/NoticeList/NoticeItem/style.ts b/frontend/src/components/notice/NoticeList/NoticeItem/style.ts new file mode 100644 index 000000000..df197ee69 --- /dev/null +++ b/frontend/src/components/notice/NoticeList/NoticeItem/style.ts @@ -0,0 +1,56 @@ +import { Link } from 'react-router-dom'; + +import { styled } from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const Container = styled.li``; + +export const DetailLink = styled(Link)` + display: flex; + flex-direction: column; + width: 100%; + + padding: 10px 15px; + + @media (min-width: ${theme.breakpoint.sm}) { + flex-direction: row; + justify-content: space-between; + + padding: 16px 20px; + } +`; + +export const Title = styled.span` + width: 100%; + display: -webkit-box; + + text-overflow: ellipsis; + word-break: break-word; + + overflow: hidden; + + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + + font: var(--text-body); + + transition: color 0.2s ease-in-out; + + &:hover { + color: rgba(51, 122, 183, 1); + } +`; + +export const CreatedAt = styled.span` + font: var(--text-body); + font-size: 1.4rem; + + text-align: right; + + color: var(--text-dark-gray); + + @media (min-width: ${theme.breakpoint.sm}) { + width: 90px; + } +`; diff --git a/frontend/src/components/notice/NoticeList/NoticeList.stories.tsx b/frontend/src/components/notice/NoticeList/NoticeList.stories.tsx new file mode 100644 index 000000000..8588181cd --- /dev/null +++ b/frontend/src/components/notice/NoticeList/NoticeList.stories.tsx @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { MOCK_TRANSFORM_NOTICE_LIST } from '@mocks/mockData/notice'; + +import NoticeList from '.'; + +const meta: Meta = { + component: NoticeList, + decorators: [storyFn =>
{storyFn()}
], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => ( +
+ +
+ ), +}; diff --git a/frontend/src/components/notice/NoticeList/index.tsx b/frontend/src/components/notice/NoticeList/index.tsx new file mode 100644 index 000000000..812c1afbf --- /dev/null +++ b/frontend/src/components/notice/NoticeList/index.tsx @@ -0,0 +1,18 @@ +import { Notice } from '@type/notice'; + +import NoticeItem from './NoticeItem'; +import * as S from './style'; + +interface NoticeListProps { + noticeList: Notice[]; +} + +export default function NoticeList({ noticeList }: NoticeListProps) { + return ( + + {noticeList.map(notice => ( + + ))} + + ); +} diff --git a/frontend/src/components/notice/NoticeList/style.ts b/frontend/src/components/notice/NoticeList/style.ts new file mode 100644 index 000000000..e04867fe7 --- /dev/null +++ b/frontend/src/components/notice/NoticeList/style.ts @@ -0,0 +1,16 @@ +import { styled } from 'styled-components'; + +export const Container = styled.ul` + width: 100%; + + border-radius: 5px; + border: 1px solid rgba(0, 0, 0, 0.2); + + > li { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + + &:last-child { + border-bottom: none; + } + } +`; diff --git a/frontend/src/components/notice/NoticeListFetcher/index.tsx b/frontend/src/components/notice/NoticeListFetcher/index.tsx new file mode 100644 index 000000000..96debdc92 --- /dev/null +++ b/frontend/src/components/notice/NoticeListFetcher/index.tsx @@ -0,0 +1,42 @@ +import { Notice, NoticeListType } from '@type/notice'; + +import { useStackedNoticeList } from '@hooks'; + +import SquareButton from '@components/common/SquareButton'; + +import NoticeList from '../NoticeList'; + +import * as S from './style'; + +export default function NoticeListFetcher() { + const { data, hasNextPage, fetchNextPage, isFetchingNextPage } = useStackedNoticeList(); + + const noticeList = data?.pages.reduce((accumulator: Notice[], currentValue: NoticeListType) => { + return [...accumulator, ...currentValue.noticeList]; + }, []); + + const handleNextFetchClick = () => { + if (isFetchingNextPage) return; + + fetchNextPage(); + }; + + if (!noticeList) return <>; + + return ( + <> + + {hasNextPage && ( + + + 더보기 + + + )} + + ); +} diff --git a/frontend/src/components/notice/NoticeListFetcher/style.ts b/frontend/src/components/notice/NoticeListFetcher/style.ts new file mode 100644 index 000000000..e055c7254 --- /dev/null +++ b/frontend/src/components/notice/NoticeListFetcher/style.ts @@ -0,0 +1,8 @@ +import { styled } from 'styled-components'; + +export const ButtonWrapper = styled.div` + width: 80px; + height: 46px; + + margin-top: 18px; +`; diff --git a/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/index.tsx b/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/index.tsx index 63e0b4dd9..cdb283907 100644 --- a/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/index.tsx +++ b/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/index.tsx @@ -1,8 +1,11 @@ +import { MouseEvent } from 'react'; + import ProgressBar from './ProgressBar'; import * as S from './style'; interface WrittenVoteOptionProps { handleVoteClick: () => void; + handleImageClick?: (event: MouseEvent) => void; text: string; isStatisticsVisible: boolean; peopleCount: number; @@ -15,6 +18,7 @@ interface WrittenVoteOptionProps { export default function WrittenVoteOption({ handleVoteClick, + handleImageClick, text, isStatisticsVisible, peopleCount, @@ -31,7 +35,9 @@ export default function WrittenVoteOption({ $isSelected={isSelected} onClick={handleVoteClick} > - {!isPreview && imageUrl && } + {!isPreview && imageUrl && ( + + )} {isPreview ? ( {text} ) : ( diff --git a/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/style.ts b/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/style.ts index 1694f14b9..3e7b0cd85 100644 --- a/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/style.ts +++ b/frontend/src/components/optionList/WrittenVoteOptionList/WrittenVoteOption/style.ts @@ -24,11 +24,10 @@ export const Container = styled.button<{ $isSelected: boolean }>` `; export const Image = styled.img` - border-radius: 4px; - border: 1px solid var(--gray); - margin-bottom: 10px; - width: 80%; + border-radius: 4px; + border: 1px solid var(--bright-gray); + margin: 0 auto 10px auto; aspect-ratio: 1/1; object-fit: contain; diff --git a/frontend/src/components/optionList/WrittenVoteOptionList/index.tsx b/frontend/src/components/optionList/WrittenVoteOptionList/index.tsx index 70f13c2a6..53310c858 100644 --- a/frontend/src/components/optionList/WrittenVoteOptionList/index.tsx +++ b/frontend/src/components/optionList/WrittenVoteOptionList/index.tsx @@ -1,3 +1,5 @@ +import { MouseEvent } from 'react'; + import { WrittenVoteOptionType } from '@type/post'; import * as S from './style'; @@ -9,6 +11,7 @@ interface WrittenVoteOptionListProps { selectedOptionId: number; voteOptionList: WrittenVoteOptionType[]; handleVoteClick: (newOptionId: number) => void; + handleImageClick?: (event: MouseEvent) => void; } export default function WrittenVoteOptionList({ @@ -17,6 +20,7 @@ export default function WrittenVoteOptionList({ voteOptionList, selectedOptionId, handleVoteClick, + handleImageClick, }: WrittenVoteOptionListProps) { return ( @@ -39,6 +43,7 @@ export default function WrittenVoteOptionList({ isStatisticsVisible={isStatisticsVisible} isSelected={isSelected} handleVoteClick={() => handleVoteClick(voteOption.id)} + handleImageClick={handleImageClick} /> ); })} diff --git a/frontend/src/components/post/Post/index.tsx b/frontend/src/components/post/Post/index.tsx index f215346e1..3db91ece1 100644 --- a/frontend/src/components/post/Post/index.tsx +++ b/frontend/src/components/post/Post/index.tsx @@ -1,13 +1,15 @@ -import { ForwardedRef, forwardRef, memo, useContext, useEffect } from 'react'; +import { ForwardedRef, forwardRef, memo, useContext } from 'react'; +import { useNavigate } from 'react-router-dom'; import { PostInfo } from '@type/post'; -import { useToast } from '@hooks'; - import { AuthContext } from '@hooks/context/auth'; +import { ToastContext } from '@hooks/context/toast'; import { useCreateVote } from '@hooks/query/post/useCreateVote'; import { useEditVote } from '@hooks/query/post/useEditVote'; +import { useImageZoomModal } from '@hooks/useImageZoomModal'; +import ImageZoomModal from '@components/common/ImageZoomModal'; import WrittenVoteOptionList from '@components/optionList/WrittenVoteOptionList'; import { PATH } from '@constants/path'; @@ -20,8 +22,6 @@ import { convertTimeToWord } from '@utils/time/convertTimeToWord'; import commentIcon from '@assets/comment.svg'; import photoIcon from '@assets/photo_black.svg'; -import Toast from '../../common/Toast'; - import * as S from './style'; interface PostProps { @@ -33,6 +33,7 @@ const Post = forwardRef(function Post( { postInfo, isPreview }: PostProps, ref: ForwardedRef ) { + const navigate = useNavigate(); const { postId, category, @@ -47,18 +48,15 @@ const Post = forwardRef(function Post( commentCount, } = postInfo; const { loggedInfo } = useContext(AuthContext); - const { isToastOpen, openToast, toastMessage } = useToast(); + const { addMessage } = useContext(ToastContext); + const { closeZoomModal, handleCloseClick, handleImageClick, imageSrc, zoomModalRef } = + useImageZoomModal(); - const { - mutate: createVote, - isError: isCreateVoteError, - error: createVoteError, - } = useCreateVote({ isPreview, postId }); - const { - mutate: editVote, - isError: isEditVoteError, - error: editVoteError, - } = useEditVote({ isPreview, postId }); + const { mutate: createVote, isLoading: isCreateVoteLoading } = useCreateVote({ + isPreview, + postId, + }); + const { mutate: editVote, isLoading: isEditVoteLoading } = useEditVote({ isPreview, postId }); const isActive = !checkClosedPost(deadline); @@ -66,18 +64,23 @@ const Post = forwardRef(function Post( writer.id === loggedInfo.id || !isActive || voteInfo.selectedOptionId !== POST.NOT_VOTE; const handleVoteClick = (newOptionId: number) => { + if (isCreateVoteLoading || isEditVoteLoading) { + addMessage('투표 중입니다. 잠시 후 다시 시도해주세요.'); + return; + } + if (!loggedInfo.isLoggedIn) { - openToast('투표는 로그인 후에 이용하실 수 있습니다.'); + addMessage('투표는 로그인 후에 이용하실 수 있습니다.'); return; } if (!isActive) { - openToast('마감된 게시글에는 투표를 할 수 없습니다.'); + addMessage('마감된 게시글에는 투표를 할 수 없습니다.'); return; } if (writer.nickname === loggedInfo.userInfo?.nickname) { - openToast('내가 쓴 글에는 투표를 할 수 없습니다.'); + addMessage('내가 쓴 글에는 투표를 할 수 없습니다.'); return; } @@ -94,29 +97,19 @@ const Post = forwardRef(function Post( }); }; - useEffect(() => { - if (isCreateVoteError && createVoteError instanceof Error) { - const errorResponse = JSON.parse(createVoteError.message); - openToast(errorResponse.message); - return; - } - }, [isCreateVoteError, createVoteError]); - - useEffect(() => { - if (isEditVoteError && editVoteError instanceof Error) { - const errorResponse = JSON.parse(editVoteError.message); - openToast(errorResponse.message); - return; - } - }, [isEditVoteError, editVoteError]); - const isPreviewTabIndex = isPreview ? undefined : 0; return ( { + if (!isPreview) return; + + navigate(`${PATH.POST}/${postId}`); + }} $isPreview={isPreview} aria-describedby={ isPreview @@ -143,7 +136,7 @@ const Post = forwardRef(function Post( > {title} - + {writer.nickname} @@ -161,7 +154,7 @@ const Post = forwardRef(function Post( {isActive ? convertTimeToWord(deadline) : '마감 완료'} - + {convertTextToElement(content)} - {!isPreview && imageUrl && } + {!isPreview && imageUrl && ( + + )} {isPreview && ( - + {imageCount} - - + + {commentCount} - + )} - {isToastOpen && ( - - {toastMessage} - - )} + ); }); diff --git a/frontend/src/components/post/Post/style.ts b/frontend/src/components/post/Post/style.ts index 2e769689b..840111b5c 100644 --- a/frontend/src/components/post/Post/style.ts +++ b/frontend/src/components/post/Post/style.ts @@ -1,5 +1,3 @@ -import { Link } from 'react-router-dom'; - import { styled } from 'styled-components'; import { theme } from '@styles/theme'; @@ -9,7 +7,7 @@ export const Container = styled.li<{ $isPreview: boolean }>` position: relative; - font: var(--text-small); + font: var(--text-default); letter-spacing: 0.5px; line-height: 1.5; @@ -22,7 +20,7 @@ export const Container = styled.li<{ $isPreview: boolean }>` `; export const Category = styled.span` - font: var(--text-small); + font: var(--text-default); @media (min-width: ${theme.breakpoint.sm}) { font: var(--text-caption); @@ -58,22 +56,25 @@ export const Title = styled.p<{ $isPreview: boolean }>` } `; -export const Wrapper = styled.div` +export const WriterInfoWrapper = styled.div` display: flex; align-items: center; justify-content: space-between; - font: var(--text-small); - - & > :nth-child(2) { - margin-left: 10px; - } + font: var(--text-default); + width: 100%; @media (min-width: ${theme.breakpoint.sm}) { font: var(--text-caption); } `; +export const Wrapper = styled.div` + & > :nth-child(2) { + margin-left: 10px; + } +`; + export const Content = styled.div<{ $isPreview: boolean }>` display: -webkit-box; @@ -83,6 +84,7 @@ export const Content = styled.div<{ $isPreview: boolean }>` text-overflow: ellipsis; word-break: break-word; white-space: pre-wrap; + text-align: start; overflow: hidden; @@ -94,22 +96,28 @@ export const Content = styled.div<{ $isPreview: boolean }>` } `; -export const DetailLink = styled(Link)<{ $isPreview: boolean }>` +export const DetailLink = styled.button<{ $isPreview: boolean }>` display: flex; flex-direction: column; gap: 10px; + + width: 100%; + + cursor: ${({ $isPreview }) => $isPreview && 'pointer'}; `; export const Image = styled.img` width: 80%; border-radius: 4px; margin-bottom: 10px; - border: 1px solid var(--gray); + border: 1px solid var(--bright-gray); align-self: center; aspect-ratio: 1/1; object-fit: contain; + cursor: pointer; + @media (min-width: ${theme.breakpoint.md}) { margin-bottom: 20px; } @@ -124,7 +132,7 @@ export const PreviewBottom = styled.div` margin-top: 10px; `; -export const IconUint = styled.div` +export const IconUnit = styled.div` display: flex; align-items: flex-end; gap: 5px; diff --git a/frontend/src/components/post/PostList/style.ts b/frontend/src/components/post/PostList/style.ts index e71a10f89..3c7c5435c 100644 --- a/frontend/src/components/post/PostList/style.ts +++ b/frontend/src/components/post/PostList/style.ts @@ -15,6 +15,7 @@ export const SelectContainer = styled.div` align-items: center; position: relative; + width: 100%; padding: 20px 20px 30px 20px; border-bottom: 1px solid rgba(0, 0, 0, 0.2); diff --git a/frontend/src/constants/animation.ts b/frontend/src/constants/animation.ts index d977b8a4b..7741fe8e7 100644 --- a/frontend/src/constants/animation.ts +++ b/frontend/src/constants/animation.ts @@ -1,4 +1,4 @@ /** - * 토스트가 사용자에게 보여지는 시간을 뜻 합니다. + * 토스트가 사용자에게 보여지는 시간(ms단위)을 뜻합니다. */ -export const TOAST_TIME = 3; +export const TOAST_TIME = 3000; diff --git a/frontend/src/constants/api.ts b/frontend/src/constants/api.ts index 17b13d9ca..1bd41bcad 100644 --- a/frontend/src/constants/api.ts +++ b/frontend/src/constants/api.ts @@ -20,6 +20,7 @@ export const REQUEST_POST_KIND_URL = { export const DEFAULT_CATEGORY_ID = 0; export const POST_AMOUNT_PER_PAGE = 10; +export const ALARM_AMOUNT_PER_PAGE = 10; /** * 백앤드로 보낼때 검색 쿼리키로 사용하는 문자입니다. ?keyword="검색어" diff --git a/frontend/src/constants/cookie.ts b/frontend/src/constants/cookie.ts index 2a7227240..411f0031c 100644 --- a/frontend/src/constants/cookie.ts +++ b/frontend/src/constants/cookie.ts @@ -5,3 +5,5 @@ import { convertDayToSecond } from '@utils/time/convertDayToSecond'; * 365일 */ export const ESSENTIAL_MAX_AGE = convertDayToSecond(365); +export const APP_VISIBLE_MAX_AGE = convertDayToSecond(7); +export const BANNER_VISIBLE_MAX_AGE = convertDayToSecond(1); diff --git a/frontend/src/constants/path.ts b/frontend/src/constants/path.ts index f95296fd1..bb2a0443f 100644 --- a/frontend/src/constants/path.ts +++ b/frontend/src/constants/path.ts @@ -7,7 +7,10 @@ export const BASE_PATH = { ADMIN: '/admin', SEARCH: '/search', RANKING: '/ranking', - ANNOUNCEMENT: '/announcements', + NOTICES: '/notices', + REPORTS: '/reports', + REPORT: '/reports', + ALARM: '/alarms', }; export const PATH = { @@ -19,4 +22,8 @@ export const PATH = { USER_VOTE: `${BASE_PATH.USER}/votes`, USER_INFO: `${BASE_PATH.USER}/myPage`, USER_INFO_REGISTER: `${BASE_PATH.USER}/register`, + ADMIN_PENDING_REPORT: `${BASE_PATH.ADMIN}${BASE_PATH.REPORTS}/pending`, + ADMIN_NOTICE: `${BASE_PATH.ADMIN}${BASE_PATH.NOTICES}`, + ADMIN_NOTICE_WRITE: `${BASE_PATH.ADMIN}${BASE_PATH.NOTICES}/write`, + REPORT_ALARM: `${BASE_PATH.ALARM}/report`, }; diff --git a/frontend/src/constants/policyMessage.ts b/frontend/src/constants/policyMessage.ts index d1a59dc6d..5f72e1a13 100644 --- a/frontend/src/constants/policyMessage.ts +++ b/frontend/src/constants/policyMessage.ts @@ -1,3 +1,5 @@ +import { ReportType } from '@type/report'; + import { MAX_DEADLINE, NICKNAME, @@ -69,8 +71,12 @@ export const NICKNAME_POLICY = { LIMIT_KOREAN: '한글은 완전한 단어만 가능합니다.', } as const; -export const APP_LAUNCH_EVENT = { - TITLE: '🎉보투게더 출시 기념 이벤트 종료', - CONTENT: '지금 결과를 확인하러 가볼까요?', - CONTENT_DETAIL: '', -} as const; +export const REPORT_TYPE: Record = { + POST: { name: '게시글', actionMessage: '게시글이 삭제 조치 되었습니다.' }, + COMMENT: { name: '댓글', actionMessage: '댓글이 삭제 조치 되었습니다.' }, + NICKNAME: { name: '닉네임', actionMessage: '닉네임이 변경 조치 되었습니다.' }, +}; + +export const ERROR_MESSAGE = { + DEFAULT: '요청을 처리할 수 없습니다. 잠시 후 다시 시도해주세요', +}; diff --git a/frontend/src/constants/post.ts b/frontend/src/constants/post.ts index f4dcf62df..46ae51890 100644 --- a/frontend/src/constants/post.ts +++ b/frontend/src/constants/post.ts @@ -1,3 +1,5 @@ +import type { CommentAction, CommentMenu, CommentUser, MenuItem } from '@type/menu'; + export const STATUS = { ALL: 'all', PROGRESS: 'progress', @@ -19,3 +21,33 @@ export const REQUEST_SORTING_OPTION = { [SORTING.LATEST]: 'LATEST', [SORTING.POPULAR]: 'HOT', } as const; + +export const COMMENT_USER = { + GUEST: 'GUEST', + NOT_WRITER: 'NOT_WRITER', + WRITER: 'WRITER', +} as const; + +export const COMMENT_ACTION = { + DELETE: 'delete', + USER_REPORT: 'userReport', + COMMENT_REPORT: 'commentReport', + EDIT: 'edit', +} as const; + +export const COMMENT_USER_MENU: Record = { + [COMMENT_USER.GUEST]: COMMENT_USER.NOT_WRITER, + [COMMENT_USER.NOT_WRITER]: COMMENT_USER.NOT_WRITER, + [COMMENT_USER.WRITER]: COMMENT_USER.WRITER, +} as const; + +export const COMMENT_MENU: Record[]> = { + [COMMENT_USER.NOT_WRITER]: [ + { color: 'black', content: '닉네임 신고', action: COMMENT_ACTION.USER_REPORT }, + { color: 'black', content: '댓글 신고', action: COMMENT_ACTION.COMMENT_REPORT }, + ], + [COMMENT_USER.WRITER]: [ + { content: '수정', color: 'black', action: COMMENT_ACTION.EDIT }, + { content: '삭제', color: 'red', action: COMMENT_ACTION.DELETE }, + ], +}; diff --git a/frontend/src/constants/queryKey.ts b/frontend/src/constants/queryKey.ts index 4b14e2be0..122a684ca 100644 --- a/frontend/src/constants/queryKey.ts +++ b/frontend/src/constants/queryKey.ts @@ -7,4 +7,9 @@ export const QUERY_KEY = { PASSION_RANKING: 'passionRanking', POPULAR_RANKING: 'popularRanking', VOTE_STATISTICS: 'voteStatistics', + REPORT: 'report', + ALARM_CONTENT: 'contentAlarm', + ALARM_REPORT: 'reportAlarm', + REPORT_APPROVE_RESULT: 'reportApproveResult', + NOTICE: 'notice', }; diff --git a/frontend/src/constants/report.ts b/frontend/src/constants/report.ts new file mode 100644 index 000000000..30aad51d3 --- /dev/null +++ b/frontend/src/constants/report.ts @@ -0,0 +1,11 @@ +export const REPORT_TYPE = { + POST: '게시글', + COMMENT: '댓글', + NICKNAME: '닉네임', +} as const; + +export const REPORT_ACTION_TYPE = { + [REPORT_TYPE.POST]: '삭제', + [REPORT_TYPE.COMMENT]: '삭제', + [REPORT_TYPE.NICKNAME]: '수정', +} as const; diff --git a/frontend/src/hooks/context/toast.tsx b/frontend/src/hooks/context/toast.tsx new file mode 100644 index 000000000..4dc3ebdd4 --- /dev/null +++ b/frontend/src/hooks/context/toast.tsx @@ -0,0 +1,50 @@ +import { PropsWithChildren, createContext, useEffect, useRef, useState } from 'react'; + +import ToastContainer from '@components/ToastContainer'; + +import { TOAST_TIME } from '@constants/animation'; + +export interface ToastInfo { + id: number; + text: string; +} + +interface ToastContextProps { + addMessage: (message: string) => void; +} + +export const ToastContext = createContext({ + addMessage: (message: string) => {}, +}); + +export default function ToastProvider({ children }: PropsWithChildren) { + const [toastList, setToastList] = useState([]); + + const timeId = useRef(null); + + useEffect(() => { + if (timeId.current) window.clearTimeout(timeId.current); + + if (toastList.length !== 0) { + timeId.current = window.setTimeout(() => { + setToastList([]); + + if (timeId.current) window.clearTimeout(timeId.current); + }, TOAST_TIME); + } + }, [toastList]); + + const addMessage = (message: string) => { + if (toastList.find(toast => toast.text === message)) return; + + const id = Date.now(); + setToastList(toastList => [...toastList, { id, text: message }]); + }; + + return ( + + + {children} + + ); +} diff --git a/frontend/src/hooks/index.tsx b/frontend/src/hooks/index.tsx index ab7056e8f..ed5de850e 100644 --- a/frontend/src/hooks/index.tsx +++ b/frontend/src/hooks/index.tsx @@ -35,9 +35,19 @@ import { usePassionUserRanking } from './query/ranking/usePassionUserRanking'; import { usePopularPostRanking } from './query/ranking/usePopularPostRanking'; import { useUserRanking } from './query/ranking/useUserRanking'; +// 공지 사항 리엑트 쿼리 훅 +import { useBannerNotice } from './query/notice/useBannerNotice'; +import { useCreateNotice } from './query/notice/useCreateNotice'; +import { useDeleteNotice } from './query/notice/useDeleteNotice'; +import { useModifyNotice } from './query/notice/useModifyNotice'; +import { usePagedNoticeList } from './query/notice/usePagedNoticeList'; +import { useNoticeDetail } from './query/notice/useNoticeDetail'; +import { useStackedNoticeList } from './query/notice/useStackedNoticeList'; + // 컨텍스트 커스텀 훅 import { AuthContext } from './context/auth'; import { PostOptionContext } from './context/postOption'; +import { ToastContext } from './context/toast'; // 일반 커스텀 훅 import { useContentImage } from './useContentImage'; @@ -51,10 +61,10 @@ import { usePostRequestInfo } from './usePostRequestInfo'; import { useSearch } from './useSearch'; import { useSelect } from './useSelect'; import { useText } from './useText'; -import { useToast } from './useToast'; import { useToggle } from './useToggle'; import { useToggleSwitch } from './useToggleSwitch'; import { useWritingOption } from './useWritingOption'; +import { usePagination } from './usePagination'; export { useCount, @@ -69,9 +79,9 @@ export { useContentImage, useMultiSelect, useText, - useToast, useToggle, useWritingOption, + usePagination, }; export { @@ -96,6 +106,13 @@ export { useCreateComment, useDeleteComment, useEditComment, + useBannerNotice, + useCreateNotice, + useDeleteNotice, + useModifyNotice, + usePagedNoticeList, + useNoticeDetail, + useStackedNoticeList, }; -export { AuthContext, PostOptionContext }; +export { AuthContext, PostOptionContext, ToastContext }; diff --git a/frontend/src/hooks/query/alarm/useContentAlarmList.ts b/frontend/src/hooks/query/alarm/useContentAlarmList.ts new file mode 100644 index 000000000..24d66160a --- /dev/null +++ b/frontend/src/hooks/query/alarm/useContentAlarmList.ts @@ -0,0 +1,26 @@ +import { useInfiniteQuery } from '@tanstack/react-query'; + +import { ContentAlarmList, getContentAlarmList } from '@api/alarm'; + +import { ALARM_AMOUNT_PER_PAGE } from '@constants/api'; +import { QUERY_KEY } from '@constants/queryKey'; + +export const useContentAlarmList = () => { + const { data, error, fetchNextPage, hasNextPage, isFetchingNextPage } = + useInfiniteQuery( + [QUERY_KEY.ALARM_CONTENT], + ({ pageParam = 0 }) => getContentAlarmList(pageParam), + { + getNextPageParam: lastPage => { + if (lastPage.alarmList.length !== ALARM_AMOUNT_PER_PAGE) return; + + return lastPage.pageNumber + 1; + }, + suspense: true, + } + ); + + const isListEmpty = data?.pages[0].alarmList.length === 0; + + return { data, error, fetchNextPage, hasNextPage, isFetchingNextPage, isListEmpty }; +}; diff --git a/frontend/src/hooks/query/alarm/useReadAlarm.ts b/frontend/src/hooks/query/alarm/useReadAlarm.ts new file mode 100644 index 000000000..7abbac228 --- /dev/null +++ b/frontend/src/hooks/query/alarm/useReadAlarm.ts @@ -0,0 +1,21 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { AlarmType } from '@type/alarm'; + +import { readAlarm } from '@api/alarm'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useReadAlarm = (type: AlarmType) => { + const queryClient = useQueryClient(); + const alarmQueryKey = type === 'CONTENT' ? QUERY_KEY.ALARM_CONTENT : QUERY_KEY.ALARM_REPORT; + + const { mutate } = useMutation({ + mutationFn: async (alarmId: number) => await readAlarm(alarmId, type), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [alarmQueryKey] }); + }, + }); + + return { mutate }; +}; diff --git a/frontend/src/hooks/query/alarm/useReportAlarmList.ts b/frontend/src/hooks/query/alarm/useReportAlarmList.ts new file mode 100644 index 000000000..3213a4e33 --- /dev/null +++ b/frontend/src/hooks/query/alarm/useReportAlarmList.ts @@ -0,0 +1,26 @@ +import { useInfiniteQuery } from '@tanstack/react-query'; + +import { ReportAlarmList, getReportAlarmList } from '@api/alarm'; + +import { ALARM_AMOUNT_PER_PAGE } from '@constants/api'; +import { QUERY_KEY } from '@constants/queryKey'; + +export const useReportAlarmList = () => { + const { data, error, fetchNextPage, hasNextPage, isFetchingNextPage } = + useInfiniteQuery( + [QUERY_KEY.ALARM_REPORT], + ({ pageParam = 0 }) => getReportAlarmList(pageParam), + { + getNextPageParam: lastPage => { + if (lastPage.alarmList.length !== ALARM_AMOUNT_PER_PAGE) return; + + return lastPage.pageNumber + 1; + }, + suspense: true, + } + ); + + const isListEmpty = data?.pages[0].alarmList.length === 0; + + return { data, error, fetchNextPage, hasNextPage, isFetchingNextPage, isListEmpty }; +}; diff --git a/frontend/src/hooks/query/category/useCategoryFavoriteToggle.ts b/frontend/src/hooks/query/category/useCategoryFavoriteToggle.ts index 5c238285f..5f2141df2 100644 --- a/frontend/src/hooks/query/category/useCategoryFavoriteToggle.ts +++ b/frontend/src/hooks/query/category/useCategoryFavoriteToggle.ts @@ -1,21 +1,26 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; import { Category } from '@type/category'; +import { ToastContext } from '@hooks/context/toast'; + import { addFavoriteCategory, removeFavoriteCategory } from '@api/categoryList'; import { QUERY_KEY } from '@constants/queryKey'; export const useCategoryFavoriteToggle = () => { const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); const LOGGED_IN = true; const queryKey = [QUERY_KEY.CATEGORIES, LOGGED_IN]; - const { mutate, isLoading, isError, error } = useMutation( + const { mutate } = useMutation( ({ id, isFavorite }: Omit) => isFavorite ? removeFavoriteCategory(id) : addFavoriteCategory(id), { - onMutate: async ({ id }: Omit) => { + onMutate: async ({ id, isFavorite }: Omit) => { const oldCategoryList: Category[] | undefined = queryClient.getQueryData(queryKey); if (oldCategoryList) { @@ -25,15 +30,27 @@ export const useCategoryFavoriteToggle = () => { ); queryClient.setQueryData(queryKey, updatedCategoryList); - return () => queryClient.setQueryData(queryKey, oldCategoryList); + return { + isFavorite, + rollback: () => queryClient.setQueryData(queryKey, oldCategoryList), + }; } }, - onError: (error, _, rollback) => { - if (rollback) { - rollback(); + onError: (error, _, context) => { + if (context) { + context.rollback(); + const message = + error instanceof Error + ? error.message + : `카테고리 즐겨찾기 ${context.isFavorite ? '해제' : '등록'}을 실패했습니다.`; + addMessage(message); + return; } - window.console.log('Category favorite toggle error', error); + + const message = + error instanceof Error ? error.message : `카테고리 즐겨찾기 설정을 실패했습니다.`; + addMessage(message); }, onSettled: () => { queryClient.invalidateQueries(queryKey); @@ -41,5 +58,5 @@ export const useCategoryFavoriteToggle = () => { } ); - return { mutate, isLoading, isError, error }; + return { mutate }; }; diff --git a/frontend/src/hooks/query/comment/useCreateComment.ts b/frontend/src/hooks/query/comment/useCreateComment.ts index 93e9155eb..a05af8678 100644 --- a/frontend/src/hooks/query/comment/useCreateComment.ts +++ b/frontend/src/hooks/query/comment/useCreateComment.ts @@ -1,22 +1,29 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { CommentRequest, createComment } from '@api/comment'; import { QUERY_KEY } from '@constants/queryKey'; export const useCreateComment = (postId: number) => { const queryClient = useQueryClient(); - const { mutate, isSuccess, isLoading, isError, error } = useMutation( + const { addMessage } = useContext(ToastContext); + + const { mutate, isSuccess, isLoading } = useMutation( (newComment: CommentRequest) => createComment(postId, newComment), { onSuccess: () => { queryClient.invalidateQueries([QUERY_KEY.POSTS, postId, QUERY_KEY.COMMENTS]); }, onError: error => { - window.console.log('createComment error', error); + const message = error instanceof Error ? error.message : '댓글 작성을 실패했습니다.'; + addMessage(message); }, } ); - return { mutate, isSuccess, isLoading, isError, error }; + return { mutate, isSuccess, isLoading }; }; diff --git a/frontend/src/hooks/query/comment/useDeleteComment.ts b/frontend/src/hooks/query/comment/useDeleteComment.ts index b0d5d9442..c5ed3996e 100644 --- a/frontend/src/hooks/query/comment/useDeleteComment.ts +++ b/frontend/src/hooks/query/comment/useDeleteComment.ts @@ -1,22 +1,27 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { deleteComment } from '@api/comment'; import { QUERY_KEY } from '@constants/queryKey'; export const useDeleteComment = (postId: number, commentId: number) => { const queryClient = useQueryClient(); - const { mutate, isLoading, isError, error } = useMutation( - () => deleteComment(postId, commentId), - { - onSuccess: () => { - queryClient.invalidateQueries([QUERY_KEY.POSTS, postId, QUERY_KEY.COMMENTS]); - }, - onError: error => { - window.console.log('Delete Comment error', error); - }, - } - ); + const { addMessage } = useContext(ToastContext); + + const { mutate, isLoading } = useMutation(() => deleteComment(postId, commentId), { + onSuccess: () => { + queryClient.invalidateQueries([QUERY_KEY.POSTS, postId, QUERY_KEY.COMMENTS]); + addMessage('댓글이 삭제되었습니다.'); + }, + onError: error => { + const message = error instanceof Error ? error.message : '댓글 삭제를 실패했습니다.'; + addMessage(message); + }, + }); - return { mutate, isLoading, isError, error }; + return { mutate, isLoading }; }; diff --git a/frontend/src/hooks/query/comment/useEditComment.ts b/frontend/src/hooks/query/comment/useEditComment.ts index 4e4b6789e..ae39d7465 100644 --- a/frontend/src/hooks/query/comment/useEditComment.ts +++ b/frontend/src/hooks/query/comment/useEditComment.ts @@ -1,24 +1,31 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; import { Comment } from '@type/comment'; +import { ToastContext } from '@hooks/context/toast'; + import { editComment } from '@api/comment'; import { QUERY_KEY } from '@constants/queryKey'; export const useEditComment = (postId: number, commentId: number) => { const queryClient = useQueryClient(); - const { mutate, isSuccess, isLoading, isError, error } = useMutation( + const { addMessage } = useContext(ToastContext); + + const { mutate, isSuccess, isLoading } = useMutation( (updatedComment: Comment) => editComment(postId, commentId, updatedComment), { onSuccess: () => { queryClient.invalidateQueries([QUERY_KEY.POSTS, postId, QUERY_KEY.COMMENTS]); }, onError: error => { - window.console.log('댓글 수정에 실패했습니다. 다시 시도해주세요.', error); + const message = error instanceof Error ? error.message : '댓글 수정을 실패했습니다.'; + addMessage(message); }, } ); - return { mutate, isSuccess, isLoading, isError, error }; + return { mutate, isSuccess, isLoading }; }; diff --git a/frontend/src/hooks/query/notice/useBannerNotice.tsx b/frontend/src/hooks/query/notice/useBannerNotice.tsx new file mode 100644 index 000000000..075eab9d9 --- /dev/null +++ b/frontend/src/hooks/query/notice/useBannerNotice.tsx @@ -0,0 +1,28 @@ +import { useQuery } from '@tanstack/react-query'; + +import { Notice } from '@type/notice'; + +import { getBannerNotice } from '@api/notice'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useBannerNotice = () => { + const { data, isError, isLoading, error } = useQuery( + [QUERY_KEY.NOTICE, 'banner'], + getBannerNotice, + { + suspense: true, + cacheTime: 30 * 60 * 1000, + staleTime: 30 * 60 * 1000, + onSuccess: data => { + return data; + }, + onError: () => { + console.error('배너 공지 사항을 불러오는데 실패했습니다'); + }, + retry: false, + } + ); + + return { data, isError, isLoading, error }; +}; diff --git a/frontend/src/hooks/query/notice/useCreateNotice.tsx b/frontend/src/hooks/query/notice/useCreateNotice.tsx new file mode 100644 index 000000000..074161244 --- /dev/null +++ b/frontend/src/hooks/query/notice/useCreateNotice.tsx @@ -0,0 +1,34 @@ +import { useContext } from 'react'; + +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { NoticeRequest } from '@type/notice'; + +import { ToastContext } from '@hooks/context/toast'; + +import { createNotice } from '@api/notice'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useCreateNotice = () => { + const { addMessage } = useContext(ToastContext); + const queryClient = useQueryClient(); + const { mutate, isLoading, isSuccess, isError, error } = useMutation( + (notice: NoticeRequest) => createNotice(notice), + { + onSuccess: () => { + queryClient.invalidateQueries({ + predicate: ({ queryKey }) => queryKey[0] === QUERY_KEY.NOTICE, + }); + }, + onError: error => { + const errorMessage = + error instanceof Error ? error.message : '공지 사항 생성을 실패했습니다'; + + addMessage(errorMessage); + }, + } + ); + + return { mutate, isLoading, isSuccess, isError, error }; +}; diff --git a/frontend/src/hooks/query/notice/useDeleteNotice.tsx b/frontend/src/hooks/query/notice/useDeleteNotice.tsx new file mode 100644 index 000000000..4b7ed5055 --- /dev/null +++ b/frontend/src/hooks/query/notice/useDeleteNotice.tsx @@ -0,0 +1,32 @@ +import { useContext } from 'react'; + +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { ToastContext } from '@hooks/context/toast'; + +import { deleteNotice } from '@api/notice'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useDeleteNotice = () => { + const { addMessage } = useContext(ToastContext); + const queryClient = useQueryClient(); + const { mutate, isLoading, isSuccess, isError, error } = useMutation( + (noticeId: number) => deleteNotice(noticeId), + { + onSuccess: () => { + queryClient.invalidateQueries({ + predicate: ({ queryKey }) => queryKey[0] === QUERY_KEY.NOTICE, + }); + }, + onError: error => { + const errorMessage = + error instanceof Error ? error.message : '공지 사항 삭제를 실패했습니다'; + + addMessage(errorMessage); + }, + } + ); + + return { mutate, isLoading, isSuccess, isError, error }; +}; diff --git a/frontend/src/hooks/query/notice/useModifyNotice.tsx b/frontend/src/hooks/query/notice/useModifyNotice.tsx new file mode 100644 index 000000000..304629bdc --- /dev/null +++ b/frontend/src/hooks/query/notice/useModifyNotice.tsx @@ -0,0 +1,35 @@ +import { useContext } from 'react'; + +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { NoticeRequest } from '@type/notice'; + +import { ToastContext } from '@hooks/context/toast'; + +import { modifyNotice } from '@api/notice'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useModifyNotice = () => { + const { addMessage } = useContext(ToastContext); + const queryClient = useQueryClient(); + const { mutate, isLoading, isSuccess, isError, error } = useMutation( + ({ noticeId, notice }: { notice: NoticeRequest; noticeId: number }) => + modifyNotice({ notice, noticeId }), + { + onSuccess: () => { + queryClient.invalidateQueries({ + predicate: ({ queryKey }) => queryKey[0] === QUERY_KEY.NOTICE, + }); + }, + onError: error => { + const errorMessage = + error instanceof Error ? error.message : '공지 사항 수정을 실패했습니다'; + + addMessage(errorMessage); + }, + } + ); + + return { mutate, isLoading, isSuccess, isError, error }; +}; diff --git a/frontend/src/hooks/query/notice/useNoticeDetail.tsx b/frontend/src/hooks/query/notice/useNoticeDetail.tsx new file mode 100644 index 000000000..6e0051c12 --- /dev/null +++ b/frontend/src/hooks/query/notice/useNoticeDetail.tsx @@ -0,0 +1,27 @@ +import { useQuery } from '@tanstack/react-query'; + +import { Notice } from '@type/notice'; + +import { getNoticeDetail } from '@api/notice'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useNoticeDetail = (noticeId: number) => { + const { data, isError, isLoading, error } = useQuery( + [QUERY_KEY.NOTICE, noticeId], + () => getNoticeDetail(noticeId), + { + suspense: true, + cacheTime: 60 * 60 * 1000, + staleTime: 60 * 60 * 1000, + onSuccess: data => { + return data; + }, + onError: () => { + console.error('공지 사항의 상세 정보를 불러오는데 실패했습니다'); + }, + } + ); + + return { data, isError, isLoading, error }; +}; diff --git a/frontend/src/hooks/query/notice/usePagedNoticeList.tsx b/frontend/src/hooks/query/notice/usePagedNoticeList.tsx new file mode 100644 index 000000000..d03ad8ba8 --- /dev/null +++ b/frontend/src/hooks/query/notice/usePagedNoticeList.tsx @@ -0,0 +1,55 @@ +import { useQuery } from '@tanstack/react-query'; + +import { NoticeListType } from '@type/notice'; + +import { usePagination } from '@hooks/usePagination'; + +import { getNoticeList } from '@api/notice'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const usePagedNoticeList = (initialPageNumber: number = 0) => { + const { + fetchNextPage, + fetchPrevPage, + checkNextPage, + page, + setPage, + startNumber, + getPageNumberList, + hasPrevPage, + } = usePagination(initialPageNumber, 5); + + const { data, isError, isLoading, error } = useQuery( + [QUERY_KEY.NOTICE, page], + () => getNoticeList(page), + { + suspense: true, + cacheTime: 30 * 60 * 1000, + staleTime: 30 * 60 * 1000, + onSuccess: data => { + return data; + }, + onError: () => { + console.error('공지 사항의 리스트를 불러오는데 실패했습니다'); + }, + } + ); + + const hasNextPage = data && checkNextPage(data.totalPageNumber); + + return { + data, + isError, + isLoading, + error, + fetchNextPage, + fetchPrevPage, + getPageNumberList, + page, + setPage, + startNumber, + hasPrevPage, + hasNextPage, + }; +}; diff --git a/frontend/src/hooks/query/notice/useStackedNoticeList.tsx b/frontend/src/hooks/query/notice/useStackedNoticeList.tsx new file mode 100644 index 000000000..204162649 --- /dev/null +++ b/frontend/src/hooks/query/notice/useStackedNoticeList.tsx @@ -0,0 +1,33 @@ +import { useInfiniteQuery } from '@tanstack/react-query'; + +import { NoticeListType } from '@type/notice'; + +import { getNoticeList } from '@api/notice'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useStackedNoticeList = () => { + const { data, isError, isLoading, error, hasNextPage, fetchNextPage, isFetchingNextPage } = + useInfiniteQuery( + [QUERY_KEY.NOTICE], + ({ pageParam = 0 }) => getNoticeList(pageParam), + { + suspense: true, + cacheTime: 30 * 60 * 1000, + staleTime: 30 * 60 * 1000, + onSuccess: data => { + return data; + }, + onError: () => { + console.error('공지 사항의 리스트를 불러오는데 실패했습니다'); + }, + getNextPageParam: lastPage => { + if (lastPage.currentPageNumber + 1 === lastPage.totalPageNumber) return; + + return lastPage.currentPageNumber + 1; + }, + } + ); + + return { data, isError, isLoading, error, hasNextPage, fetchNextPage, isFetchingNextPage }; +}; diff --git a/frontend/src/hooks/query/post/useCreatePost.ts b/frontend/src/hooks/query/post/useCreatePost.ts index 018ddd1a2..8ec79ca9b 100644 --- a/frontend/src/hooks/query/post/useCreatePost.ts +++ b/frontend/src/hooks/query/post/useCreatePost.ts @@ -1,5 +1,9 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { createPost } from '@api/post'; import { QUERY_KEY } from '@constants/queryKey'; @@ -8,17 +12,17 @@ const IS_LOGGED_IN = true; export const useCreatePost = () => { const queryClient = useQueryClient(); - const { mutate, isLoading, isSuccess, isError, error } = useMutation( - (post: FormData) => createPost(post), - { - onSuccess: () => { - queryClient.invalidateQueries([QUERY_KEY.USER_INFO, IS_LOGGED_IN]); - }, - onError: error => { - window.console.log('createPost error', error); - }, - } - ); - - return { mutate, isLoading, isSuccess, isError, error }; + const { addMessage } = useContext(ToastContext); + + const { mutate, isLoading, isSuccess } = useMutation((post: FormData) => createPost(post), { + onSuccess: () => { + queryClient.invalidateQueries([QUERY_KEY.USER_INFO, IS_LOGGED_IN]); + }, + onError: error => { + const message = error instanceof Error ? error.message : '게시글 작성을 실패했습니다.'; + addMessage(message); + }, + }); + + return { mutate, isLoading, isSuccess }; }; diff --git a/frontend/src/hooks/query/post/useCreateVote.ts b/frontend/src/hooks/query/post/useCreateVote.ts index 3084048d4..c2a15b358 100644 --- a/frontend/src/hooks/query/post/useCreateVote.ts +++ b/frontend/src/hooks/query/post/useCreateVote.ts @@ -1,14 +1,19 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { votePost } from '@api/post'; import { QUERY_KEY } from '@constants/queryKey'; export const useCreateVote = ({ isPreview, postId }: { isPreview: boolean; postId: number }) => { const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); const LOGGED_IN = true; - const { mutate, isError, error } = useMutation({ + const { mutate, isLoading } = useMutation({ mutationFn: (optionId: number) => votePost(postId, optionId), onSuccess: () => { queryClient.invalidateQueries([QUERY_KEY.USER_INFO, true]); @@ -23,9 +28,10 @@ export const useCreateVote = ({ isPreview, postId }: { isPreview: boolean; postI queryClient.invalidateQueries([QUERY_KEY.POST_DETAIL, postId, LOGGED_IN]); }, onError: error => { - window.console.log('투표 선택지 생성에 실패했습니다.', error); + const message = error instanceof Error ? error.message : '투표를 실패했습니다.'; + addMessage(message); }, }); - return { mutate, isError, error }; + return { mutate, isLoading }; }; diff --git a/frontend/src/hooks/query/post/useDeletePost.ts b/frontend/src/hooks/query/post/useDeletePost.ts index daf71e52a..9c7426cf2 100644 --- a/frontend/src/hooks/query/post/useDeletePost.ts +++ b/frontend/src/hooks/query/post/useDeletePost.ts @@ -1,21 +1,29 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { deletePost } from '@api/post'; import { QUERY_KEY } from '@constants/queryKey'; export const useDeletePost = (postId: number, isLogged: boolean) => { const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); - const { mutate, isSuccess, isError, error, isLoading } = useMutation({ + const { mutate, isSuccess, isLoading } = useMutation({ mutationFn: () => deletePost(postId), onSuccess: () => { queryClient.invalidateQueries([QUERY_KEY.USER_INFO, isLogged]); + + addMessage('게시글을 삭제했습니다.'); }, onError: error => { - window.console.log('게시물 삭제에 실패했습니다.', error); + const message = error instanceof Error ? error.message : '게시글 삭제를 실패했습니다.'; + addMessage(message); }, }); - return { mutate, isSuccess, isError, error, isLoading }; + return { mutate, isSuccess, isLoading }; }; diff --git a/frontend/src/hooks/query/post/useEarlyClosePost.ts b/frontend/src/hooks/query/post/useEarlyClosePost.ts index bfd27c61b..ce6cad709 100644 --- a/frontend/src/hooks/query/post/useEarlyClosePost.ts +++ b/frontend/src/hooks/query/post/useEarlyClosePost.ts @@ -1,5 +1,9 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { setEarlyClosePost } from '@api/post'; import { QUERY_KEY } from '@constants/queryKey'; @@ -7,16 +11,17 @@ import { QUERY_KEY } from '@constants/queryKey'; export const useEarlyClosePost = (postId: number) => { const queryClient = useQueryClient(); const LOGGED_IN = true; + const { addMessage } = useContext(ToastContext); - const { mutate, isError, error } = useMutation({ + const { mutate } = useMutation({ mutationFn: () => setEarlyClosePost(postId), onSuccess: () => { queryClient.invalidateQueries([QUERY_KEY.POST_DETAIL, postId, LOGGED_IN]); }, onError: error => { - window.console.log('조기마감에 실패했습니다.', error); + addMessage('게시글 조기마감을 실패했습니다.'); }, }); - return { mutate, isError, error }; + return { mutate }; }; diff --git a/frontend/src/hooks/query/post/useEditPost.ts b/frontend/src/hooks/query/post/useEditPost.ts index 28c230ca9..ae01f3cbe 100644 --- a/frontend/src/hooks/query/post/useEditPost.ts +++ b/frontend/src/hooks/query/post/useEditPost.ts @@ -1,22 +1,29 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { editPost } from '@api/post'; import { QUERY_KEY } from '@constants/queryKey'; export const useEditPost = (postId: number) => { const queryClient = useQueryClient(); - const { mutate, isLoading, isSuccess, isError, error } = useMutation( + const { addMessage } = useContext(ToastContext); + + const { mutate, isLoading, isSuccess } = useMutation( (updatedPost: FormData) => editPost(postId, updatedPost), { onSuccess: () => { queryClient.invalidateQueries([QUERY_KEY.POST_DETAIL, postId]); }, onError: error => { - window.console.log('editPost error', error); + const message = error instanceof Error ? error.message : '게시글 수정을 실패했습니다.'; + addMessage(message); }, } ); - return { mutate, isLoading, isSuccess, isError, error }; + return { mutate, isLoading, isSuccess }; }; diff --git a/frontend/src/hooks/query/post/useEditVote.ts b/frontend/src/hooks/query/post/useEditVote.ts index 90e3d8e75..c4a126d44 100644 --- a/frontend/src/hooks/query/post/useEditVote.ts +++ b/frontend/src/hooks/query/post/useEditVote.ts @@ -1,14 +1,20 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { OptionData, changeVotedOption } from '@api/post'; import { QUERY_KEY } from '@constants/queryKey'; export const useEditVote = ({ isPreview, postId }: { isPreview: boolean; postId: number }) => { const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); + const LOGGED_IN = true; - const { mutate, isError, error } = useMutation({ + const { mutate, isLoading } = useMutation({ mutationFn: (optionData: OptionData) => changeVotedOption(postId, optionData), onSuccess: () => { if (isPreview) { @@ -21,9 +27,10 @@ export const useEditVote = ({ isPreview, postId }: { isPreview: boolean; postId: queryClient.invalidateQueries([QUERY_KEY.POST_DETAIL, postId, LOGGED_IN]); }, onError: error => { - window.console.log('투표 선택지 생성에 실패했습니다.', error); + const message = error instanceof Error ? error.message : '투표 변경을 실패했습니다.'; + addMessage(message); }, }); - return { mutate, isError, error }; + return { mutate, isLoading }; }; diff --git a/frontend/src/hooks/query/post/usePostDetail.ts b/frontend/src/hooks/query/post/usePostDetail.ts index 03f064814..9a0f6eb76 100644 --- a/frontend/src/hooks/query/post/usePostDetail.ts +++ b/frontend/src/hooks/query/post/usePostDetail.ts @@ -30,6 +30,14 @@ export const usePostDetail = (isLoggedIn: boolean, postId: number) => { return data; }, + retry: (failCount, error) => { + const fetchError = error as Error; + const status = JSON.parse(fetchError.message).status; + if (status === 404) { + return false; + } + return failCount <= 3; + }, } ); diff --git a/frontend/src/hooks/query/report/usePendingReportActionList.ts b/frontend/src/hooks/query/report/usePendingReportActionList.ts new file mode 100644 index 000000000..c53a156f1 --- /dev/null +++ b/frontend/src/hooks/query/report/usePendingReportActionList.ts @@ -0,0 +1,33 @@ +import { useContext } from 'react'; + +import { useQuery } from '@tanstack/react-query'; + +import { PendingReportActionList } from '@type/report'; + +import { ToastContext } from '@hooks/context/toast'; + +import { getPendingReportActionList } from '@api/report'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const usePendingReportActionList = (page: number) => { + const { addMessage } = useContext(ToastContext); + + const { data } = useQuery( + [QUERY_KEY.REPORT], + () => getPendingReportActionList(page), + { + suspense: true, + onSuccess: data => { + return data; + }, + onError: error => { + const message = + error instanceof Error ? error.message : '신고 조치 예정 목록 조회를 실패했습니다.'; + addMessage(message); + }, + } + ); + + return { data }; +}; diff --git a/frontend/src/hooks/query/report/useReportAction.ts b/frontend/src/hooks/query/report/useReportAction.ts new file mode 100644 index 000000000..8537cf518 --- /dev/null +++ b/frontend/src/hooks/query/report/useReportAction.ts @@ -0,0 +1,30 @@ +import { useContext } from 'react'; + +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { ReportActionRequest } from '@type/report'; + +import { ToastContext } from '@hooks/context/toast'; + +import { reportAction } from '@api/report'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useReportAction = () => { + const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); + + const { mutate, isLoading, isSuccess, isError, error } = useMutation({ + mutationFn: async (reportActionData: ReportActionRequest) => + await reportAction(reportActionData), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.REPORT] }); + }, + onError: () => { + const message = error instanceof Error ? error.message : '신고 조치를 실패했습니다.'; + addMessage(message); + }, + }); + + return { mutate, isLoading, isSuccess, isError, error }; +}; diff --git a/frontend/src/hooks/query/report/useReportContent.ts b/frontend/src/hooks/query/report/useReportContent.ts new file mode 100644 index 000000000..1d17cd164 --- /dev/null +++ b/frontend/src/hooks/query/report/useReportContent.ts @@ -0,0 +1,30 @@ +import { useContext } from 'react'; + +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { ReportRequest } from '@type/report'; + +import { ToastContext } from '@hooks/context/toast'; + +import { reportContent } from '@api/report'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useReportContent = () => { + const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); + + const { mutate, isLoading } = useMutation({ + mutationFn: async (reportData: ReportRequest) => await reportContent(reportData), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.REPORT] }); + addMessage('신고를 완료하였습니다.'); + }, + onError: error => { + const message = error instanceof Error ? error.message : '개인정보 등록을 실패했습니다.'; + addMessage(message); + }, + }); + + return { mutate, isLoading }; +}; diff --git a/frontend/src/hooks/query/useReportApproveResult.tsx b/frontend/src/hooks/query/useReportApproveResult.tsx new file mode 100644 index 000000000..b56e6c097 --- /dev/null +++ b/frontend/src/hooks/query/useReportApproveResult.tsx @@ -0,0 +1,28 @@ +import { useQuery } from '@tanstack/react-query'; + +import { ReportApproveResult, getReportApproveResult } from '@api/alarm'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useReportApproveResult = (reportId: number) => { + const { data } = useQuery( + [QUERY_KEY.REPORT_APPROVE_RESULT, reportId], + () => getReportApproveResult(reportId), + { + cacheTime: 60 * 60 * 1000, + staleTime: 60 * 60 * 1000, + suspense: true, + + retry: (failCount, error) => { + // const fetchError = error as Error; + // const status = JSON.parse(fetchError.message).status; + // if (status === 404) { + // return false; + // } + return failCount <= 3; + }, + } + ); + + return { data }; +}; diff --git a/frontend/src/hooks/query/user/useModifyUser.ts b/frontend/src/hooks/query/user/useModifyUser.ts index fff5e6397..d8a2ace33 100644 --- a/frontend/src/hooks/query/user/useModifyUser.ts +++ b/frontend/src/hooks/query/user/useModifyUser.ts @@ -1,12 +1,18 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { modifyNickname } from '@api/userInfo'; import { QUERY_KEY } from '@constants/queryKey'; export const useModifyUser = () => { const queryClient = useQueryClient(); - const { mutate, isLoading, isSuccess, isError, error } = useMutation({ + const { addMessage } = useContext(ToastContext); + + const { mutate } = useMutation({ mutationFn: (nickname: string) => modifyNickname(nickname), onMutate: async newNickname => { await queryClient.cancelQueries({ queryKey: [QUERY_KEY.USER_INFO] }); @@ -17,12 +23,18 @@ export const useModifyUser = () => { }, onError: (error, __, context) => { queryClient.setQueryData([QUERY_KEY.USER_INFO], context?.previousNickname); - window.console.error('닉네임 변경에 실패했습니다.'); + + const message = error instanceof Error ? error.message : '닉네임 변경을 실패했습니다.'; + addMessage(message); + }, + onSuccess: () => { + addMessage('닉네임 변경을 완료했습니다.'); }, + onSettled: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEY.USER_INFO] }); }, }); - return { mutate, isLoading, isSuccess, isError, error }; + return { mutate }; }; diff --git a/frontend/src/hooks/query/user/useReadLatestAlarm.ts b/frontend/src/hooks/query/user/useReadLatestAlarm.ts new file mode 100644 index 000000000..0e06dceb7 --- /dev/null +++ b/frontend/src/hooks/query/user/useReadLatestAlarm.ts @@ -0,0 +1,18 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { readLatestAlarm } from '@api/userInfo'; + +import { QUERY_KEY } from '@constants/queryKey'; + +export const useReadLatestAlarm = () => { + const queryClient = useQueryClient(); + + const { mutate } = useMutation({ + mutationFn: async () => await readLatestAlarm(), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEY.USER_INFO] }); + }, + }); + + return { mutate }; +}; diff --git a/frontend/src/hooks/query/user/useUpdateUserInfo.ts b/frontend/src/hooks/query/user/useUpdateUserInfo.ts index 9772c452b..9ad57b448 100644 --- a/frontend/src/hooks/query/user/useUpdateUserInfo.ts +++ b/frontend/src/hooks/query/user/useUpdateUserInfo.ts @@ -1,20 +1,28 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { UpdateUserInfoRequest, updateUserInfo } from '@api/userInfo'; import { QUERY_KEY } from '@constants/queryKey'; export const useUpdateUserInfo = () => { const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); const LOGGED_IN = true; const { mutate, isLoading, isSuccess, isError, error } = useMutation({ mutationFn: async (userInfo: UpdateUserInfoRequest) => await updateUserInfo(userInfo), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEY.USER_INFO, LOGGED_IN] }); + + addMessage('개인정보 등록을 성공했습니다.'); }, onError: () => { - window.console.error('개인 정보 등록에 실패했습니다.'); + const message = error instanceof Error ? error.message : '개인정보 등록을 실패했습니다.'; + addMessage(message); }, }); diff --git a/frontend/src/hooks/query/user/useUserInfo.ts b/frontend/src/hooks/query/user/useUserInfo.ts index 255fdc46e..245dbe557 100644 --- a/frontend/src/hooks/query/user/useUserInfo.ts +++ b/frontend/src/hooks/query/user/useUserInfo.ts @@ -11,8 +11,6 @@ export const useUserInfo = (isLoggedIn: boolean) => { [QUERY_KEY.USER_INFO, isLoggedIn], () => getUserInfo(isLoggedIn), { - cacheTime: 60 * 60 * 1000, - staleTime: 60 * 60 * 1000, suspense: true, } ); diff --git a/frontend/src/hooks/query/user/useWithdrawalMembership.ts b/frontend/src/hooks/query/user/useWithdrawalMembership.ts index 923e449d4..2d78ef99d 100644 --- a/frontend/src/hooks/query/user/useWithdrawalMembership.ts +++ b/frontend/src/hooks/query/user/useWithdrawalMembership.ts @@ -1,21 +1,27 @@ +import { useContext } from 'react'; + import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { ToastContext } from '@hooks/context/toast'; + import { withdrawalMembership } from '@api/userInfo'; import { QUERY_KEY } from '@constants/queryKey'; export const useWithdrawalMembership = () => { const queryClient = useQueryClient(); + const { addMessage } = useContext(ToastContext); const LOGGED_IN = true; const { mutate, isLoading, isSuccess, isError, error } = useMutation({ mutationFn: async () => await withdrawalMembership(), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [QUERY_KEY.USER_INFO, LOGGED_IN] }); + addMessage('회원 탈퇴를 완료했습니다.'); }, onError: () => { - window.console.error('회원 탈퇴에 실패했습니다.'); - alert('회원 탈퇴에 실패했습니다.'); + const message = error instanceof Error ? error.message : '회원 탈퇴를 실패했습니다.'; + addMessage(message); }, }); diff --git a/frontend/src/hooks/useBannerToggle.ts b/frontend/src/hooks/useBannerToggle.ts new file mode 100644 index 000000000..25ead085a --- /dev/null +++ b/frontend/src/hooks/useBannerToggle.ts @@ -0,0 +1,32 @@ +import { BANNER_VISIBLE_MAX_AGE } from '@constants/cookie'; + +import { getCookie, setCookie } from '@utils/cookie'; + +import { useToggle } from './useToggle'; + +export const useBannerToggle = () => { + const { isBannerVisible } = getCookie(); + const initialBannerVisible = isBannerVisible ? JSON.parse(isBannerVisible) : true; + const { isOpen: isBannerOpen, closeComponent } = useToggle(initialBannerVisible); + + const closeBanner = () => { + const isCloseBannerConfirmed = window.confirm( + '배너를 닫으시면 하루동안 볼 수 없습니다. 닫으시겠습니까?' + ); + + if (isCloseBannerConfirmed) { + setCookie({ + key: 'isBannerVisible', + value: 'false', + maxAge: BANNER_VISIBLE_MAX_AGE, + }); + + closeComponent(); + } + }; + + return { + isBannerOpen, + closeBanner, + }; +}; diff --git a/frontend/src/hooks/useDialog.tsx b/frontend/src/hooks/useDialog.tsx new file mode 100644 index 000000000..44dc16348 --- /dev/null +++ b/frontend/src/hooks/useDialog.tsx @@ -0,0 +1,32 @@ +import { MouseEvent, useRef } from 'react'; + +export const useDialog = () => { + const dialogRef = useRef(null); + + const openDialog = () => { + if (!dialogRef.current) return; + + dialogRef.current.showModal(); + }; + + const closeDialog = () => { + if (!dialogRef.current) return; + + dialogRef.current.close(); + }; + + const handleCloseClick = (event: MouseEvent) => { + const modalBoundary = event.currentTarget.getBoundingClientRect(); + + if ( + modalBoundary.left > event.clientX || + modalBoundary.right < event.clientX || + modalBoundary.top > event.clientY || + modalBoundary.bottom < event.clientY + ) { + closeDialog(); + } + }; + + return { dialogRef, openDialog, closeDialog, handleCloseClick }; +}; diff --git a/frontend/src/hooks/useImageZoomModal.ts b/frontend/src/hooks/useImageZoomModal.ts new file mode 100644 index 000000000..95caeb582 --- /dev/null +++ b/frontend/src/hooks/useImageZoomModal.ts @@ -0,0 +1,23 @@ +import { MouseEvent, useState } from 'react'; + +import { useDialog } from './useDialog'; + +export const useImageZoomModal = () => { + const [imageSrc, setImageSrc] = useState(''); + const { closeDialog, dialogRef, handleCloseClick, openDialog } = useDialog(); + + const handleImageClick = (event: MouseEvent) => { + event.stopPropagation(); + const src = event.currentTarget.src; + setImageSrc(src); + openDialog(); + }; + + return { + imageSrc, + closeZoomModal: closeDialog, + handleCloseClick, + zoomModalRef: dialogRef, + handleImageClick, + }; +}; diff --git a/frontend/src/hooks/useMultiSelect.ts b/frontend/src/hooks/useMultiSelect.ts index c032641a5..3151c0c0f 100644 --- a/frontend/src/hooks/useMultiSelect.ts +++ b/frontend/src/hooks/useMultiSelect.ts @@ -1,15 +1,19 @@ -import { useState } from 'react'; +import { useContext, useState } from 'react'; import type { Option } from '@components/common/MultiSelect/types'; +import { ToastContext } from './context/toast'; + export const useMultiSelect = (initialSelectedOptionList: Option[], optionCountLimit?: number) => { const [selectedOptionList, setSelectedOptionList] = useState(initialSelectedOptionList); + const { addMessage } = useContext(ToastContext); const handleOptionAdd = (newItem: Option) => { if (optionCountLimit && optionCountLimit === selectedOptionList.length) { - alert(`${optionCountLimit}개까지 선택 가능합니다!`); + addMessage(`${optionCountLimit}개까지 선택 가능합니다!`); return; } + setSelectedOptionList([...selectedOptionList, newItem]); }; diff --git a/frontend/src/hooks/usePagination.ts b/frontend/src/hooks/usePagination.ts new file mode 100644 index 000000000..41e9eb4cc --- /dev/null +++ b/frontend/src/hooks/usePagination.ts @@ -0,0 +1,52 @@ +import { useState } from 'react'; + +/** + * + * @param initialPageNumber 시작 페이지 번호 default: 0 + * @param size 페이지를 몇개씩 보여줄 것인지의 단위 default: 5 + * @returns + */ +export const usePagination = (initialPageNumber: number = 0, size: number = 5) => { + const [pageNumber, setPageNumber] = useState(initialPageNumber); + + const getPageNumberList = (totalPage: number) => + Array.from( + { length: Math.min(totalPage - startNumber, size) }, + (__, index) => startNumber + (index % size) + 1 + ); + + const startNumber = Math.floor(pageNumber / size) * size; + + const hasPrevPage = startNumber > 0; + + const setPage = (value: number) => { + setPageNumber(value - 1); + }; + + const checkNextPage = (totalPage: number) => { + return totalPage > startNumber + size; + }; + + const fetchPrevPage = () => { + if (startNumber === 0) return; + + setPageNumber(startNumber - size); + }; + + const fetchNextPage = (totalPage: number) => { + if (!checkNextPage(totalPage)) return; + + setPageNumber(startNumber + size); + }; + + return { + page: pageNumber, + setPage, + getPageNumberList, + hasPrevPage, + startNumber, + fetchNextPage, + fetchPrevPage, + checkNextPage: checkNextPage, + }; +}; diff --git a/frontend/src/hooks/useText.ts b/frontend/src/hooks/useText.ts index 02e247d7d..9fff56456 100644 --- a/frontend/src/hooks/useText.ts +++ b/frontend/src/hooks/useText.ts @@ -26,9 +26,5 @@ export const useText = (originalText: string) => { setText(''); }; - const addText = (newTextToAdd: string) => { - setText(text + newTextToAdd); - }; - - return { text, setText, handleTextChange, resetText, addText }; + return { text, setText, handleTextChange, resetText }; }; diff --git a/frontend/src/hooks/useToast.ts b/frontend/src/hooks/useToast.ts deleted file mode 100644 index 0d92b748c..000000000 --- a/frontend/src/hooks/useToast.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { useEffect, useRef, useState } from 'react'; - -import { TOAST_TIME } from '@constants/animation'; - -export const useToast = () => { - const [isToastOpen, setIsToastOpen] = useState(false); - const [toastMessage, setToastMessage] = useState(''); - const timeIdRef = useRef(); - - const clear = () => { - if (timeIdRef.current) { - window.clearTimeout(timeIdRef.current); - } - }; - - const openToast = (message: string) => { - clear(); - - setIsToastOpen(true); - setToastMessage(message); - - timeIdRef.current = window.setTimeout(() => { - setIsToastOpen(false); - }, TOAST_TIME * 1000); - }; - - useEffect(() => { - return clear; - }, []); - - return { isToastOpen, toastMessage, openToast }; -}; diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 57dad3cb1..5183e19c4 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -22,6 +22,7 @@ if (process.env.VOTOGETHER_GOOGLE_ANALYTICS_ID) { } const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); + root.render( diff --git a/frontend/src/mocks/alarm.ts b/frontend/src/mocks/alarm.ts new file mode 100644 index 000000000..ca752e125 --- /dev/null +++ b/frontend/src/mocks/alarm.ts @@ -0,0 +1,13 @@ +import { rest } from 'msw'; + +import { MOCK_CONTENT_ALARM_LIST, MOCK_REPORT_ALARM_LIST } from './mockData/alarm'; + +export const mockAlarm = [ + rest.get(`/alarms/content`, (req, res, ctx) => { + return res(ctx.delay(1000), ctx.status(200), ctx.json(MOCK_CONTENT_ALARM_LIST())); + }), + + rest.get(`/alarms/report`, (req, res, ctx) => { + return res(ctx.delay(1000), ctx.status(200), ctx.json(MOCK_REPORT_ALARM_LIST())); + }), +]; diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts index 97b934f5e..ec5abe3fa 100644 --- a/frontend/src/mocks/handlers.ts +++ b/frontend/src/mocks/handlers.ts @@ -1,11 +1,14 @@ +import { mockAlarm } from './alarm'; import { mockCategoryHandlers } from './categoryList'; import { mockComment } from './comment'; import { example } from './example/get'; import { mockVoteResult } from './getVoteDetail'; +import { mockNotice } from './notice'; import { mockPost } from './post'; import { mockPostList } from './postList'; import { mockRanking } from './ranking'; import { mockReport } from './report'; +import { mockReportApproveResult } from './reportApproveResult'; import { mockToken } from './token'; import { mockUserInfo } from './userInfo'; import { mockVote } from './vote'; @@ -22,4 +25,7 @@ export const handlers = [ ...mockReport, ...mockRanking, ...mockToken, + ...mockAlarm, + ...mockReportApproveResult, + ...mockNotice, ]; diff --git a/frontend/src/mocks/mockData/alarm.ts b/frontend/src/mocks/mockData/alarm.ts new file mode 100644 index 000000000..3c7466165 --- /dev/null +++ b/frontend/src/mocks/mockData/alarm.ts @@ -0,0 +1,83 @@ +const random = (arr: T[]): T[] => { + return arr.sort(() => Math.random() - 0.5); +}; + +const randomBoolean = () => { + return random([true, false])[0]; +}; + +// 1 ~ 9 +const randomNum = () => { + return random(new Array(9).fill(0).map((_, index) => index + 1))[0]; +}; + +const contentAlarmAtPost = () => ({ + alarmId: Math.round(Math.random() * 1000), + createdAt: `201${randomNum()}-0${randomNum()}-1${randomNum()} 11:34`, + isChecked: randomBoolean(), + detail: { + postId: Math.round(Math.random() * 1000), //post + postTitle: '이것은 게시물 제목입니다만', //post + commentWriter: '누가 댓글을?', //댓글 작성자 + }, +}); + +const contentAlarmAtComment = () => ({ + alarmId: Math.round(Math.random() * 1000), + createdAt: `201${randomNum()}-0${randomNum()}-1${randomNum()} 11:34`, + isChecked: randomBoolean(), + detail: { + postId: Math.round(Math.random() * 1000), //post + postTitle: '이것은 게시물 제목입니다만', //post + commentWriter: '', //댓글 작성자 + }, +}); + +const reportAlarmAtPost = () => ({ + alarmId: Math.round(Math.random() * 1000), + isChecked: randomBoolean(), + detail: { + createdAt: `201${randomNum()}-0${randomNum()}-1${randomNum()} 11:34`, + reportId: Math.round(Math.random() * 1000), + reasons: [], + type: 'POST', + content: '신고되어 삭제된 게시물', + }, +}); + +const reportAlarmAtComment = () => ({ + alarmId: Math.round(Math.random() * 1000), + isChecked: randomBoolean(), + detail: { + createdAt: `201${randomNum()}-0${randomNum()}-1${randomNum()} 11:34`, + reportId: Math.round(Math.random() * 1000), + reasons: [], + type: 'COMMENT', + content: '삭제된 댓글 내용', + }, +}); + +const reportAlarmAtNickName = () => ({ + alarmId: Math.round(Math.random() * 1000), + isChecked: randomBoolean(), + detail: { + createdAt: `201${randomNum()}-0${randomNum()}-1${randomNum()} 11:34`, + reportId: Math.round(Math.random() * 1000), + reasons: [], + type: 'NICKNAME', + content: '변경처리된 닉네임', + }, +}); + +export const MOCK_CONTENT_ALARM_LIST = () => + random([ + new Array(10).fill(0).map(_ => random([contentAlarmAtPost(), contentAlarmAtComment()])[0]), + [], + ])[0]; + +export const MOCK_REPORT_ALARM_LIST = () => + random([ + new Array(10) + .fill(0) + .map(_ => random([reportAlarmAtPost(), reportAlarmAtComment(), reportAlarmAtNickName()])[0]), + ])[0]; diff --git a/frontend/src/mocks/mockData/comment.ts b/frontend/src/mocks/mockData/comment.ts index 359c7625b..266cca552 100644 --- a/frontend/src/mocks/mockData/comment.ts +++ b/frontend/src/mocks/mockData/comment.ts @@ -31,7 +31,7 @@ const nicknameList = [ const getMockComment = (): CommentResponse => ({ id: Math.floor(Math.random() * 100000), - content: commentList[Math.floor(Math.random() * 12)], + content: commentList[Math.floor(Math.random() * 10)], createdAt: '2023.7.27. 07:43', member: { id: Math.floor(Math.random() * 100000), diff --git a/frontend/src/mocks/mockData/notice.ts b/frontend/src/mocks/mockData/notice.ts new file mode 100644 index 000000000..42a7199a2 --- /dev/null +++ b/frontend/src/mocks/mockData/notice.ts @@ -0,0 +1,81 @@ +import { Notice, NoticeListType, NoticeListResponse, NoticeResponse } from '@type/notice'; +import { StringDate } from '@type/time'; + +import { transformNotice } from '@api/notice'; + +const noticeTitleList = [ + '방방뛰는 코끼리', + '환상의 드래곤', + '컴퓨터 마법사', + '무한한 상상력', + '꿈을 향한 여행자', + '플레이메이커', + '뛰어난 전략가', + '뚜렷한 개성', +]; + +const noticeContentList = [ + 'Woah, your project looks awesome! How long have you been coding for? ', + '일하기 싫어서 화장실에 앉아서 보는 중은 아닌데 아 원숭이 김종민보려고 눈뜬거 진짜웃겨ㅠㅠㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ', + '진짜 다보고 나니 눈물이 ㅜㅜ 너무 참아서 눈물이 줄줄 ㅜㅜ 미쳤네요', + 'ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 생일 축하드립니다 🎉🎉🎉 뭔가 예전에 무한도전에서 했던 돌+아이 콘테스트도 조금 생각나요', + '1:08 4:01 4:20 6:04\n제가 계속 보고 싶어서 정리한 타임코드입니다\n역시나 생일파티 콘텐츠는 아무리봐도 안 질리네요\n유병재님 덕분에 오늘도 마음이 풍선해집니다💚❤️', + '진짜ㅋㅋㅋㅋ레전드중 레전드인 컨텐츠인 것 같아요ㅋㅋㅋ큐ㅠㅠㅠ 몇번을 봐도 웃음이 멈추질 않는ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ!!>w ({ + id: Math.floor(Math.random() * 10000), + title: noticeTitleList[Math.floor(Math.random() * 8)], + content: noticeContentList[Math.floor(Math.random() * 11)], + bannerTitle: noticeTitleList[Math.floor(Math.random() * 8)], + bannerSubtitle: noticeTitleList[Math.floor(Math.random() * 8)], + createdAt: noticeCreatedAtList[Math.floor(Math.random() * 9)], + deadline: noticeDeadlineList[Math.floor(Math.random() * 9)], +}); + +export const MOCK_NOTICE_RESPONSE: NoticeResponse = getMockNoticeResponse(); + +export const MOCK_TRANSFORM_NOTICE: Notice = transformNotice(MOCK_NOTICE_RESPONSE); + +export const MOCK_NOTICE_LIST_RESPONSE: NoticeListResponse = { + totalPageNumber: 23, + currentPageNumber: 0, + notices: Array.from({ length: 20 }, () => getMockNoticeResponse()), +}; + +export const MOCK_TRANSFORM_NOTICE_LIST: NoticeListType = { + totalPageNumber: 23, + currentPageNumber: 0, + noticeList: MOCK_NOTICE_LIST_RESPONSE.notices.map(item => transformNotice(item)), +}; diff --git a/frontend/src/mocks/mockData/report.ts b/frontend/src/mocks/mockData/report.ts new file mode 100644 index 000000000..963d5032e --- /dev/null +++ b/frontend/src/mocks/mockData/report.ts @@ -0,0 +1,29 @@ +import { PendingReportActionListResponse } from '@api/report'; + +export const MOCK_PENDING_REPORT_LIST: PendingReportActionListResponse = { + totalPageNumber: 5, + currentPageNumber: 0, + reports: [ + { + id: 0, + type: 'POST', + reasons: ['BEHAVIOR', 'ADVERTISING'], + target: '보투게더는 바보라고 생각하는 게시글', + createdAt: '2023-10-12 12:20', + }, + { + id: 1, + type: 'COMMENT', + reasons: ['BEHAVIOR', 'ADVERTISING', 'SPAMMING'], + target: '보투게더는 바보라고 생각하는 댓글', + createdAt: '2023-10-12 12:21', + }, + { + id: 3, + type: 'NICKNAME', + reasons: ['BEHAVIOR', 'ADVERTISING'], + target: '보투게더바보', + createdAt: '2023-10-12 12:22', + }, + ], +}; diff --git a/frontend/src/mocks/mockData/reportApproveResult.ts b/frontend/src/mocks/mockData/reportApproveResult.ts new file mode 100644 index 000000000..e43db4b4f --- /dev/null +++ b/frontend/src/mocks/mockData/reportApproveResult.ts @@ -0,0 +1,9 @@ +import { ReportApproveResultResponse } from '@api/alarm'; + +export const MOCK_REPORT_APPROVE_RESULT: ReportApproveResultResponse = { + reportActionId: 1, + type: 'POST', + reasons: ['BEHAVIOR', 'SPECIFIC_PERSON', 'PRIVACY', 'SPAMMING', 'BEHAVIOR'], + content: '10004', + createdAt: '2023-12-21 09:11', +}; diff --git a/frontend/src/mocks/mockData/user.ts b/frontend/src/mocks/mockData/user.ts index 1bb45f7e5..de09e1499 100644 --- a/frontend/src/mocks/mockData/user.ts +++ b/frontend/src/mocks/mockData/user.ts @@ -1,9 +1,21 @@ import { UserInfoResponse } from '@api/userInfo'; +export const MOCK_ADMIN_USER_INFO: UserInfoResponse = { + nickname: '우아한 코끼리', + gender: 'MALE', + birthYear: 1989, + postCount: 4, + voteCount: 128, + hasLatestAlarm: true, + role: 'ADMIN', +}; + export const MOCK_USER_INFO: UserInfoResponse = { nickname: '우아한 코끼리', gender: 'MALE', birthYear: 1989, postCount: 4, voteCount: 128, + hasLatestAlarm: true, + role: 'USER', }; diff --git a/frontend/src/mocks/notice.ts b/frontend/src/mocks/notice.ts new file mode 100644 index 000000000..7c5ab05ac --- /dev/null +++ b/frontend/src/mocks/notice.ts @@ -0,0 +1,41 @@ +import { rest } from 'msw'; + +import { MOCK_NOTICE_LIST_RESPONSE, MOCK_NOTICE_RESPONSE } from './mockData/notice'; + +export let MOCK_NOTICE_TEST = ''; + +export const mockNotice = [ + rest.post(`/notices`, async (req, res, ctx) => { + const data = await req.json(); + + MOCK_NOTICE_TEST = data.title; + + return res(ctx.status(200)); + }), + + rest.get('/notices/progress', (req, res, ctx) => { + return res(ctx.status(200), ctx.json(MOCK_NOTICE_RESPONSE)); + }), + + rest.get(`/notices`, (req, res, ctx) => { + return res(ctx.status(200), ctx.json(MOCK_NOTICE_LIST_RESPONSE)); + }), + + rest.get(`/notices/:id`, (req, res, ctx) => { + return res(ctx.status(200), ctx.json(MOCK_NOTICE_RESPONSE)); + }), + + rest.put(`/notices/:id`, async (req, res, ctx) => { + const data = await req.json(); + + MOCK_NOTICE_TEST = data.title; + + return res(ctx.status(200)); + }), + + rest.delete(`/notices/:id`, (req, res, ctx) => { + MOCK_NOTICE_TEST = '삭제된 공지사항'; + + return res(ctx.status(204)); + }), +]; diff --git a/frontend/src/mocks/report.ts b/frontend/src/mocks/report.ts index 3eef05833..0029370ba 100644 --- a/frontend/src/mocks/report.ts +++ b/frontend/src/mocks/report.ts @@ -1,7 +1,15 @@ import { rest } from 'msw'; +import { MOCK_PENDING_REPORT_LIST } from './mockData/report'; + export const mockReport = [ rest.post('/report', (req, res, ctx) => { return res(ctx.status(200)); }), + rest.get('/reports/admin', (req, res, ctx) => { + return res(ctx.status(200), ctx.delay(500), ctx.json(MOCK_PENDING_REPORT_LIST)); + }), + rest.post('/reports/action/admin', (req, res, ctx) => { + return res(ctx.status(200)); + }), ]; diff --git a/frontend/src/mocks/reportApproveResult.ts b/frontend/src/mocks/reportApproveResult.ts new file mode 100644 index 000000000..45266cd25 --- /dev/null +++ b/frontend/src/mocks/reportApproveResult.ts @@ -0,0 +1,9 @@ +import { rest } from 'msw'; + +import { MOCK_REPORT_APPROVE_RESULT } from './mockData/reportApproveResult'; + +export const mockReportApproveResult = [ + rest.get('/alarms/report/:reportId', (req, res, ctx) => { + return res(ctx.status(200), ctx.delay(500), ctx.json(MOCK_REPORT_APPROVE_RESULT)); + }), +]; diff --git a/frontend/src/mocks/userInfo.ts b/frontend/src/mocks/userInfo.ts index daf2c7079..f859732b9 100644 --- a/frontend/src/mocks/userInfo.ts +++ b/frontend/src/mocks/userInfo.ts @@ -1,10 +1,10 @@ import { rest } from 'msw'; -import { MOCK_USER_INFO } from '@mocks/mockData/user'; +import { MOCK_ADMIN_USER_INFO, MOCK_USER_INFO } from '@mocks/mockData/user'; export const mockUserInfo = [ rest.get('/members/me', (req, res, ctx) => { - return res(ctx.status(200), ctx.json(MOCK_USER_INFO)); + return res(ctx.status(200), ctx.json(MOCK_ADMIN_USER_INFO)); }), rest.patch('/members/me/detail', (req, res, ctx) => { diff --git a/frontend/src/pages/AnnouncementPage/index.tsx b/frontend/src/pages/AnnouncementPage/index.tsx deleted file mode 100644 index 87da825e5..000000000 --- a/frontend/src/pages/AnnouncementPage/index.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useNavigate } from 'react-router-dom'; - -import Layout from '@components/common/Layout'; -import SquareButton from '@components/common/SquareButton'; - -import { APP_LAUNCH_EVENT } from '@constants/policyMessage'; - -import * as S from './style'; - -export default function AnnouncementPage() { - const navigate = useNavigate(); - const { TITLE } = APP_LAUNCH_EVENT; - - return ( - - - {TITLE} - - - 안녕하세요, 보투게더(VoTogether)는 우아한테크코스에서 진행한 프로젝트로, 투표 중심의 - 커뮤니티 플랫폼입니다!

-

🤷‍♂️: 돈이 부족한 취준생인데 알바를 병행하는게 좋을까요, 최대한 절약하는게 - 좋을까요?

🤷‍♀️: 요즘 체력이 떨어지는데 어떤 운동을 시작하면 좋을까요?

- 🤷‍♂️: 오늘의 점심 메뉴는 뭐가 좋을까? -

다 함께, 즐겁게, 심플하게! 보투게더를 이용해 보세요!



- ✅ 보투게더(VoTogether)는 투표를 통해 의견을 공유하고, 일상의 재미를 - 발견하는 커뮤니티 서비스예요.



- - 🖋 고민이 있으신가요? 글을 써보세요! -

- 😆 심심하신가요? 투표를 해보세요!

❔ 궁금하신가요? 관심사를 탐색해 보세요! -
-

-

- 보투게더는 사람들의 다양한 주제로 질문하고 답변하면서, 사람들의 반응을 확인할 수 있다는 - 점에서 특별해요.

자, 이제 보투게더를 이용할 준비되셨나요? 😆😃

- 나의 이야기가 우리의 이야기가 되는 공간, 보투게더에서 우리 함께해요! 👍

-

- 🚀보투게더 출시 이벤트 종료 및 상품 수령 대상자 공지

- 보투게더 서비스의 런칭 기념 이벤트에 참여해주신 많은 분들 감사드립니다!!

- 랭킹 순위에서 보투게더 팀원(관리자)은 제외하고 집계되었으며, 상품 수령 대상 닉네임은 - 아래와 같습니다.

-

⭐ 게시글을 가장 많이 작성🖋️해주신 이용자! - Swimminggoggles -

⭐ 작성한 게시글에 가장 많은 투표✅를 해주신 이용자! - - 익명의스내기 -

⭐ 최고 인기글🔥을 작성하신 이용자! - 익명의익명 -

-

위 닉네임들에 해당하시는 분들은 상품 수령을 위하여, - 보투게더 사이트에 로그인된 화면 인증샷을 채널톡으로 보내주시기 - 바랍니다!

앞으로도 보투게더 서비스에 많은 관심과 사랑 부탁드립니다. - 감사합니다😊😄 -
- - { - navigate('/'); - }} - > - 홈으로 가기 - - -
-
-
- ); -} diff --git a/frontend/src/pages/ErrorBoundary.tsx b/frontend/src/pages/ErrorBoundary.tsx index c5fa1b80f..5066eed08 100644 --- a/frontend/src/pages/ErrorBoundary.tsx +++ b/frontend/src/pages/ErrorBoundary.tsx @@ -1,8 +1,8 @@ import { Component, ErrorInfo, ReactNode } from 'react'; -import ErrorMessage from '@components/common/ErrorMessage'; +import ErrorItem, { ErrorItemProps } from '@components/common/ErrorItem'; -interface ErrorBoundaryProps { +interface ErrorBoundaryProps extends ErrorItemProps { children: ReactNode; } @@ -22,13 +22,15 @@ class ErrorBoundary extends Component { } componentDidCatch(error: Error, errorInfo: ErrorInfo) { - // You can also log the error to an error reporting service window.console.log(error, errorInfo); } render() { if (this.state.hasError) { - return ; + const errorItemProps = { ...this.props }; + delete errorItemProps.children; + + return ; } return this.props.children; diff --git a/frontend/src/pages/ErrorBoundaryForTopClass.tsx b/frontend/src/pages/ErrorBoundaryForTopClass.tsx index 58703fc94..16ed7f0f4 100644 --- a/frontend/src/pages/ErrorBoundaryForTopClass.tsx +++ b/frontend/src/pages/ErrorBoundaryForTopClass.tsx @@ -1,6 +1,6 @@ import { styled } from 'styled-components'; -import ErrorMessage from '@components/common/ErrorMessage'; +import LogoButton from '@components/common/LogoButton'; import { theme } from '@styles/theme'; @@ -10,6 +10,7 @@ import ErrorBoundary from './ErrorBoundary'; * nav를 사용할 수 없고 글로벌 스타일드도 사용할 수 없음. * 때문에 nav를 제거한 빈 헤더를 정의하고, 에러메세지 컴포넌트를 사용 */ + class ErrorBoundaryForTopClass extends ErrorBoundary { render() { if (this.state.hasError) { @@ -18,7 +19,11 @@ class ErrorBoundaryForTopClass extends ErrorBoundary { - + + '요청하신 데이터를 불러오는데 실패했습니다.' + + 문제가 지속되는 경우 votogether2023@gmail.com 로 문의해주세요. + ); @@ -67,11 +72,46 @@ const NarrowTemplateHeader = styled.div` `; const ErrorWrapper = styled.div` - margin-top: 20px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 20px; + + & > button { + border: 0; + + cursor: auto; + } + + margin: 90px 10px 20px 10px; @media (min-width: ${theme.breakpoint.sm}) { - margin-top: 50px; + margin-top: 120px; } `; +export const Title = styled.h1` + width: 90%; + margin-top: 20px; + + color: rgba(0, 0, 0, 0.7); + + font-size: 20px; + font-weight: bold; + + text-align: center; + word-break: keep-all; +`; + +export const Description = styled.p` + width: 90%; + + color: gray; + + font: var(--text-body); + text-align: center; + word-break: keep-all; +`; + export default ErrorBoundaryForTopClass; diff --git a/frontend/src/pages/ErrorBoundaryWithNarrowHeader.tsx b/frontend/src/pages/ErrorBoundaryWithNarrowHeader.tsx new file mode 100644 index 000000000..35c27dc62 --- /dev/null +++ b/frontend/src/pages/ErrorBoundaryWithNarrowHeader.tsx @@ -0,0 +1,38 @@ +import ErrorItem from '@components/common/ErrorItem'; +import MobileLayoutTemplate from '@components/common/MobileLayoutTemplate'; + +import ErrorBoundary from './ErrorBoundary'; + +class ErrorBoundaryWithNarrowHeader extends ErrorBoundary { + render() { + if (this.state.hasError) { + const errorItemProps = { ...this.props }; + delete errorItemProps.children; + + const error: { status: number; message: string } = JSON.parse(this.state.errorMessage); + + if (error.status === 404) { + errorItemProps.hasRetryInteraction = false; + + return ( + + + + ); + } + + return ( + + + + ); + } + + return this.props.children; + } +} + +export default ErrorBoundaryWithNarrowHeader; diff --git a/frontend/src/pages/EventMascot/index.tsx b/frontend/src/pages/EventMascot/index.tsx new file mode 100644 index 000000000..4b09f988b --- /dev/null +++ b/frontend/src/pages/EventMascot/index.tsx @@ -0,0 +1,21 @@ +import { useState } from 'react'; + +import mascotYo from '@assets/dangseon-yo.png'; +import mascot from '@assets/dangseon.png'; + +import * as S from './style'; + +//이벤트를 위한 코드 +export default function EventMascot({ type }: { type: 'ma' | 'mayo' }) { + const [isVisible, setIsVisible] = useState(true); + + const handleClick = () => { + setIsVisible(false); + }; + + return ( + + + + ); +} diff --git a/frontend/src/pages/EventMascot/style.ts b/frontend/src/pages/EventMascot/style.ts new file mode 100644 index 000000000..cf306f08e --- /dev/null +++ b/frontend/src/pages/EventMascot/style.ts @@ -0,0 +1,22 @@ +import { styled } from 'styled-components'; + +import { theme } from '@styles/theme'; + +//이벤트를 위한 코드 +export const Container = styled.div<{ $isVisible: boolean }>` + display: ${props => (props.$isVisible ? '' : 'none')}; + + position: absolute; + top: 40vh; + left: 40vw; + + @media (min-width: ${theme.breakpoint.sm}) { + top: 45vh; + left: 45vw; + } +`; + +export const Image = styled.img` + width: 100px; + height: 100px; +`; diff --git a/frontend/src/pages/HomePage/index.tsx b/frontend/src/pages/HomePage/index.tsx index 0f0e16729..2e6cc3641 100644 --- a/frontend/src/pages/HomePage/index.tsx +++ b/frontend/src/pages/HomePage/index.tsx @@ -1,57 +1,103 @@ -import { Suspense } from 'react'; +import { CSSProperties, Suspense, useContext } from 'react'; -import { useToggle } from '@hooks'; +import { AuthContext, ToastContext } from '@hooks'; +import { useReadLatestAlarm } from '@hooks/query/user/useReadLatestAlarm'; +import { useBannerToggle } from '@hooks/useBannerToggle'; import { useDrawer } from '@hooks/useDrawer'; import ErrorBoundary from '@pages/ErrorBoundary'; +import NoRenderErrorBoundary from '@pages/NoRenderErrorBoundary'; +import AlarmContainer from '@components/AlarmContainer'; import AddButton from '@components/common/AddButton'; import AppInstallPrompt from '@components/common/AppInstallPrompt'; -import Banner from '@components/common/Banner'; import Dashboard from '@components/common/Dashboard'; import Drawer from '@components/common/Drawer'; import Layout from '@components/common/Layout'; import NarrowMainHeader from '@components/common/NarrowMainHeader'; import Skeleton from '@components/common/Skeleton'; import UpButton from '@components/common/UpButton'; +import BannerFetcher from '@components/notice/BannerFetcher'; +import BannerSkeleton from '@components/notice/BannerSkeleton'; import PostList from '@components/post/PostList'; import { PATH } from '@constants/path'; -import { APP_LAUNCH_EVENT } from '@constants/policyMessage'; import { smoothScrollToTop } from '@utils/scrollToTop'; import * as S from './style'; +// 70px = 토글 스위치의 크기(40px) 및 상하 padding(각 10px), gap(10px) +const alarmDrawerStyle: CSSProperties = { + height: 'calc(100vh - 70px)', +}; + export default function HomePage() { - const { drawerRef, closeDrawer, openDrawer } = useDrawer('left'); - const { TITLE, CONTENT } = APP_LAUNCH_EVENT; + const { + drawerRef: categoryDrawerRdf, + openDrawer: openCategoryDrawer, + closeDrawer: closeCategoryDrawer, + } = useDrawer('left'); + const { + drawerRef: alarmDrawerRef, + openDrawer: openAlarmDrawer, + closeDrawer: closeAlarmDrawer, + } = useDrawer('right'); + + const { isBannerOpen, closeBanner } = useBannerToggle(); + const { addMessage } = useContext(ToastContext); + const loggedInfo = useContext(AuthContext).loggedInfo; + const isAlarmActive = loggedInfo.userInfo?.hasLatestAlarm; + const { mutate } = useReadLatestAlarm(); - const { isOpen: isBannerOpen, closeComponent: closeBanner } = useToggle(true); + const handleToolTipOpen = () => { + if (!loggedInfo.isLoggedIn) return addMessage('알림은 로그인 후 이용할 수 있습니다.'); + + openAlarmDrawer(); + mutate(); + }; return ( - + {isBannerOpen && ( - + + }> + + + )} - + + + {loggedInfo.isLoggedIn && ( + + )} + - + }> diff --git a/frontend/src/pages/HomePage/style.ts b/frontend/src/pages/HomePage/style.ts index 5022d7c20..54975f1a8 100644 --- a/frontend/src/pages/HomePage/style.ts +++ b/frontend/src/pages/HomePage/style.ts @@ -5,11 +5,11 @@ import { styled } from 'styled-components'; import { theme } from '@styles/theme'; export const Container = styled.div` - padding-top: 40px; + margin: 50px 10px 20px 10px; position: relative; @media (min-width: ${theme.breakpoint.sm}) { - padding-top: 10px; + margin-top: 10px; } `; diff --git a/frontend/src/pages/MyInfoPage/DeleteMemberModal/index.tsx b/frontend/src/pages/MyInfoPage/DeleteMemberModal/index.tsx index 934680d41..7b742bd52 100644 --- a/frontend/src/pages/MyInfoPage/DeleteMemberModal/index.tsx +++ b/frontend/src/pages/MyInfoPage/DeleteMemberModal/index.tsx @@ -1,5 +1,6 @@ +import { useToggle } from '@hooks'; + import Modal from '@components/common/Modal'; -import SquareButton from '@components/common/SquareButton'; import * as S from './style'; interface DeleteMemberModalProps { @@ -11,26 +12,37 @@ export default function DeleteMemberModal({ handleModalClose, handleWithdrawalMembership, }: DeleteMemberModalProps) { + const { isOpen, closeComponent: closeModal } = useToggle(true); + + const primaryButton = { + text: '저장', + handleClick: handleWithdrawalMembership, + }; + + const secondaryButton = { + text: '초기화', + handleClick: handleModalClose, + }; + return ( - - - 정말 탈퇴하시겠어요? - - 탈퇴 버튼 클릭 시,

계정은 삭제되며 복구되지 않아요. -

- 작성한 게시글과 투표 기록 등

서비스 사용 내역이 사라지므로

- 유의해주세요. -

-
- - - 탈퇴 - - - 취소 - - -
-
+ <> + {isOpen && ( + + + 탈퇴 버튼 클릭 시,

계정은 삭제되며 복구되지 않아요. +

+ 작성한 게시글과 투표 기록 등

서비스 사용 내역이 사라지므로

+ 유의해주세요. +

+
+
+ )} + ); } diff --git a/frontend/src/pages/MyInfoPage/DeleteMemberModal/style.ts b/frontend/src/pages/MyInfoPage/DeleteMemberModal/style.ts index 313f6864f..ec236a190 100644 --- a/frontend/src/pages/MyInfoPage/DeleteMemberModal/style.ts +++ b/frontend/src/pages/MyInfoPage/DeleteMemberModal/style.ts @@ -18,8 +18,10 @@ export const ModalTitle = styled.div` `; export const ModalDescription = styled.div` + padding-left: 25px; + color: gray; - font-size: 16px; + font-size: 14px; `; export const ButtonListWrapper = styled.div` diff --git a/frontend/src/pages/MyInfoPage/index.tsx b/frontend/src/pages/MyInfoPage/index.tsx index bea76bbc7..eb1ac2c3e 100644 --- a/frontend/src/pages/MyInfoPage/index.tsx +++ b/frontend/src/pages/MyInfoPage/index.tsx @@ -2,7 +2,6 @@ import { useContext, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useToggle } from '@hooks'; -import { useToast } from '@hooks'; import { AuthContext } from '@hooks/context/auth'; import { useModifyUser } from '@hooks/query/user/useModifyUser'; @@ -13,8 +12,8 @@ import GuestProfile from '@components/common/Dashboard/GuestProfile'; import UserProfile from '@components/common/Dashboard/UserProfile'; import Layout from '@components/common/Layout'; import SquareButton from '@components/common/SquareButton'; -import Toast from '@components/common/Toast'; +import { PATH } from '@constants/path'; import { NICKNAME } from '@constants/policy'; import { NICKNAME_POLICY } from '@constants/policyMessage'; @@ -26,24 +25,15 @@ import * as S from './style'; export default function MyInfoPage() { const navigate = useNavigate(); - const { - mutate: modifyNickname, - isSuccess: isModifyNicknameSuccess, - isError: isModifyNicknameError, - error: modifyNicknameError, - } = useModifyUser(); - const { - mutate: withdrawalMembership, - isSuccess: isWithdrawalMembershipSuccess, - isError: isWithdrawalMembershipError, - error: withdrawalMembershipError, - } = useWithdrawalMembership(); - - const { isToastOpen, openToast, toastMessage } = useToast(); + const { mutate: modifyNickname } = useModifyUser(); + const { mutate: withdrawalMembership, isSuccess: isWithdrawalMembershipSuccess } = + useWithdrawalMembership(); const { isOpen, openComponent, closeComponent } = useToggle(); const { loggedInfo, clearLoggedInfo } = useContext(AuthContext); + const { userInfo } = loggedInfo; + const handleModifyNickname = (newNickname: string) => { modifyNickname(newNickname); }; @@ -52,21 +42,6 @@ export default function MyInfoPage() { withdrawalMembership(); }; - useEffect(() => { - if (isModifyNicknameSuccess) { - openToast('닉네임을 성공적으로 변경했습니다.'); - return; - } - }, [isModifyNicknameSuccess]); - - useEffect(() => { - if (isModifyNicknameError && modifyNicknameError instanceof Error) { - const errorResponse = JSON.parse(modifyNicknameError.message); - openToast(errorResponse.message); - return; - } - }, [isModifyNicknameError, modifyNicknameError]); - useEffect(() => { if (isWithdrawalMembershipSuccess) { clearLoggedInfo(); @@ -75,20 +50,15 @@ export default function MyInfoPage() { } }, [isWithdrawalMembershipSuccess]); - useEffect(() => { - if (isWithdrawalMembershipError && withdrawalMembershipError instanceof Error) { - const errorResponse = JSON.parse(withdrawalMembershipError.message); - openToast(errorResponse.message); - return; - } - }, [isWithdrawalMembershipError, withdrawalMembershipError]); - return ( - {loggedInfo.userInfo ? : } + {userInfo ? : } + + 공지사항 보러가기 + @@ -119,10 +89,29 @@ export default function MyInfoPage() { )} - {isToastOpen && ( - - {toastMessage} - + {userInfo && userInfo?.role === 'ADMIN' && ( + + + + navigate(PATH.ADMIN_PENDING_REPORT)} + aria-label="신고 목록 페이지" + theme="gray" + > + {`신고 목록\n페이지`} + + + + navigate(PATH.ADMIN_NOTICE)} + aria-label="공지사항 목록 페이지" + theme="blank" + > + {`공지사항 목록\n페이지`} + + + + )} diff --git a/frontend/src/pages/MyInfoPage/style.ts b/frontend/src/pages/MyInfoPage/style.ts index 6ed63483a..14093040e 100644 --- a/frontend/src/pages/MyInfoPage/style.ts +++ b/frontend/src/pages/MyInfoPage/style.ts @@ -1,3 +1,5 @@ +import { Link } from 'react-router-dom'; + import { styled } from 'styled-components'; import { theme } from '@styles/theme'; @@ -9,8 +11,8 @@ export const Wrapper = styled.div` align-items: center; gap: 30px; - padding-top: 55px; position: relative; + padding: 55px 30px 0 30px; @media (min-width: 768px) { padding-top: 20px; @@ -34,11 +36,33 @@ export const HeaderWrapper = styled.div` `; export const ProfileSection = styled.section` - width: 90%; + width: 100%; `; export const UserControlSection = styled.section` - width: 90%; + width: 100%; +`; + +export const NoticeWrapper = styled.div` + width: 100%; + + font: var(--text-caption); +`; + +export const NoticeTitle = styled(Link)` + display: flex; + justify-content: space-between; + + border: 1px solid #f2f2f2; + border-radius: 7px; + padding: 16px; + + background-color: #ffffff; + + &:hover { + background-color: #f2f2f2; + } + cursor: pointer; `; export const DescribeUl = styled.ul` @@ -80,6 +104,19 @@ export const ButtonListWrapper = styled.div` height: 50px; `; +export const ButtonContainer = styled.div` + display: flex; + justify-content: space-between; + align-items: center; +`; + +export const AdminButtonWrapper = styled.div` + width: 150px; + height: 60px; + + white-space: pre-wrap; +`; + export const ButtonWrapper = styled.div` width: 90px; height: 50px; diff --git a/frontend/src/pages/NoRenderErrorBoundary.tsx b/frontend/src/pages/NoRenderErrorBoundary.tsx new file mode 100644 index 000000000..ca68a8b46 --- /dev/null +++ b/frontend/src/pages/NoRenderErrorBoundary.tsx @@ -0,0 +1,38 @@ +import { Component, ErrorInfo, ReactNode } from 'react'; + +interface NoRenderErrorBoundaryProps { + children: ReactNode; +} + +interface NoRenderErrorBoundaryState { + hasError: boolean; + errorMessage: string; +} + +class NoRenderErrorBoundary extends Component< + NoRenderErrorBoundaryProps, + NoRenderErrorBoundaryState +> { + constructor(props: NoRenderErrorBoundaryProps) { + super(props); + this.state = { hasError: false, errorMessage: '' }; + } + + static getDerivedStateFromError(error: Error) { + return { hasError: true, errorMessage: error.message }; + } + + componentDidCatch(error: Error, errorInfo: ErrorInfo) { + window.console.log(error, errorInfo); + } + + render() { + if (this.state.hasError) { + return <>; + } + + return this.props.children; + } +} + +export default NoRenderErrorBoundary; diff --git a/frontend/src/pages/RankingPage/PageContent/index.tsx b/frontend/src/pages/RankingPage/PageContent/index.tsx index 9ed857b0a..34e3f8c32 100644 --- a/frontend/src/pages/RankingPage/PageContent/index.tsx +++ b/frontend/src/pages/RankingPage/PageContent/index.tsx @@ -17,14 +17,14 @@ export default function PageContent() { return ( <> {selectedButton === '열정 유저' && ( - + }> @@ -33,7 +33,7 @@ export default function PageContent() { )} {selectedButton === '인기글 유저' && ( - + }> diff --git a/frontend/src/pages/RankingPage/PassionUser/UserRanking/index.tsx b/frontend/src/pages/RankingPage/PassionUser/UserRanking/index.tsx index 431290cbe..bc33ed04c 100644 --- a/frontend/src/pages/RankingPage/PassionUser/UserRanking/index.tsx +++ b/frontend/src/pages/RankingPage/PassionUser/UserRanking/index.tsx @@ -1,4 +1,4 @@ -import React, { useContext } from 'react'; +import { useContext } from 'react'; import { AuthContext } from '@hooks/context/auth'; import { useUserRanking } from '@hooks/query/ranking/useUserRanking'; diff --git a/frontend/src/pages/RankingPage/PassionUser/index.tsx b/frontend/src/pages/RankingPage/PassionUser/index.tsx index 7c807da85..c3eb12cd2 100644 --- a/frontend/src/pages/RankingPage/PassionUser/index.tsx +++ b/frontend/src/pages/RankingPage/PassionUser/index.tsx @@ -1,8 +1,10 @@ import { usePassionUserRanking } from '@hooks/query/ranking/usePassionUserRanking'; -import firstRankIcon from '@assets/first-rank.webp'; -import secondRankIcon from '@assets/second-rank.webp'; -import thirdRankIcon from '@assets/third-rank.webp'; +import firstRankIcon from '@assets/ranking-first.webp'; +import secondRankIcon from '@assets/ranking-second.webp'; +import thirdRankIcon from '@assets/ranking-third.webp'; + +import * as TS from '../RankingTableStyle'; import * as S from './style'; import UserRanking from './UserRanking'; @@ -24,7 +26,7 @@ export default function PassionUserRanking() {
{columnNameList.map(text => ( - {text} + {text} ))} @@ -40,12 +42,12 @@ export default function PassionUserRanking() { }; const rankIcon = rankIconUrl[ranker.ranking] && ( - {ranker.ranking.toString()} + ); return ( - {rankIcon ?? ranker.ranking} + {rankIcon ?? ranker.ranking} {ranker.nickname} {ranker.postCount} {ranker.voteCount} diff --git a/frontend/src/pages/RankingPage/PassionUser/style.ts b/frontend/src/pages/RankingPage/PassionUser/style.ts index 40a550626..41ae52984 100644 --- a/frontend/src/pages/RankingPage/PassionUser/style.ts +++ b/frontend/src/pages/RankingPage/PassionUser/style.ts @@ -1,9 +1,11 @@ import { styled } from 'styled-components'; +import { theme } from '@styles/theme'; + export const Table = styled.table` width: 100%; - font: var(--text-caption); + font: var(--text-default); text-align: center; & > :nth-child(12) { @@ -15,6 +17,10 @@ export const Table = styled.table` font-weight: 500; } + + @media (min-width: ${theme.breakpoint.sm}) { + font: var(--text-caption); + } `; export const Tbody = styled.tbody` @@ -35,29 +41,6 @@ export const Tr = styled.tr` align-items: center; `; -export const Th = styled.th` - padding: 10px 0; - - font: var(--text-body); - font-weight: 600; -`; - -export const RankingTd = styled.td` - padding: 5px 0; - height: auto; - - line-height: 0; -`; - export const Td = styled.td` padding: 10px 0; `; - -export const LoadingSpinnerWrapper = styled.div` - display: flex; - align-items: center; - justify-content: center; - - height: 50px; - padding: 0; -`; diff --git a/frontend/src/pages/RankingPage/PopularPost/index.tsx b/frontend/src/pages/RankingPage/PopularPost/index.tsx index 423f261b2..366aab212 100644 --- a/frontend/src/pages/RankingPage/PopularPost/index.tsx +++ b/frontend/src/pages/RankingPage/PopularPost/index.tsx @@ -4,9 +4,11 @@ import { usePopularPostRanking } from '@hooks/query/ranking/usePopularPostRankin import { PATH } from '@constants/path'; -import firstRankIcon from '@assets/first-rank.webp'; -import secondRankIcon from '@assets/second-rank.webp'; -import thirdRankIcon from '@assets/third-rank.webp'; +import firstRankIcon from '@assets/ranking-first.webp'; +import secondRankIcon from '@assets/ranking-second.webp'; +import thirdRankIcon from '@assets/ranking-third.webp'; + +import * as TS from '../RankingTableStyle'; import * as S from './style'; @@ -26,7 +28,7 @@ export default function PopularPost() { {columnNameList.map(text => ( - {text} + {text} ))} @@ -34,12 +36,15 @@ export default function PopularPost() { {rankingPostList && rankingPostList.map((rankingPost, index) => { const rankIcon = rankIconUrl[rankingPost.ranking] && ( - {rankingPost.ranking.toString()} + ); return ( - {rankIcon ?? rankingPost.ranking} + {rankIcon ?? rankingPost.ranking} {rankingPost.post.writer} {rankingPost.post.title} diff --git a/frontend/src/pages/RankingPage/PopularPost/style.ts b/frontend/src/pages/RankingPage/PopularPost/style.ts index fdca41fb9..53593a7a2 100644 --- a/frontend/src/pages/RankingPage/PopularPost/style.ts +++ b/frontend/src/pages/RankingPage/PopularPost/style.ts @@ -1,32 +1,24 @@ import { styled } from 'styled-components'; +import { theme } from '@styles/theme'; + export const Table = styled.table` width: 100%; - font: var(--text-caption); + font: var(--text-default); text-align: center; + + @media (min-width: ${theme.breakpoint.sm}) { + font: var(--text-caption); + } `; export const Tr = styled.tr` display: grid; - grid-template-columns: 0.5fr 1fr 3fr 1fr; + grid-template-columns: 0.8fr 1fr 3fr 1fr; align-items: center; `; -export const Th = styled.th` - padding: 10px 0; - - font: var(--text-body); - font-weight: 600; -`; - -export const RankingTd = styled.td` - padding: 5px 0; - height: auto; - - line-height: 0; -`; - export const Td = styled.td` padding: 10px 0; diff --git a/frontend/src/pages/RankingPage/RankingTableStyle.ts b/frontend/src/pages/RankingPage/RankingTableStyle.ts index b6734f4f7..134f3f8b9 100644 --- a/frontend/src/pages/RankingPage/RankingTableStyle.ts +++ b/frontend/src/pages/RankingPage/RankingTableStyle.ts @@ -8,10 +8,10 @@ export const Background = styled.div` justify-content: center; height: fit-content; - min-height: 500px; + min-height: 450px; border-radius: 4px; - background-color: var(--gray); + background-color: var(--bright-gray); padding: 15px 10px; @@ -19,3 +19,29 @@ export const Background = styled.div` padding: 15px 15px; } `; + +export const IconImage = styled.img` + width: 30px; + + @media (min-width: ${theme.breakpoint.sm}) { + width: 40px; + } +`; + +export const Th = styled.th` + padding: 10px 0; + + font: var(--text-default); + font-weight: 600; + + @media (min-width: ${theme.breakpoint.sm}) { + font: var(--text-body); + } +`; + +export const RankingTd = styled.td` + padding: 5px 0; + height: auto; + + line-height: 0; +`; diff --git a/frontend/src/pages/RankingPage/style.ts b/frontend/src/pages/RankingPage/style.ts index 29672f2b5..41a0b318b 100644 --- a/frontend/src/pages/RankingPage/style.ts +++ b/frontend/src/pages/RankingPage/style.ts @@ -35,7 +35,7 @@ export const PageHeader = styled.div` margin: 15px; text-align: center; - font: var(--text-title); + font: var(--text-page-title); `; export const ContentContainer = styled.div` @@ -43,6 +43,10 @@ export const ContentContainer = styled.div` flex-direction: column; gap: 10px; - margin-top: 20px; + margin-top: 10px; padding: 0 15px; + + @media (min-width: ${theme.breakpoint.sm}) { + margin-top: 20px; + } `; diff --git a/frontend/src/pages/ReportAlarmPage/ReportApproveResult/ReportTargetPost/index.tsx b/frontend/src/pages/ReportAlarmPage/ReportApproveResult/ReportTargetPost/index.tsx new file mode 100644 index 000000000..e093b1038 --- /dev/null +++ b/frontend/src/pages/ReportAlarmPage/ReportApproveResult/ReportTargetPost/index.tsx @@ -0,0 +1,9 @@ +import { usePostDetail } from '@hooks'; + +import Post from '@components/post/Post'; + +export default function ReportTargetPost({ postId }: { postId: number }) { + const { data } = usePostDetail(true, postId); + + return data && ; +} diff --git a/frontend/src/pages/ReportAlarmPage/ReportApproveResult/index.tsx b/frontend/src/pages/ReportAlarmPage/ReportApproveResult/index.tsx new file mode 100644 index 000000000..7a41147b0 --- /dev/null +++ b/frontend/src/pages/ReportAlarmPage/ReportApproveResult/index.tsx @@ -0,0 +1,55 @@ +import { Suspense } from 'react'; +import { useParams } from 'react-router-dom'; + +import { useReportApproveResult } from '@hooks/query/useReportApproveResult'; + +import ErrorBoundary from '@pages/ErrorBoundary'; + +import Skeleton from '@components/common/Skeleton'; + +import { REPORT_MESSAGE, REPORT_TYPE } from '@constants/policyMessage'; + +import ReportTargetPost from './ReportTargetPost'; +import * as S from './style'; + +export default function ReportApproveResult() { + const params = useParams() as { reportId: string }; + const reportId = Number(params.reportId); + + const { data } = useReportApproveResult(reportId); + + return ( + data && ( + + + 대상 카테고리: {REPORT_TYPE[data.type].name} + + + 조치 : {REPORT_TYPE[data.type].actionMessage} + + + 조치 일시: {data.createdAt} + + + 사유 + + {[...new Set(data.reasonList.map(each => REPORT_MESSAGE[each]))].map(reason => { + return {reason}; + })} + + + + 대상 + + + }> + {data.type === 'POST' && } + {(data.type === 'COMMENT' || data.type === 'NICKNAME') &&

{data.content}

} +
+
+
+
+
+ ) + ); +} diff --git a/frontend/src/pages/ReportAlarmPage/ReportApproveResult/style.ts b/frontend/src/pages/ReportAlarmPage/ReportApproveResult/style.ts new file mode 100644 index 000000000..adfab8bb9 --- /dev/null +++ b/frontend/src/pages/ReportAlarmPage/ReportApproveResult/style.ts @@ -0,0 +1,47 @@ +import styled from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const Container = styled.ul` + display: flex; + flex-direction: column; + gap: 10px; + + padding-left: 20px; + + font: var(--text-caption); + + @media (min-width: ${theme.breakpoint.sm}) { + font: var(--text-body); + } +`; + +export const List = styled.ul` + /* padding-left: 30px; */ + margin-top: 10px; + padding: 10px 10px 10px 30px; + + background-color: var(--bright-gray); + + font: var(--text-default); + + @media (min-width: ${theme.breakpoint.sm}) { + font: var(--text-caption); + } +`; + +export const ListItem = styled.li` + margin: 10px 0; + + list-style-type: disc; +`; + +export const Content = styled.div` + padding: 30px; + margin-top: 10px; + + background-color: var(--bright-gray); + + //포함된 부분에서 이벤트 발생을 막는 속성 + pointer-events: none; +`; diff --git a/frontend/src/pages/ReportAlarmPage/index.tsx b/frontend/src/pages/ReportAlarmPage/index.tsx new file mode 100644 index 000000000..834ef8112 --- /dev/null +++ b/frontend/src/pages/ReportAlarmPage/index.tsx @@ -0,0 +1,26 @@ +import { Suspense } from 'react'; + +import ErrorBoundary from '@pages/ErrorBoundary'; + +import Layout from '@components/common/Layout'; +import Skeleton from '@components/common/Skeleton'; + +import ReportApproveResult from './ReportApproveResult'; +import * as S from './style'; + +export default function ReportAlarmPage() { + return ( + + + 신고 조치 상세 + + }> + + + + + + + + ); +} diff --git a/frontend/src/pages/ReportAlarmPage/style.ts b/frontend/src/pages/ReportAlarmPage/style.ts new file mode 100644 index 000000000..cd2bd1f77 --- /dev/null +++ b/frontend/src/pages/ReportAlarmPage/style.ts @@ -0,0 +1,36 @@ +import { styled } from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const Container = styled.div` + display: flex; + flex-direction: column; + align-items: center; + + margin-top: 50px; + margin-bottom: 20px; + + & > * { + width: 100%; + } + + @media (min-width: ${theme.breakpoint.sm}) { + margin-top: 30px; + } +`; + +export const PageHeader = styled.div` + margin: 15px; + + text-align: center; + font: var(--text-page-title); +`; + +export const ContentContainer = styled.div` + display: flex; + flex-direction: column; + gap: 10px; + + margin: 20px 0; + padding: 0 15px; +`; diff --git a/frontend/src/pages/VoteStatisticsPage/OptionStatistics/index.tsx b/frontend/src/pages/VoteStatisticsPage/OptionStatistics/index.tsx index e47c030fe..77d5d6c9e 100644 --- a/frontend/src/pages/VoteStatisticsPage/OptionStatistics/index.tsx +++ b/frontend/src/pages/VoteStatisticsPage/OptionStatistics/index.tsx @@ -53,7 +53,7 @@ export default function OptionStatistics({ 투표 선택지를 클릭하여 투표 통계를 닫을 수 있습니다. - + diff --git a/frontend/src/pages/VoteStatisticsPage/index.tsx b/frontend/src/pages/VoteStatisticsPage/index.tsx index 34023ed2b..a5973b0ff 100644 --- a/frontend/src/pages/VoteStatisticsPage/index.tsx +++ b/frontend/src/pages/VoteStatisticsPage/index.tsx @@ -19,7 +19,7 @@ export default function VoteStatisticsPage() { 투표 통계 - + diff --git a/frontend/src/pages/VoteStatisticsPage/style.ts b/frontend/src/pages/VoteStatisticsPage/style.ts index 574732f0c..89029cf92 100644 --- a/frontend/src/pages/VoteStatisticsPage/style.ts +++ b/frontend/src/pages/VoteStatisticsPage/style.ts @@ -32,7 +32,7 @@ export const PageHeader = styled.div` margin: 15px; text-align: center; - font: var(--text-title); + font: var(--text-page-title); `; export const ContentContainer = styled.div` diff --git a/frontend/src/pages/admin/PendingReportPage/PendingReportPage.stories.tsx b/frontend/src/pages/admin/PendingReportPage/PendingReportPage.stories.tsx new file mode 100644 index 000000000..42e0a1664 --- /dev/null +++ b/frontend/src/pages/admin/PendingReportPage/PendingReportPage.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import PendingReportPage from '.'; + +const meta: Meta = { + component: PendingReportPage, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/pages/admin/PendingReportPage/index.tsx b/frontend/src/pages/admin/PendingReportPage/index.tsx new file mode 100644 index 000000000..500c53166 --- /dev/null +++ b/frontend/src/pages/admin/PendingReportPage/index.tsx @@ -0,0 +1,116 @@ +import { Suspense } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; + +import { Skeleton, Table } from 'votogether-design-system'; + +import { ReportActionRequest } from '@type/report'; + +import { usePendingReportActionList } from '@hooks/query/report/usePendingReportActionList'; +import { useReportAction } from '@hooks/query/report/useReportAction'; + +import Layout from '@components/common/Layout'; + +import { PATH } from '@constants/path'; +import { REPORT_ACTION_TYPE, REPORT_TYPE } from '@constants/report'; + +import * as S from './stlye'; + +export interface ReportDetail { + typeName: keyof typeof REPORT_ACTION_TYPE; + target: string; +} + +export default function PendingReportPage() { + const navigate = useNavigate(); + + const params = useParams() as { page: string }; + const currentPageNumber = params.page ? Number(params.page) : 1; + + const columnList = ['Id', '내용', '일시', '종류', '사유', '수정/삭제', '신고 해제']; + const { data } = usePendingReportActionList(currentPageNumber - 1); + const { mutate: reportAction } = useReportAction(); + + const handleClickButton = (reportData: ReportActionRequest, reportDetail: ReportDetail) => { + const { typeName, target } = reportDetail; + const editOrDeleteText = REPORT_ACTION_TYPE[typeName]; + const message = `'${typeName}: ${target}'을 ${ + reportData.hasAction ? editOrDeleteText : '신고 해제' + }하시겠습니까?`; + + if (window.confirm(message)) reportAction(reportData); + }; + + const reportListWithAction = data + ? data.reportList.map(report => { + const reportData = { id: report.id, hasAction: true }; + const reportDetail = { + typeName: report.typeName, + target: report.target, + isNickname: report.typeName === REPORT_TYPE.NICKNAME, + }; + return { + ...report, + editOrDeleteAction: ( + handleClickButton(reportData, reportDetail)} + > + {REPORT_ACTION_TYPE[report.typeName]} + + ), + deleteReport: ( + handleClickButton({ ...reportData, hasAction: false }, reportDetail)} + > + 해제 + + ), + }; + }) + : []; + + return ( + + + 신고 조치 예정 목록 + }> + {data && ( + <> +
+ + + navigate(`${PATH.ADMIN_PENDING_REPORT}?page=${data.currentPageNumber - 1}`) + } + disabled={currentPageNumber === 1} + > + 이전 + + {new Array(data.totalPageNumber).fill(0).map((_, index) => ( + + {index + 1} + + ))} + + navigate(`${PATH.ADMIN_PENDING_REPORT}?page=${data.currentPageNumber + 1}`) + } + disabled={currentPageNumber === data.totalPageNumber} + > + 다음 + + + + )} + + + + ); +} diff --git a/frontend/src/pages/admin/PendingReportPage/stlye.ts b/frontend/src/pages/admin/PendingReportPage/stlye.ts new file mode 100644 index 000000000..61f257fbf --- /dev/null +++ b/frontend/src/pages/admin/PendingReportPage/stlye.ts @@ -0,0 +1,90 @@ +import { Link } from 'react-router-dom'; + +import styled from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const Wrapper = styled.main` + display: flex; + flex-direction: column; + justify-content: start; + align-items: start; + gap: 15px; + + padding: 15px; + + @media (max-width: ${theme.breakpoint.sm}) { + margin-top: 40px; + } +`; + +export const PageTitle = styled.h1` + font-size: 1.6rem; + font-weight: 600; +`; + +export const PaginationContainer = styled.div` + display: flex; + justify-content: center; + align-items: center; + gap: 12px; + + width: 100%; + margin-top: 20px; +`; + +export const PaginationButton = styled(Link)<{ $isSelected: boolean }>` + display: flex; + justify-content: center; + align-items: center; + + width: 17px; + border: 1px solid gray; + border-radius: 5px; + padding: 7px 20px 9px 20px; + + background-color: ${props => (props.$isSelected ? '#DCF0FA' : 'white')}; + + font: var(--text-caption); +`; + +export const MovePageButton = styled.button` + display: flex; + justify-content: center; + align-items: center; + + border: 1px solid gray; + border-radius: 5px; + padding: 7px 12px 9px 12px; + + font: var(--text-caption); +`; + +export const ReportActionButton = styled.button<{ $isEdit: boolean }>` + height: 35px; + border: 1px solid red; + border-radius: 4px; + border-color: ${props => (props.$isEdit ? 'blue' : 'red')}; + + color: ${props => (props.$isEdit ? 'blue' : 'red')}; + padding: 7px 14px; + + @media (max-width: ${theme.breakpoint.sm}) { + padding: 10px; + font-size: 10px; + } +`; + +export const ReportDeleteButton = styled.button` + height: 35px; + + border: 1px solid gray; + border-radius: 4px; + color: gray; + padding: 7px 14px; + + @media (max-width: ${theme.breakpoint.sm}) { + padding: 10px; + font-size: 10px; + } +`; diff --git a/frontend/src/pages/admin/notices/NoticeAdminPage/NoticeAdminPage.stories.tsx b/frontend/src/pages/admin/notices/NoticeAdminPage/NoticeAdminPage.stories.tsx new file mode 100644 index 000000000..701f12a5e --- /dev/null +++ b/frontend/src/pages/admin/notices/NoticeAdminPage/NoticeAdminPage.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import NoticeAdminPage from '.'; + +const meta: Meta = { + component: NoticeAdminPage, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/pages/admin/notices/NoticeAdminPage/index.tsx b/frontend/src/pages/admin/notices/NoticeAdminPage/index.tsx new file mode 100644 index 000000000..33b1e2a3d --- /dev/null +++ b/frontend/src/pages/admin/notices/NoticeAdminPage/index.tsx @@ -0,0 +1,26 @@ +import { Suspense } from 'react'; + +import Layout from '@components/common/Layout'; +import Skeleton from '@components/common/Skeleton'; +import SquareButton from '@components/common/SquareButton'; +import AdminNoticeTableFetcher from '@components/notice/AdminNoticeTableFetcher'; + +import { PATH } from '@constants/path'; + +import * as S from './style'; + +export default function NoticeAdminPage() { + return ( + + + 관리자 공지사항 페이지 + + 공지사항 작성하러 가기 + + + }> + + + + ); +} diff --git a/frontend/src/pages/admin/notices/NoticeAdminPage/style.ts b/frontend/src/pages/admin/notices/NoticeAdminPage/style.ts new file mode 100644 index 000000000..1242ce774 --- /dev/null +++ b/frontend/src/pages/admin/notices/NoticeAdminPage/style.ts @@ -0,0 +1,25 @@ +import { Link } from 'react-router-dom'; + +import { styled } from 'styled-components'; + +export const Container = styled.div` + padding: 100px; +`; + +export const WriteContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + + padding: 30px 0; +`; + +export const Title = styled.span` + font: var(--text-page-title); +`; + +export const ButtonWrapper = styled(Link)` + width: 200px; + height: 60px; + margin-top: 30px; +`; diff --git a/frontend/src/pages/admin/notices/NoticeEditPage/NoticeEditPage.stories.tsx b/frontend/src/pages/admin/notices/NoticeEditPage/NoticeEditPage.stories.tsx new file mode 100644 index 000000000..8a247dba0 --- /dev/null +++ b/frontend/src/pages/admin/notices/NoticeEditPage/NoticeEditPage.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import NoticeEditPage from '.'; + +const meta: Meta = { + component: NoticeEditPage, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/pages/admin/notices/NoticeEditPage/index.tsx b/frontend/src/pages/admin/notices/NoticeEditPage/index.tsx new file mode 100644 index 000000000..611441fd9 --- /dev/null +++ b/frontend/src/pages/admin/notices/NoticeEditPage/index.tsx @@ -0,0 +1,16 @@ +import { Suspense } from 'react'; + +import ErrorBoundary from '@pages/ErrorBoundary'; + +import Skeleton from '@components/common/Skeleton'; +import AdminNoticeEdit from '@components/notice/AdminNoticeEdit'; + +export default function NoticeEditPage() { + return ( + + }> + + + + ); +} diff --git a/frontend/src/pages/admin/notices/NoticeWritePage/NoticeWritePage.stories.tsx b/frontend/src/pages/admin/notices/NoticeWritePage/NoticeWritePage.stories.tsx new file mode 100644 index 000000000..6e9f2e43d --- /dev/null +++ b/frontend/src/pages/admin/notices/NoticeWritePage/NoticeWritePage.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import NoticeWritePage from '.'; + +const meta: Meta = { + component: NoticeWritePage, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/pages/admin/notices/NoticeWritePage/index.tsx b/frontend/src/pages/admin/notices/NoticeWritePage/index.tsx new file mode 100644 index 000000000..50f67d7cb --- /dev/null +++ b/frontend/src/pages/admin/notices/NoticeWritePage/index.tsx @@ -0,0 +1,38 @@ +import { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { Notice } from '@type/notice'; + +import { useCreateNotice } from '@hooks'; + +import NoticeForm from '@components/notice/NoticeForm'; +import { NOTICE_WRITE_TYPE } from '@components/notice/NoticeForm/constant'; + +import { PATH } from '@constants/path'; + +import { addTimeToDate } from '@utils/post/addTimeToDate'; + +const defaultNotice: Notice = { + id: 0, + title: '', + bannerSubtitle: '', + bannerTitle: '', + content: '', + createdAt: '0000-00-00', + deadline: addTimeToDate({ day: 0, hour: 0, minute: 0 }, new Date()), +}; + +export default function NoticeWritePage() { + const navigate = useNavigate(); + const { mutate, isSuccess } = useCreateNotice(); + + useEffect(() => { + if (isSuccess) { + navigate(PATH.ADMIN_NOTICE); + } + }, [isSuccess, navigate]); + + return ( + + ); +} diff --git a/frontend/src/pages/auth/LoginPage/MobileLogin/index.tsx b/frontend/src/pages/auth/LoginPage/MobileLogin/index.tsx index adbb2800e..1afffe420 100644 --- a/frontend/src/pages/auth/LoginPage/MobileLogin/index.tsx +++ b/frontend/src/pages/auth/LoginPage/MobileLogin/index.tsx @@ -1,6 +1,6 @@ import { useNavigate } from 'react-router-dom'; -import kakao from '@assets/kakao_login_medium_wide.webp'; +import kakao from '@assets/kakao_login_large.webp'; import logo from '@assets/stroke-logo.svg'; import * as S from './style'; @@ -16,7 +16,7 @@ export default function MobileLogin() { VOTOGETHER (window.location.href = kakaoURL)}> - 카카오 로그인 + navigate('/')}>비회원으로 이용하기 diff --git a/frontend/src/pages/auth/LoginPage/MobileLogin/style.ts b/frontend/src/pages/auth/LoginPage/MobileLogin/style.ts index 809a21590..f353549ea 100644 --- a/frontend/src/pages/auth/LoginPage/MobileLogin/style.ts +++ b/frontend/src/pages/auth/LoginPage/MobileLogin/style.ts @@ -36,3 +36,8 @@ export const GuestButton = styled.button` cursor: pointer; `; + +export const KaKaoImage = styled.img` + width: 100%; + height: 40px; +`; diff --git a/frontend/src/pages/notice/NoticeDetailPage/NoticeDetailPage.stories.tsx b/frontend/src/pages/notice/NoticeDetailPage/NoticeDetailPage.stories.tsx new file mode 100644 index 000000000..ec1c7b157 --- /dev/null +++ b/frontend/src/pages/notice/NoticeDetailPage/NoticeDetailPage.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import NoticeDetailPage from '.'; + +const meta: Meta = { + component: NoticeDetailPage, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/pages/notice/NoticeDetailPage/index.tsx b/frontend/src/pages/notice/NoticeDetailPage/index.tsx new file mode 100644 index 000000000..940bb6ae2 --- /dev/null +++ b/frontend/src/pages/notice/NoticeDetailPage/index.tsx @@ -0,0 +1,24 @@ +import { Suspense } from 'react'; + +import ErrorBoundary from '@pages/ErrorBoundary'; + +import Layout from '@components/common/Layout'; +import Skeleton from '@components/common/Skeleton'; +import NoticeDetailFetcher from '@components/notice/NoticeDetailFetcher'; + +import * as S from './style'; + +export default function NoticeDetailPage() { + return ( + + + VoTogether 공지사항 + + }> + + + + + + ); +} diff --git a/frontend/src/pages/notice/NoticeDetailPage/style.ts b/frontend/src/pages/notice/NoticeDetailPage/style.ts new file mode 100644 index 000000000..f023acd61 --- /dev/null +++ b/frontend/src/pages/notice/NoticeDetailPage/style.ts @@ -0,0 +1,15 @@ +import { styled } from 'styled-components'; + +import { theme } from '@styles/theme'; + +export const Container = styled.div` + padding: 48px 10px 30px 10px; + + @media (min-width: ${theme.breakpoint.sm}) { + padding-top: 30px; + } +`; + +export const Category = styled.span` + font: var(--text-body); +`; diff --git a/frontend/src/pages/notice/NoticeListPage/NoticeListPage.stories.tsx b/frontend/src/pages/notice/NoticeListPage/NoticeListPage.stories.tsx new file mode 100644 index 000000000..4aab6431f --- /dev/null +++ b/frontend/src/pages/notice/NoticeListPage/NoticeListPage.stories.tsx @@ -0,0 +1,14 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import NoticeListPage from '.'; + +const meta: Meta = { + component: NoticeListPage, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + render: () => , +}; diff --git a/frontend/src/pages/notice/NoticeListPage/index.tsx b/frontend/src/pages/notice/NoticeListPage/index.tsx new file mode 100644 index 000000000..66a3a7c23 --- /dev/null +++ b/frontend/src/pages/notice/NoticeListPage/index.tsx @@ -0,0 +1,24 @@ +import { Suspense } from 'react'; + +import ErrorBoundary from '@pages/ErrorBoundary'; + +import Layout from '@components/common/Layout'; +import Skeleton from '@components/common/Skeleton'; +import NoticeListFetcher from '@components/notice/NoticeListFetcher'; + +import * as S from './style'; + +export default function NoticeListPage() { + return ( + + + 보투게더 소식 + + }> + + + + + + ); +} diff --git a/frontend/src/pages/notice/NoticeListPage/style.ts b/frontend/src/pages/notice/NoticeListPage/style.ts new file mode 100644 index 000000000..2bb4fc918 --- /dev/null +++ b/frontend/src/pages/notice/NoticeListPage/style.ts @@ -0,0 +1,18 @@ +import { styled } from 'styled-components'; + +export const Container = styled.main` + display: flex; + align-items: center; + flex-direction: column; + + width: 100%; + padding: 0 10px 30px 10px; +`; + +export const Title = styled.span` + font: var(--text-title); + font-size: 2.4rem; + text-align: center; + + padding: 48px 0; +`; diff --git a/frontend/src/pages/post/CreatePostPage/index.tsx b/frontend/src/pages/post/CreatePostPage/index.tsx index b1e9aa67a..5e8e24c0f 100644 --- a/frontend/src/pages/post/CreatePostPage/index.tsx +++ b/frontend/src/pages/post/CreatePostPage/index.tsx @@ -1,22 +1,23 @@ -import { useContext, useEffect } from 'react'; +import { Suspense, useContext, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; -import { useToast } from '@hooks'; - import { PostOptionContext } from '@hooks/context/postOption'; import { useCreatePost } from '@hooks/query/post/useCreatePost'; +import ErrorBoundaryWithNarrowHeader from '@pages/ErrorBoundaryWithNarrowHeader'; + import Layout from '@components/common/Layout'; -import Toast from '@components/common/Toast'; +import MobileLayoutTemplate from '@components/common/MobileLayoutTemplate'; +import Skeleton from '@components/common/Skeleton'; import PostForm from '@components/PostForm'; +import { ERROR_MESSAGE } from '@constants/policyMessage'; import { SORTING, STATUS } from '@constants/post'; export default function CreatePostPage() { const navigate = useNavigate(); - const { mutate, isSuccess, isError, error, isLoading } = useCreatePost(); - const { isToastOpen, openToast, toastMessage } = useToast(); + const { mutate, isSuccess, isLoading } = useCreatePost(); const { setPostOption } = useContext(PostOptionContext); useEffect(() => { @@ -26,22 +27,24 @@ export default function CreatePostPage() { } }, [isSuccess, navigate]); - useEffect(() => { - if (isError && error instanceof Error) { - const errorResponse = JSON.parse(error.message); - openToast(errorResponse.message); - return; - } - }, [isError, error]); - return ( - - {isToastOpen && ( - - {toastMessage} - - )} + + + + + } + > + + + ); } diff --git a/frontend/src/pages/post/EditPostPage/EditPost/index.tsx b/frontend/src/pages/post/EditPostPage/EditPost/index.tsx index 7259179fe..f8d85ad58 100644 --- a/frontend/src/pages/post/EditPostPage/EditPost/index.tsx +++ b/frontend/src/pages/post/EditPostPage/EditPost/index.tsx @@ -1,13 +1,10 @@ import { useContext, useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; -import { useToast } from '@hooks'; - import { PostOptionContext } from '@hooks/context/postOption'; import { useEditPost } from '@hooks/query/post/useEditPost'; import { usePostDetail } from '@hooks/query/post/usePostDetail'; -import Toast from '@components/common/Toast'; import PostForm from '@components/PostForm'; import { PATH } from '@constants/path'; @@ -19,8 +16,7 @@ export default function EditPost() { const { postId } = useParams(); const { data } = usePostDetail(true, Number(postId)); - const { mutate, isSuccess, isError, error, isLoading } = useEditPost(Number(postId)); - const { isToastOpen, openToast, toastMessage } = useToast(); + const { mutate, isSuccess, isLoading } = useEditPost(Number(postId)); const { setPostOption } = useContext(PostOptionContext); useEffect(() => { @@ -30,22 +26,5 @@ export default function EditPost() { } }, [isSuccess, navigate, postId]); - useEffect(() => { - if (isError && error instanceof Error) { - const errorResponse = JSON.parse(error.message); - openToast(errorResponse.message); - return; - } - }, [isError, error]); - - return ( - <> - - {isToastOpen && ( - - {toastMessage} - - )} - - ); + return ; } diff --git a/frontend/src/pages/post/EditPostPage/index.tsx b/frontend/src/pages/post/EditPostPage/index.tsx index e74564237..69a0f72f8 100644 --- a/frontend/src/pages/post/EditPostPage/index.tsx +++ b/frontend/src/pages/post/EditPostPage/index.tsx @@ -1,31 +1,34 @@ import { Suspense } from 'react'; -import ErrorBoundary from '@pages/ErrorBoundary'; +import ErrorBoundaryWithNarrowHeader from '@pages/ErrorBoundaryWithNarrowHeader'; import Layout from '@components/common/Layout'; -import NarrowTemplateHeader from '@components/common/NarrowTemplateHeader'; +import MobileLayoutTemplate from '@components/common/MobileLayoutTemplate'; import Skeleton from '@components/common/Skeleton'; +import { ERROR_MESSAGE } from '@constants/policyMessage'; + import EditPost from './EditPost'; -import * as S from './style'; export default function EditPostPage() { return ( - + - - - - - + + + } > - + ); } diff --git a/frontend/src/pages/post/EditPostPage/style.ts b/frontend/src/pages/post/EditPostPage/style.ts deleted file mode 100644 index 65da09987..000000000 --- a/frontend/src/pages/post/EditPostPage/style.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { styled } from 'styled-components'; - -import { theme } from '@styles/theme'; - -export const SkeletonWrapper = styled.div` - padding: 50px 10px 20px 10px; - - @media (min-width: ${theme.breakpoint.sm}) { - padding: 30px 40px 20px 40px; - } - - @media (min-width: ${theme.breakpoint.md}) { - padding: 30px 80px 20px 80px; - } -`; - -export const HeaderButton = styled.button` - width: 30px; - - color: white; - - cursor: pointer; -`; diff --git a/frontend/src/pages/post/PostDetailPage/BottomButtonPart/index.tsx b/frontend/src/pages/post/PostDetailPage/BottomButtonPart/index.tsx index 76964a8da..b4b3af144 100644 --- a/frontend/src/pages/post/PostDetailPage/BottomButtonPart/index.tsx +++ b/frontend/src/pages/post/PostDetailPage/BottomButtonPart/index.tsx @@ -2,6 +2,9 @@ import type { LoadingType } from '../types'; import { useContext, useState } from 'react'; +import { PostAction } from '@type/menu'; +import { ReportMessage } from '@type/report'; + import { AuthContext } from '@hooks/context/auth'; import DeleteModal from '@components/common/DeleteModal'; @@ -19,8 +22,8 @@ interface PostDetailPageChildProps { controlPost: { setEarlyClosePost: () => void; deletePost: () => void; - reportPost: (reason: string) => void; - reportNickname: (reason: string) => void; + reportPost: (reason: ReportMessage) => void; + reportNickname: (reason: ReportMessage) => void; }; openToast: (text: string) => void; }; @@ -37,9 +40,9 @@ export default function BottomButtonPart({ const { moveWritePostPage, moveVoteStatisticsPage } = movePage; const { setEarlyClosePost, deletePost, reportPost, reportNickname } = controlPost; const { isDeletePostLoading, isReportPostLoading, isReportNicknameLoading } = isEventLoading; - const [action, setAction] = useState(null); + const [action, setAction] = useState(null); - const handleActionButtonClick = (action: string) => { + const handleActionButtonClick = (action: PostAction) => { if (!loggedInfo.isLoggedIn) { openToast('로그인 후에 기능을 이용해주세요.'); return; @@ -113,6 +116,7 @@ export default function BottomButtonPart({ )} {action === 'POST_REPORT' && ( {}, reportNickname: (reason: string) => {}, }, + openToast: () => {}, }; export const isWriterAndIsClosedCase: Story = { diff --git a/frontend/src/pages/post/PostDetailPage/InnerHeaderPart/index.tsx b/frontend/src/pages/post/PostDetailPage/InnerHeaderPart/index.tsx index b4092597e..a7bb350e4 100644 --- a/frontend/src/pages/post/PostDetailPage/InnerHeaderPart/index.tsx +++ b/frontend/src/pages/post/PostDetailPage/InnerHeaderPart/index.tsx @@ -1,14 +1,15 @@ -import { useState } from 'react'; +import { useContext, useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { PostAction, PostMenuItem } from '@type/menu'; +import { PostAction, MenuItem } from '@type/menu'; +import { ReportMessage } from '@type/report'; -import { useToggle } from '@hooks'; +import { AuthContext, useToggle } from '@hooks'; import DeleteModal from '@components/common/DeleteModal'; import HeaderTextButton from '@components/common/HeaderTextButton'; import IconButton from '@components/common/IconButton'; -import PostMenu from '@components/common/PostMenu'; +import Menu from '@components/common/Menu'; import TagButton from '@components/common/TagButton'; import ReportModal from '@components/ReportModal'; @@ -28,14 +29,15 @@ interface PostDetailPageChildProps { controlPost: { setEarlyClosePost: () => void; deletePost: () => void; - reportPost: (reason: string) => void; - reportNickname: (reason: string) => void; + reportPost: (reason: ReportMessage) => void; + reportNickname: (reason: ReportMessage) => void; }; + openToast: (text: string) => void; }; isEventLoading: Record; } -const menuList: PostMenuItem[] = [ +const menuList: MenuItem[] = [ { color: 'black', content: '닉네임 신고', action: 'NICKNAME_REPORT' }, { color: 'black', content: '게시글 신고', action: 'POST_REPORT' }, ]; @@ -43,20 +45,25 @@ const menuList: PostMenuItem[] = [ export default function InnerHeaderPart({ isWriter, isClosed, - handleEvent: { movePage, controlPost }, + handleEvent: { movePage, controlPost, openToast }, isEventLoading, }: PostDetailPageChildProps) { const navigate = useNavigate(); - + const { loggedInfo } = useContext(AuthContext); const { moveWritePostPage, moveVoteStatisticsPage } = movePage; const { setEarlyClosePost, deletePost, reportPost, reportNickname } = controlPost; - const { isOpen, toggleComponent, closeComponent } = useToggle(); - const [action, setAction] = useState(null); - const { isDeletePostLoading, isReportNicknameLoading, isReportPostLoading } = isEventLoading; + const { isOpen: isMenuOpen, toggleComponent, closeComponent } = useToggle(); + const [action, setAction] = useState(null); const handleMenuClick = (action: PostAction) => { closeComponent(); + + if (!loggedInfo.isLoggedIn) { + openToast('로그인 후에 기능을 이용해주세요.'); + return; + } + setAction(action); }; @@ -79,14 +86,14 @@ export default function InnerHeaderPart({ {!isWriter ? ( <> 신고 - {isOpen && ( + {isMenuOpen && ( - + )} @@ -135,6 +142,7 @@ export default function InnerHeaderPart({ )} {action === 'POST_REPORT' && ( { if (postDataFallback.voteInfo.allPeopleCount) { - openToast('투표한 사용자가 있어 글 수정이 불가합니다.'); + addMessage('투표한 사용자가 있어 글 수정이 불가합니다.'); return; } @@ -75,76 +71,37 @@ export default function PostDetail() { setEarlyClosePost: earlyClosePost, deletePost: () => { if (postDataFallback.voteInfo.allPeopleCount >= 20) { - openToast('20인 이상 투표한 게시물은 삭제할 수 없습니다.'); + addMessage('20인 이상 투표한 게시물은 삭제할 수 없습니다.'); return; } deletePost(); }, - reportPost: async (reason: string) => { - setIsReportPostLoading(true); + reportPost: async (reason: ReportMessage) => { const reportData: ReportRequest = { type: 'POST', id: postId, reason }; - - await reportContent(reportData) - .then(res => { - openToast('게시물을 신고했습니다.'); - }) - .catch(e => { - if (e instanceof Error) { - const errorResposne = JSON.parse(e.message); - openToast(errorResposne.message); - return; - } - openToast('게시글 신고가 실패했습니다.'); - }) - .finally(() => { - setIsReportPostLoading(false); - }); + reportContent(reportData); }, - reportNickname: async (reason: string) => { - setIsReportNicknameLoading(true); + reportNickname: async (reason: ReportMessage) => { const reportData: ReportRequest = { type: 'NICKNAME', id: postDataFallback.writer.id, reason, }; - - await reportContent(reportData) - .then(res => { - openToast('작성자 닉네임을 신고했습니다.'); - }) - .catch(e => { - if (e instanceof Error) { - const errorResposne = JSON.parse(e.message); - openToast(errorResposne.message); - return; - } - openToast('작성자 닉네임 신고가 실패했습니다.'); - }) - .finally(() => { - setIsReportNicknameLoading(false); - }); + reportContent(reportData); }, copyPostURL: () => { const currentURL = window.location.href; navigator.clipboard .writeText(currentURL) .then(() => { - openToast('게시물 URL이 클립보드에 복사되었습니다.'); + addMessage('게시물 URL이 클립보드에 복사되었습니다.'); }) .catch(error => { - console.error('URL 복사 실패:', error); - openToast('URL을 클립보드에 복사하는 동안 오류가 발생했습니다. 다시 시도해주세요.'); + addMessage('URL을 클립보드에 복사하는 동안 오류가 발생했습니다. 다시 시도해주세요.'); }); }, }; - useEffect(() => { - if (isDeleteError && deleteError instanceof Error) { - openToast(deleteError.message); - } - }, [isDeleteError, deleteError]); - useEffect(() => { if (isDeleteSuccess) { navigate('/'); @@ -158,11 +115,11 @@ export default function PostDetail() { @@ -177,26 +134,21 @@ export default function PostDetail() { - + }> - {isToastOpen && ( - - {toastMessage} - - )} ); } diff --git a/frontend/src/pages/post/PostDetailPage/PostDetailFallback/index.tsx b/frontend/src/pages/post/PostDetailPage/PostDetailFallback/index.tsx deleted file mode 100644 index 2224ed812..000000000 --- a/frontend/src/pages/post/PostDetailPage/PostDetailFallback/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import Skeleton from '@components/common/Skeleton'; - -import * as S from './style'; - -export default function PostDetailFallback() { - return ( - - - - - - ); -} diff --git a/frontend/src/pages/post/PostDetailPage/PostDetailFallback/style.ts b/frontend/src/pages/post/PostDetailPage/PostDetailFallback/style.ts deleted file mode 100644 index ecfd33923..000000000 --- a/frontend/src/pages/post/PostDetailPage/PostDetailFallback/style.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { styled } from 'styled-components'; - -import { theme } from '@styles/theme'; - -export const Container = styled.div` - margin-top: 70px; - - @media (min-width: ${theme.breakpoint.sm}) { - margin-top: 30px; - } -`; - -export const HeaderContainer = styled.div` - position: fixed; - width: 100%; - top: 0; - - z-index: ${theme.zIndex.header}; - - @media (min-width: ${theme.breakpoint.sm}) { - display: none; - } -`; - -export const SkeletonWrapper = styled.div` - padding: 0 10px; -`; diff --git a/frontend/src/pages/post/PostDetailPage/index.tsx b/frontend/src/pages/post/PostDetailPage/index.tsx index 09c067c94..1a8906d33 100644 --- a/frontend/src/pages/post/PostDetailPage/index.tsx +++ b/frontend/src/pages/post/PostDetailPage/index.tsx @@ -1,20 +1,31 @@ import { Suspense } from 'react'; -import ErrorBoundary from '@pages/ErrorBoundary'; +import ErrorBoundaryWithNarrowHeader from '@pages/ErrorBoundaryWithNarrowHeader'; import Layout from '@components/common/Layout'; +import MobileLayoutTemplate from '@components/common/MobileLayoutTemplate'; +import Skeleton from '@components/common/Skeleton'; import PostDetail from './PostDetail'; -import PostDetailFallback from './PostDetailFallback'; export default function PostDetailPage() { return ( - - }> + + + + + } + > - + ); } diff --git a/frontend/src/pages/user/RegisterPersonalInfoPage/index.tsx b/frontend/src/pages/user/RegisterPersonalInfoPage/index.tsx index e37e8d9ad..61430c751 100644 --- a/frontend/src/pages/user/RegisterPersonalInfoPage/index.tsx +++ b/frontend/src/pages/user/RegisterPersonalInfoPage/index.tsx @@ -1,8 +1,7 @@ -import { ChangeEvent, FormEvent, useEffect, useState } from 'react'; +import { ChangeEvent, FormEvent, useContext, useEffect, useState } from 'react'; import { Navigate, useNavigate } from 'react-router-dom'; -import { useToast } from '@hooks'; - +import { ToastContext } from '@hooks/context/toast'; import { useUpdateUserInfo } from '@hooks/query/user/useUpdateUserInfo'; import Accordion from '@components/common/Accordion'; @@ -10,7 +9,6 @@ import Layout from '@components/common/Layout'; import LogoButton from '@components/common/LogoButton'; import NarrowTemplateHeader from '@components/common/NarrowTemplateHeader'; import SquareButton from '@components/common/SquareButton'; -import Toast from '@components/common/Toast'; import { ESSENTIAL_MAX_AGE } from '@constants/cookie'; import { BIRTH_YEAR } from '@constants/policy'; @@ -28,9 +26,9 @@ interface UserInfoForm { export default function RegisterPersonalInfoPage() { const navigate = useNavigate(); const hasEssentialInfo = getCookie().hasEssentialInfo === 'true'; + const { addMessage } = useContext(ToastContext); - const { mutate: updateUserInfo, isSuccess, isError, error } = useUpdateUserInfo(); - const { isToastOpen, openToast, toastMessage } = useToast(); + const { mutate: updateUserInfo, isSuccess } = useUpdateUserInfo(); const [userInfoForm, setUserInfoForm] = useState({ gender: '', @@ -54,45 +52,33 @@ export default function RegisterPersonalInfoPage() { const { gender, birthYear, isTermsAgreed } = userInfoForm; if (!gender || !birthYear) { - alert('필수 개인 정보를 모두 입력해주세요.'); + addMessage('필수 개인 정보를 모두 입력해주세요.'); return; } if (isNaN(Number(birthYear))) { - alert('생년월일 값을 확인해주세요.'); + addMessage('생년월일 값을 확인해주세요.'); return; } if (!isTermsAgreed) { - alert('개인 정보 약관에 동의해주세요.'); + addMessage('개인 정보 약관에 동의해주세요.'); return; } const submittedUserInfo = { gender, birthYear: Number(birthYear) }; updateUserInfo(submittedUserInfo); - setCookie({ key: 'hasEssentialInfo', value: 'true', maxAge: ESSENTIAL_MAX_AGE }); - - alert('개인 정보 등록 완료!'); - navigate('/'); }; useEffect(() => { if (isSuccess) { setCookie({ key: 'hasEssentialInfo', value: 'true', maxAge: ESSENTIAL_MAX_AGE }); - alert('개인 정보가 등록 완료되었습니다.'); navigate('/'); } }, [isSuccess]); - useEffect(() => { - if (isError && error instanceof Error) { - openToast('개인 정보를 이미 등록 완료하셨습니다.'); - return; - } - }, [isError, error]); - if (hasEssentialInfo) { - alert('개인 정보를 이미 등록 완료하셨습니다.'); + addMessage('개인 정보를 이미 등록 완료하셨습니다.'); return ; } @@ -179,11 +165,6 @@ export default function RegisterPersonalInfoPage() { - {isToastOpen && ( - - {toastMessage} - - )} ); diff --git a/frontend/src/routes/PrivateRoute.tsx b/frontend/src/routes/PrivateRoute.tsx index bafff38c9..00cb0a3a7 100644 --- a/frontend/src/routes/PrivateRoute.tsx +++ b/frontend/src/routes/PrivateRoute.tsx @@ -11,28 +11,34 @@ import { getLocalStorage } from '@utils/localStorage'; interface Route extends PropsWithChildren { isGuestAllowed?: boolean; + isOnlyAdminAllowed?: boolean; path?: (typeof PATH)[keyof typeof PATH]; } -const PrivateRoute = ({ children, isGuestAllowed = false, path = PATH.LOGIN }: Route) => { - const authInfo = useContext(AuthContext); +const PrivateRoute = ({ + children, + isGuestAllowed = false, + isOnlyAdminAllowed = false, + path = PATH.LOGIN, +}: Route) => { + const { + clearLoggedInfo, + loggedInfo: { userInfo }, + } = useContext(AuthContext); const isLoggedIn = getLocalStorage(ACCESS_TOKEN_KEY); const hasEssentialInfo = getCookie().hasEssentialInfo; - // const isAuthenticated = true; - if (!isGuestAllowed && !isLoggedIn) { - alert('해당 페이지에 접근하려면 로그인이 필요합니다.'); + if (isOnlyAdminAllowed && userInfo?.role !== 'ADMIN') { + alert('해당 페이지는 관리자만 접근이 가능합니다. 마이 페이지를 통해 접속해주세요.'); - return ; + return ; } - /* - if (!isGuestAllowed && !isAuthenticated) { - alert('해당 페이지에 대한 접근 권한이 없습니다.'); + if (!isGuestAllowed && !isLoggedIn) { + alert('해당 페이지에 접근하려면 로그인이 필요합니다.'); return ; } - */ if (isLoggedIn && hasEssentialInfo === 'false') { alert('개인정보를 먼저 등록해주세요.'); @@ -41,7 +47,7 @@ const PrivateRoute = ({ children, isGuestAllowed = false, path = PATH.LOGIN }: R } if (isLoggedIn && hasEssentialInfo === undefined) { - authInfo.clearLoggedInfo(); + clearLoggedInfo(); return ; } diff --git a/frontend/src/routes/router.tsx b/frontend/src/routes/router.tsx index d2edfc49d..c50c2d745 100644 --- a/frontend/src/routes/router.tsx +++ b/frontend/src/routes/router.tsx @@ -1,16 +1,18 @@ import { lazy } from 'react'; import { createBrowserRouter } from 'react-router-dom'; -import AnnouncementPage from '@pages/AnnouncementPage'; import RedirectionPage from '@pages/auth/RedirectionPage'; import ErrorPage from '@pages/ErrorPage'; import HomePage from '@pages/HomePage'; import MyInfoPage from '@pages/MyInfoPage'; import NotFoundPage from '@pages/NotFoundPage'; +import NoticeDetailPage from '@pages/notice/NoticeDetailPage'; +import NoticeListPage from '@pages/notice/NoticeListPage'; import CreatePostPage from '@pages/post/CreatePostPage'; import EditPostPage from '@pages/post/EditPostPage'; import PostDetailPage from '@pages/post/PostDetailPage'; import RankingPage from '@pages/RankingPage'; +import ReportAlarmPage from '@pages/ReportAlarmPage'; import ScrollToTop from '@components/common/ScrollToTop'; import RouteChangeTracker from '@components/RouteChangeTracker'; @@ -22,6 +24,10 @@ import PrivateRoute from './PrivateRoute'; const Login = lazy(() => import('@pages/auth/LoginPage')); const RegisterPersonalInfo = lazy(() => import('@pages/user/RegisterPersonalInfoPage')); const VoteStatisticsPage = lazy(() => import('@pages/VoteStatisticsPage')); +const NoticeAdminPage = lazy(() => import('@pages/admin/notices/NoticeAdminPage')); +const NoticeEditPage = lazy(() => import('@pages/admin/notices/NoticeEditPage')); +const NoticeWritePage = lazy(() => import('@pages/admin/notices/NoticeWritePage')); +const PendingReportPage = lazy(() => import('@pages/admin/PendingReportPage')); const router = createBrowserRouter([ { @@ -161,26 +167,88 @@ const router = createBrowserRouter([ { path: PATH.RANKING, element: ( - <> + - + ), errorElement: , }, { - path: PATH.ANNOUNCEMENT, + path: PATH.ADMIN, + errorElement: , + children: [ + { + path: `reports/pending`, + element: ( + + + + ), + }, + { + path: `notices/write`, + element: ( + + + + ), + }, + { + path: `notices/:noticeId`, + element: ( + + + + ), + }, + { + path: 'notices', + element: ( + + + + ), + }, + ], + }, + { + path: `${PATH.REPORT_ALARM}/:reportId`, element: ( - <> - - - + + + ), errorElement: , }, + { + path: PATH.NOTICES, + errorElement: , + children: [ + { + path: ':noticeId', + element: ( + + + + + ), + }, + { + path: '', + element: ( + + + + + ), + }, + ], + }, { path: '*', element: , }, ]); + export default router; diff --git a/frontend/src/styles/globalStyle.ts b/frontend/src/styles/globalStyle.ts index 6ed9b3b6f..88a5c7cde 100644 --- a/frontend/src/styles/globalStyle.ts +++ b/frontend/src/styles/globalStyle.ts @@ -25,12 +25,13 @@ export const GlobalStyle = createGlobalStyle` :root { /* Colors *****************************************/ + --red: #F51A18; --primary-color: #F85554; --white: #ffffff; - --slate: #94A3B8; - --gray: #F4F4F4; - --red: #F51A18; + --bright-gray: #F4F4F4; + --gray: #cccccc; --dark-gray: #929292; + --slate: #94a3b8; --header: #1f1f1f; --graph-color-purple:#853DE1; --graph-color-green:#5AEAA5; @@ -38,10 +39,12 @@ export const GlobalStyle = createGlobalStyle` --text-dark-gray:#686868; /* Fonts *****************************************/ + --text-page-title: 600 2.4rem/2.6rem san-serif; --text-title: 600 2rem/2.4rem san-serif; - --text-subtitle: 600 1.8rem/2.8rem san-serif; - --text-body: 400 1.7rem/2.4rem san-serif; + --text-subtitle: 600 1.8rem/2rem san-serif; + --text-body: 400 1.7rem/2rem san-serif; --text-caption: 400 1.6rem/2rem san-serif; + --text-default: 400 1.4rem/2rem san-serif; --text-small: 400 1.2rem/1.8rem san-serif; } `; diff --git a/frontend/src/styles/reset.ts b/frontend/src/styles/reset.ts index 6880ce15f..578625676 100644 --- a/frontend/src/styles/reset.ts +++ b/frontend/src/styles/reset.ts @@ -71,6 +71,13 @@ th { button{ background: none; } +*{ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} +*::-webkit-scrollbar { + display: none; /* Chrome, Safari, Opera*/ +} a{ color: inherit; diff --git a/frontend/src/styles/theme.ts b/frontend/src/styles/theme.ts index 2c16ff711..d170de2cb 100644 --- a/frontend/src/styles/theme.ts +++ b/frontend/src/styles/theme.ts @@ -1,6 +1,6 @@ import { DefaultTheme, keyframes } from 'styled-components'; -const breakpoint = { +const breakpoint: Record<'sm' | 'md' | 'lg', `${number}px`> = { /** @media (min-width: 576px) { ... } */ sm: '576px', /** @media (min-width: 768px) { ... } */ @@ -14,6 +14,7 @@ const zIndex = { tagButton: 90, header: 100, modal: 200, + toast: 300, }; const animation = { diff --git a/frontend/src/types/alarm.ts b/frontend/src/types/alarm.ts new file mode 100644 index 000000000..ee4514398 --- /dev/null +++ b/frontend/src/types/alarm.ts @@ -0,0 +1 @@ +export type AlarmType = 'CONTENT' | 'REPORT'; diff --git a/frontend/src/types/menu.ts b/frontend/src/types/menu.ts index c2891b4e9..ebf136a6d 100644 --- a/frontend/src/types/menu.ts +++ b/frontend/src/types/menu.ts @@ -1,15 +1,16 @@ -export type MenuColor = 'black' | 'red'; +import { COMMENT_ACTION, COMMENT_USER } from '@constants/post'; -//메뉴 컴포넌트에서 사용하는 기본적인 인터페이스 -interface MenuItem { +export type MenuColor = 'black' | 'red'; +export interface MenuItem { content: string; color: MenuColor; - action: string; + action: T; } -export type PostAction = 'NICKNAME_REPORT' | 'POST_REPORT' | 'DELETE'; +export type CommentAction = (typeof COMMENT_ACTION)[keyof typeof COMMENT_ACTION]; -//게시글 메뉴 컴포넌트에서 사용하는 확장된 인터페이스 (action을 제한) -export interface PostMenuItem extends MenuItem { - action: PostAction; -} +export type PostAction = 'NICKNAME_REPORT' | 'POST_REPORT' | 'DELETE' | 'EDIT'; + +export type CommentUser = (typeof COMMENT_USER)[keyof typeof COMMENT_USER]; + +export type CommentMenu = Exclude; diff --git a/frontend/src/types/notice.ts b/frontend/src/types/notice.ts new file mode 100644 index 000000000..44c29d354 --- /dev/null +++ b/frontend/src/types/notice.ts @@ -0,0 +1,23 @@ +import { StringDate, StringDateUpToDay } from './time'; + +export interface NoticeResponse { + id: number; + title: string; + content: string; + createdAt: StringDate; + deadline: StringDate; + bannerTitle: string; + bannerSubtitle: string; +} + +export interface NoticeListResponse { + totalPageNumber: number; + currentPageNumber: number; + notices: NoticeResponse[]; +} + +export type NoticeRequest = Omit; + +export type Notice = Omit & { createdAt: StringDateUpToDay }; + +export type NoticeListType = Omit & { noticeList: Notice[] }; diff --git a/frontend/src/types/report.ts b/frontend/src/types/report.ts index 74fe01f3a..161e853de 100644 --- a/frontend/src/types/report.ts +++ b/frontend/src/types/report.ts @@ -1,19 +1,36 @@ +import { PendingReportActionListResponse, PendingReportActionResponse } from '@api/report'; + import { REPORT_MESSAGE } from '@constants/policyMessage'; +import { REPORT_TYPE } from '@constants/report'; export type ReportType = 'POST' | 'COMMENT' | 'NICKNAME'; +export type ReportMessage = keyof typeof REPORT_MESSAGE; + export interface ReportRequest { type: ReportType; id: number; - reason: string; + reason: ReportMessage; } -export type ReportMessage = keyof typeof REPORT_MESSAGE; - /** * 신고용 모달에 사용하기 위한 타입 */ export interface ReportInfo { name: string; - reportMessageList: { [key: string]: string }; + reportMessageList: Record; +} + +export type PendingReportAction = Omit & { + typeName: (typeof REPORT_TYPE)[keyof typeof REPORT_TYPE]; + reason: string; +}; + +export type PendingReportActionList = Omit & { + reportList: PendingReportAction[]; +}; + +export interface ReportActionRequest { + id: number; + hasAction: boolean; } diff --git a/frontend/src/types/time.ts b/frontend/src/types/time.ts index 7f3a8633f..09fbbce79 100644 --- a/frontend/src/types/time.ts +++ b/frontend/src/types/time.ts @@ -7,4 +7,14 @@ export interface DHMTime { minute: number; } -export type StringDate = `${number}-${number}-${number} ${number}:${number}`; +/** + * yyyy-mm-dd HH-MM + */ +export type StringDate = `${number}-${number | string}-${number | string} ${number | string}:${ + | number + | string}`; + +/** + * yyyy-mm-dd + */ +export type StringDateUpToDay = `${number}-${number}-${number}`; diff --git a/frontend/src/types/user.ts b/frontend/src/types/user.ts index 7a476e939..efd86e617 100644 --- a/frontend/src/types/user.ts +++ b/frontend/src/types/user.ts @@ -4,6 +4,8 @@ export interface User { birthYear: number; postCount: number; voteCount: number; + hasLatestAlarm: boolean; + role: 'ADMIN' | 'USER'; } export interface LoggedInfo { diff --git a/frontend/src/utils/cookie.ts b/frontend/src/utils/cookie.ts index ee9063e6b..3b699ac0d 100644 --- a/frontend/src/utils/cookie.ts +++ b/frontend/src/utils/cookie.ts @@ -1,4 +1,4 @@ -type CookieKey = 'hasEssentialInfo' | 'isAppInstallVisible'; +type CookieKey = 'hasEssentialInfo' | 'isAppInstallVisible' | 'isBannerVisible'; export const setCookie = ({ key, diff --git a/frontend/src/utils/fetch.ts b/frontend/src/utils/fetch.ts index 8388b3616..8f3b71869 100644 --- a/frontend/src/utils/fetch.ts +++ b/frontend/src/utils/fetch.ts @@ -29,138 +29,116 @@ const makeFetchMultiHeaders = () => { }; export const getFetch = async (url: string): Promise => { - try { - await silentLogin(); - const response = await fetch(url, { - method: 'GET', - headers: makeFetchHeaders(), - }); - - if (!response.ok) { - const errorMessage = await response.text(); - throw new Error(errorMessage); - } - - const data = await response.json(); - - return data; - } catch (e) { - const error = e as Error; - throw new Error(error.message); + await silentLogin(); + const response = await fetch(url, { + method: 'GET', + headers: makeFetchHeaders(), + }); + + if (!response.ok) { + const errorText = await response.text(); + const originError: Error = JSON.parse(errorText); + const error = { status: response.status, message: originError.message }; + + throw new Error(JSON.stringify(error)); } + + const data = await response.json(); + + return data; }; export const postFetch = async (url: string, body: T) => { - try { - await silentLogin(); - const response = await fetch(url, { - method: 'POST', - body: JSON.stringify(body), - headers: makeFetchHeaders(), - }); - - if (!response.ok) { - const errorMessage = await response.text(); - throw new Error(errorMessage); - } - - return response; - } catch (e) { - const error = e as Error; + await silentLogin(); + const response = await fetch(url, { + method: 'POST', + body: JSON.stringify(body), + headers: makeFetchHeaders(), + }); + + if (!response.ok) { + const errorText = await response.text(); + const error: Error = JSON.parse(errorText); + throw new Error(error.message); } }; export const putFetch = async (url: string, body: T) => { - try { - await silentLogin(); - const response = await fetch(url, { - method: 'PUT', - body: JSON.stringify(body), - headers: makeFetchHeaders(), - }); - - if (!response.ok) { - const errorMessage = await response.text(); - throw new Error(errorMessage); - } - } catch (e) { - const error = e as Error; + await silentLogin(); + const response = await fetch(url, { + method: 'PUT', + body: JSON.stringify(body), + headers: makeFetchHeaders(), + }); + + if (!response.ok) { + const errorText = await response.text(); + const error: Error = JSON.parse(errorText); + throw new Error(error.message); } }; export const patchFetch = async (url: string, body?: T) => { - try { - await silentLogin(); - const response = await fetch(url, { - method: 'PATCH', - headers: makeFetchHeaders(), - body: JSON.stringify(body), - }); - - if (!response.ok) { - const errorMessage = await response.text(); - throw new Error(errorMessage); - } - } catch (e) { - const error = e as Error; + await silentLogin(); + const response = await fetch(url, { + method: 'PATCH', + headers: makeFetchHeaders(), + body: JSON.stringify(body), + }); + + if (!response.ok) { + const errorText = await response.text(); + const error: Error = JSON.parse(errorText); + throw new Error(error.message); } }; export const deleteFetch = async (url: string) => { - try { - await silentLogin(); - const response = await fetch(url, { - method: 'DELETE', - headers: makeFetchHeaders(), - }); - - if (!response.ok) { - const errorMessage = await response.text(); - throw new Error(errorMessage); - } - } catch (e) { - const error = e as Error; + await silentLogin(); + const response = await fetch(url, { + method: 'DELETE', + headers: makeFetchHeaders(), + }); + + if (!response.ok) { + const errorText = await response.text(); + const error: Error = JSON.parse(errorText); + throw new Error(error.message); } }; export const multiPostFetch = async (url: string, body: FormData) => { - try { - await silentLogin(); - const response = await fetch(url, { - method: 'POST', - body, - headers: makeFetchMultiHeaders(), - }); - - if (!response.ok) { - const errorMessage = await response.text(); - throw new Error(errorMessage); - } - } catch (e) { - const error = e as Error; + await silentLogin(); + const response = await fetch(url, { + method: 'POST', + body, + headers: makeFetchMultiHeaders(), + }); + + if (!response.ok) { + const errorText = await response.text(); + const error: Error = JSON.parse(errorText); + throw new Error(error.message); } }; export const multiPutFetch = async (url: string, body: FormData) => { - try { - await silentLogin(); - const response = await fetch(url, { - method: 'PUT', - body, - headers: makeFetchMultiHeaders(), - }); - - if (!response.ok) { - const errorMessage = await response.text(); - throw new Error(errorMessage); - } - } catch (e) { - const error = e as Error; + await silentLogin(); + const response = await fetch(url, { + method: 'PUT', + body, + headers: makeFetchMultiHeaders(), + }); + + if (!response.ok) { + const errorText = await response.text(); + const error: Error = JSON.parse(errorText); + throw new Error(error.message); } }; diff --git a/frontend/src/utils/login/silentLogin.ts b/frontend/src/utils/login/silentLogin.ts index a57950248..9147401d9 100644 --- a/frontend/src/utils/login/silentLogin.ts +++ b/frontend/src/utils/login/silentLogin.ts @@ -28,7 +28,7 @@ export const silentLogin = async () => { removeLocalStorage(ACCESS_TOKEN_KEY); window.location.href = '/login'; - throw new Error('로그인에 실패했습니다. 다시 로그인 해주세요.'); + throw new Error('로그인을 실패했습니다. 다시 로그인 해주세요.'); } finally { isRequesting = false; } diff --git a/frontend/src/utils/post/addTimeToDate.ts b/frontend/src/utils/post/addTimeToDate.ts index 956451998..c8cfdf328 100644 --- a/frontend/src/utils/post/addTimeToDate.ts +++ b/frontend/src/utils/post/addTimeToDate.ts @@ -1,11 +1,11 @@ -import { DHMTime } from '@type/time'; +import { DHMTime, StringDate } from '@type/time'; /** * @param addTime : 사용자가 선택한 마감 시간 (EX.7일 후) * @param baseTime : 현재 시간 (작성) 혹은 과거에 게시글이 작성된 시간 (수정) * @returns yyyy-mm-dd HH:MM */ -export const addTimeToDate = (addTime: DHMTime, baseTime: Date) => { +export const addTimeToDate = (addTime: DHMTime, baseTime: Date): StringDate => { const { day, hour, minute } = addTime; const newTime = new Date(baseTime); diff --git a/frontend/src/utils/post/convertTextToElement.tsx b/frontend/src/utils/post/convertTextToElement.tsx index ee447e640..cf00e24bd 100644 --- a/frontend/src/utils/post/convertTextToElement.tsx +++ b/frontend/src/utils/post/convertTextToElement.tsx @@ -1,7 +1,12 @@ +import { MouseEvent } from 'react'; + +import { convertTextToUrl } from './convertTextToUrl'; + export const convertTextToElement = (text: string) => { + const convertedUrlText = convertTextToUrl(text); const linkPattern = /\[\[([^[\]]+)\]\]/g; - const parts = text.split(linkPattern); + const parts = convertedUrlText.split(linkPattern); const elementList = parts.map((part, index) => { if (index % 2 === 1) { @@ -10,6 +15,9 @@ export const convertTextToElement = (text: string) => { const linkUrl = linkText.startsWith('http' || 'https') ? linkText : `https://${linkText}`; return ( ) => { + event.stopPropagation(); + }} key={index} href={linkUrl} target="_blank" @@ -22,7 +30,7 @@ export const convertTextToElement = (text: string) => { } // 링크가 아닌 문자열 - return {part}; + return {part}; }); return elementList; diff --git a/frontend/src/utils/post/convertTextToUrl.ts b/frontend/src/utils/post/convertTextToUrl.ts new file mode 100644 index 000000000..848658126 --- /dev/null +++ b/frontend/src/utils/post/convertTextToUrl.ts @@ -0,0 +1,29 @@ +/** + * https://abc.co.kr/@abc/4 + * https://votogether.com/ + * http://localhost:3000/posts/100035 + * http://votogether.com/ + * (? { + const httpOrHttpsConvertedText = text.replace(httpsOrHttpRegex, url => `[[${url}]]`); + const wwwConvertedText = httpOrHttpsConvertedText.replace(wwwRegex, url => `[[${url}]]`); + + return wwwConvertedText; +};