From aede56d4f2b606b6bf19ee28195c3ca7a725eb6c Mon Sep 17 00:00:00 2001 From: seungheerho Date: Tue, 25 Mar 2025 17:30:21 +0900 Subject: [PATCH] feat --- .env.dev | 8 + .env.prod | 7 + .gitattributes | 8 + .gitignore | 23 + .prettierignore | 4 + .prettierrc | 9 + .vscode/launch.json | 14 + .vscode/settings.json | 4 + .vscode/tasks.json | 28 + README | 0 README.md | 46 + craco.config.ts | 14 + eslint.config.mjs | 45 + md | 0 package-lock.json | 19637 ++++++++++++++++ package.json | 78 + public/assets/fonts/datta/datta-icons.css | 79 + public/assets/fonts/datta/fonts/pct.eot | Bin 0 -> 2548 bytes public/assets/fonts/datta/fonts/pct.svg | 23 + public/assets/fonts/datta/fonts/pct.ttf | Bin 0 -> 2400 bytes public/assets/fonts/datta/fonts/pct.woff | Bin 0 -> 1544 bytes public/assets/fonts/feather/fonts/feather.eot | Bin 0 -> 55828 bytes public/assets/fonts/feather/fonts/feather.svg | 759 + public/assets/fonts/feather/fonts/feather.ttf | Bin 0 -> 55664 bytes .../assets/fonts/feather/fonts/feather.woff | Bin 0 -> 26432 bytes public/assets/fonts/feather/icon-font.css | 992 + public/favicon.svg | 3 + public/index.html | 27 + public/manifest.json | 15 + public/robots.txt | 3 + src/App.test.tsx | 9 + src/App.tsx | 56 + .../errorboundary/ErrorBoundary.tsx | 67 + src/components/scrolltotop/ScrollToTop.tsx | 18 + src/components/ui/button/Button.module.scss | 104 + src/components/ui/button/Button.tsx | 37 + .../ui/button/SortButton.module.scss | 20 + src/components/ui/button/SortButton.tsx | 43 + src/components/ui/loader/Loader.tsx | 13 + .../ui/modal/AlertModal.module.scss | 71 + src/components/ui/modal/AlertModal.tsx | 64 + src/components/ui/modal/Modal.tsx | 30 + src/components/ui/pagination/Pagination.tsx | 55 + src/components/ui/radio/Radio.module.scss | 45 + src/components/ui/radio/Radio.tsx | 52 + .../ui/searchBar/SearchBar.module.scss | 37 + src/components/ui/searchBar/SearchBar.tsx | 28 + src/hooks/useModal.ts | 19 + src/index.tsx | 25 + src/layout/AuthLayout.tsx | 31 + src/layout/MasterLayout.tsx | 96 + src/layout/RootLayout.tsx | 29 + src/layout/TitleLayout.tsx | 20 + src/layout/components/Sidebar.tsx | 85 + src/layout/components/header/Header.tsx | 114 + .../header/my_info/AdminInfoModal.tsx | 213 + .../authentication/IntegrationProcess.tsx | 113 + .../authentication/SecondaryCertification.tsx | 158 + src/pages/authentication/SignIn.tsx | 134 + .../authentication/components/Stopwatch.tsx | 54 + .../givingEmoticons/GivingEmoticons.tsx | 42 + .../components/EmoticonOwnerList.tsx | 293 + .../components/GivingEmoticonList.tsx | 57 + .../components/NonOwnerAddModal.module.scss | 276 + .../components/NonOwnerAddModal.tsx | 260 + .../components/OwnerDetailModal.module.scss | 48 + .../components/OwnerDetailModal.tsx | 198 + .../ManageEmoticons.module.scss | 175 + .../manageEmoticons/ManageEmoticons.tsx | 117 + .../components/EmoticonTable.module.scss | 73 + .../components/EmoticonTable.tsx | 91 + .../modal/EmoticonAddModal.module.scss | 200 + .../components/modal/EmoticonAddModal.tsx | 689 + .../modal/EmoticonDetailModal.module.scss | 165 + .../components/modal/EmoticonDetailModal.tsx | 488 + .../administrator/AdministratorList.tsx | 256 + .../components/AdministratorAddModal.tsx | 184 + .../components/AdministratorDetailModal.tsx | 232 + src/pages/manage/code/Code.tsx | 36 + .../manage/code/components/AddCodeModal.tsx | 196 + .../code/components/DetailCodeModal.tsx | 241 + .../manage/code/components/MajorCode.tsx | 189 + .../manage/code/components/MajorNameModal.tsx | 111 + .../manage/code/components/MinorCode.tsx | 236 + src/pages/manage/group/Group.tsx | 269 + .../manage/group/components/GroupAddModal.tsx | 99 + .../group/components/GroupDetailModal.tsx | 122 + src/pages/manage/menu/Menu.tsx | 51 + .../manage/menu/components/MenuAddModal.tsx | 212 + .../menu/components/MenuDetailModal.tsx | 282 + src/pages/manage/menu/components/SubMenu.tsx | 392 + src/pages/manage/menu/components/TopMenu.tsx | 375 + src/react-app-env.d.ts | 1 + src/redux/auth.ts | 55 + src/redux/index.ts | 31 + src/reportWebVitals.ts | 15 + src/services/api/adminAPI.ts | 196 + src/services/api/adminGroupAPI.ts | 142 + src/services/api/authAPI.ts | 126 + src/services/api/codeAPI.ts | 176 + src/services/api/emoticonAPI.ts | 319 + src/services/api/menuAPI.ts | 184 + src/services/commonResponse/PageResponse.ts | 27 + src/setupTests.ts | 5 + src/share/constants/constants.ts | 191 + src/share/lib/customAxios.ts | 125 + src/share/utils/cryption.ts | 34 + src/share/utils/fileUtils.ts | 40 + src/share/utils/objectUtils.ts | 5 + src/share/utils/searchBoxUtils.ts | 29 + src/share/utils/sortUtils.ts | 14 + src/styles/common.css | 191 + src/styles/custom/custom.scss | 1609 ++ src/styles/images/btn-check-box-active.svg | 8 + src/styles/images/btn-check-box-default.svg | 6 + .../images/icons/btn-check-box-active.svg | 8 + .../images/icons/btn-check-box-default.svg | 6 + src/styles/images/icons/btn-radio-active.svg | 9 + src/styles/images/icons/btn-radio-default.svg | 6 + src/styles/images/icons/chevron-left.svg | 4 + src/styles/images/icons/chevron-right.svg | 4 + .../images/icons/ic-admin-profile-default.svg | 6 + .../images/icons/ic-affiliate-dafault.svg | 4 + src/styles/images/icons/ic-arrow-down.svg | 4 + src/styles/images/icons/ic-arrow-up.svg | 4 + src/styles/images/icons/ic-bell.png | Bin 0 -> 254 bytes src/styles/images/icons/ic-bell.svg | 5 + src/styles/images/icons/ic-bin.svg | 9 + src/styles/images/icons/ic-calendar.svg | 8 + src/styles/images/icons/ic-chevron-down.svg | 4 + src/styles/images/icons/ic-chevron-up.svg | 4 + src/styles/images/icons/ic-clock-active.svg | 7 + src/styles/images/icons/ic-dollar-default.svg | 4 + .../images/icons/ic-emiticon-default.svg | 11 + src/styles/images/icons/ic-help-y.svg | 6 + src/styles/images/icons/ic-help.svg | 6 + src/styles/images/icons/ic-home.svg | 6 + src/styles/images/icons/ic-invoice.svg | 8 + src/styles/images/icons/ic-logout.svg | 8 + .../icons/ic-manage-payments-default.svg | 8 + .../images/icons/ic-manage-points-default.svg | 4 + src/styles/images/icons/ic-plus.svg | 7 + src/styles/images/icons/ic-search.svg | 4 + src/styles/images/icons/ic-setting.svg | 5 + src/styles/images/icons/ic-user.svg | 7 + src/styles/images/icons/ic-users.svg | 7 + src/styles/images/logo/login-logo.png | Bin 0 -> 1537 bytes src/styles/images/logo/logo-main.png | Bin 0 -> 854 bytes src/styles/partials/_general.scss | 919 + src/styles/partials/_generic.scss | 101 + src/styles/partials/_mixins.scss | 0 src/styles/partials/_variables.scss | 124 + src/styles/partials/menu/_menu-lite.scss | 4153 ++++ src/styles/partials/mixins/_alert.scss | 14 + src/styles/partials/mixins/_buttons.scss | 103 + src/styles/partials/mixins/_function.scss | 20 + src/styles/partials/mixins/_pagination.scss | 22 + src/styles/partials/other/_chart.scss | 153 + src/styles/partials/other/_chat.scss | 428 + src/styles/partials/other/_icon-lauouts.scss | 38 + src/styles/partials/other/_prism.scss | 108 + src/styles/partials/other/_switches.scss | 97 + src/styles/partials/pages/gallery.scss | 1151 + src/styles/partials/popup.scss | 69 + .../partials/theme-elements/_alert.scss | 40 + .../theme-elements/_authentication.scss | 282 + .../_breadcrumb-pagination.scss | 33 + .../partials/theme-elements/_button.scss | 236 + .../partials/theme-elements/_data-tables.scss | 162 + src/styles/partials/theme-elements/_form.scss | 143 + .../theme-elements/_labels-badges.scss | 20 + .../partials/theme-elements/_modal.scss | 9 + src/styles/partials/theme-elements/_nav.scss | 95 + .../partials/theme-elements/_popover.scss | 96 + .../partials/theme-elements/_progress.scss | 39 + .../theme-elements/_radiobox-checkbox.scss | 269 + .../partials/theme-elements/_tooltip.scss | 71 + .../partials/third-party/_css-animator.scss | 1626 ++ .../third-party/_ngx-perfect-scrollbar.scss | 45 + .../third-party/_react-full-screen.scss | 3 + .../partials/third-party/_third-party.scss | 8 + .../third-party/react-bootstrap/_header.scss | 41 + .../react-bootstrap/react-bootstrap.scss | 1 + src/styles/partials/widget/_widget.scss | 1586 ++ src/styles/style.scss | 31 + src/styles/styles.css | 231 + src/styles/ui-treetable.css | 208 + tsconfig.json | 20 + tsconfig.paths.json | 21 + 189 files changed, 46849 insertions(+) create mode 100644 .env.dev create mode 100644 .env.prod create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 README create mode 100644 README.md create mode 100644 craco.config.ts create mode 100644 eslint.config.mjs create mode 100644 md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/assets/fonts/datta/datta-icons.css create mode 100644 public/assets/fonts/datta/fonts/pct.eot create mode 100644 public/assets/fonts/datta/fonts/pct.svg create mode 100644 public/assets/fonts/datta/fonts/pct.ttf create mode 100644 public/assets/fonts/datta/fonts/pct.woff create mode 100644 public/assets/fonts/feather/fonts/feather.eot create mode 100644 public/assets/fonts/feather/fonts/feather.svg create mode 100644 public/assets/fonts/feather/fonts/feather.ttf create mode 100644 public/assets/fonts/feather/fonts/feather.woff create mode 100644 public/assets/fonts/feather/icon-font.css create mode 100644 public/favicon.svg create mode 100644 public/index.html create mode 100644 public/manifest.json create mode 100644 public/robots.txt create mode 100644 src/App.test.tsx create mode 100644 src/App.tsx create mode 100644 src/components/errorboundary/ErrorBoundary.tsx create mode 100644 src/components/scrolltotop/ScrollToTop.tsx create mode 100644 src/components/ui/button/Button.module.scss create mode 100644 src/components/ui/button/Button.tsx create mode 100644 src/components/ui/button/SortButton.module.scss create mode 100644 src/components/ui/button/SortButton.tsx create mode 100644 src/components/ui/loader/Loader.tsx create mode 100644 src/components/ui/modal/AlertModal.module.scss create mode 100644 src/components/ui/modal/AlertModal.tsx create mode 100644 src/components/ui/modal/Modal.tsx create mode 100644 src/components/ui/pagination/Pagination.tsx create mode 100644 src/components/ui/radio/Radio.module.scss create mode 100644 src/components/ui/radio/Radio.tsx create mode 100644 src/components/ui/searchBar/SearchBar.module.scss create mode 100644 src/components/ui/searchBar/SearchBar.tsx create mode 100644 src/hooks/useModal.ts create mode 100644 src/index.tsx create mode 100644 src/layout/AuthLayout.tsx create mode 100644 src/layout/MasterLayout.tsx create mode 100644 src/layout/RootLayout.tsx create mode 100644 src/layout/TitleLayout.tsx create mode 100644 src/layout/components/Sidebar.tsx create mode 100644 src/layout/components/header/Header.tsx create mode 100644 src/layout/components/header/my_info/AdminInfoModal.tsx create mode 100644 src/pages/authentication/IntegrationProcess.tsx create mode 100644 src/pages/authentication/SecondaryCertification.tsx create mode 100644 src/pages/authentication/SignIn.tsx create mode 100644 src/pages/authentication/components/Stopwatch.tsx create mode 100644 src/pages/emoticons/givingEmoticons/GivingEmoticons.tsx create mode 100644 src/pages/emoticons/givingEmoticons/components/EmoticonOwnerList.tsx create mode 100644 src/pages/emoticons/givingEmoticons/components/GivingEmoticonList.tsx create mode 100644 src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.module.scss create mode 100644 src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.tsx create mode 100644 src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.module.scss create mode 100644 src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.tsx create mode 100644 src/pages/emoticons/manageEmoticons/ManageEmoticons.module.scss create mode 100644 src/pages/emoticons/manageEmoticons/ManageEmoticons.tsx create mode 100644 src/pages/emoticons/manageEmoticons/components/EmoticonTable.module.scss create mode 100644 src/pages/emoticons/manageEmoticons/components/EmoticonTable.tsx create mode 100644 src/pages/emoticons/manageEmoticons/components/modal/EmoticonAddModal.module.scss create mode 100644 src/pages/emoticons/manageEmoticons/components/modal/EmoticonAddModal.tsx create mode 100644 src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.module.scss create mode 100644 src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.tsx create mode 100644 src/pages/manage/administrator/AdministratorList.tsx create mode 100644 src/pages/manage/administrator/components/AdministratorAddModal.tsx create mode 100644 src/pages/manage/administrator/components/AdministratorDetailModal.tsx create mode 100644 src/pages/manage/code/Code.tsx create mode 100644 src/pages/manage/code/components/AddCodeModal.tsx create mode 100644 src/pages/manage/code/components/DetailCodeModal.tsx create mode 100644 src/pages/manage/code/components/MajorCode.tsx create mode 100644 src/pages/manage/code/components/MajorNameModal.tsx create mode 100644 src/pages/manage/code/components/MinorCode.tsx create mode 100644 src/pages/manage/group/Group.tsx create mode 100644 src/pages/manage/group/components/GroupAddModal.tsx create mode 100644 src/pages/manage/group/components/GroupDetailModal.tsx create mode 100644 src/pages/manage/menu/Menu.tsx create mode 100644 src/pages/manage/menu/components/MenuAddModal.tsx create mode 100644 src/pages/manage/menu/components/MenuDetailModal.tsx create mode 100644 src/pages/manage/menu/components/SubMenu.tsx create mode 100644 src/pages/manage/menu/components/TopMenu.tsx create mode 100644 src/react-app-env.d.ts create mode 100644 src/redux/auth.ts create mode 100644 src/redux/index.ts create mode 100644 src/reportWebVitals.ts create mode 100644 src/services/api/adminAPI.ts create mode 100644 src/services/api/adminGroupAPI.ts create mode 100644 src/services/api/authAPI.ts create mode 100644 src/services/api/codeAPI.ts create mode 100644 src/services/api/emoticonAPI.ts create mode 100644 src/services/api/menuAPI.ts create mode 100644 src/services/commonResponse/PageResponse.ts create mode 100644 src/setupTests.ts create mode 100644 src/share/constants/constants.ts create mode 100644 src/share/lib/customAxios.ts create mode 100644 src/share/utils/cryption.ts create mode 100644 src/share/utils/fileUtils.ts create mode 100644 src/share/utils/objectUtils.ts create mode 100644 src/share/utils/searchBoxUtils.ts create mode 100644 src/share/utils/sortUtils.ts create mode 100644 src/styles/common.css create mode 100644 src/styles/custom/custom.scss create mode 100644 src/styles/images/btn-check-box-active.svg create mode 100644 src/styles/images/btn-check-box-default.svg create mode 100644 src/styles/images/icons/btn-check-box-active.svg create mode 100644 src/styles/images/icons/btn-check-box-default.svg create mode 100644 src/styles/images/icons/btn-radio-active.svg create mode 100644 src/styles/images/icons/btn-radio-default.svg create mode 100644 src/styles/images/icons/chevron-left.svg create mode 100644 src/styles/images/icons/chevron-right.svg create mode 100644 src/styles/images/icons/ic-admin-profile-default.svg create mode 100644 src/styles/images/icons/ic-affiliate-dafault.svg create mode 100644 src/styles/images/icons/ic-arrow-down.svg create mode 100644 src/styles/images/icons/ic-arrow-up.svg create mode 100644 src/styles/images/icons/ic-bell.png create mode 100644 src/styles/images/icons/ic-bell.svg create mode 100644 src/styles/images/icons/ic-bin.svg create mode 100644 src/styles/images/icons/ic-calendar.svg create mode 100644 src/styles/images/icons/ic-chevron-down.svg create mode 100644 src/styles/images/icons/ic-chevron-up.svg create mode 100644 src/styles/images/icons/ic-clock-active.svg create mode 100644 src/styles/images/icons/ic-dollar-default.svg create mode 100644 src/styles/images/icons/ic-emiticon-default.svg create mode 100644 src/styles/images/icons/ic-help-y.svg create mode 100644 src/styles/images/icons/ic-help.svg create mode 100644 src/styles/images/icons/ic-home.svg create mode 100644 src/styles/images/icons/ic-invoice.svg create mode 100644 src/styles/images/icons/ic-logout.svg create mode 100644 src/styles/images/icons/ic-manage-payments-default.svg create mode 100644 src/styles/images/icons/ic-manage-points-default.svg create mode 100644 src/styles/images/icons/ic-plus.svg create mode 100644 src/styles/images/icons/ic-search.svg create mode 100644 src/styles/images/icons/ic-setting.svg create mode 100644 src/styles/images/icons/ic-user.svg create mode 100644 src/styles/images/icons/ic-users.svg create mode 100644 src/styles/images/logo/login-logo.png create mode 100644 src/styles/images/logo/logo-main.png create mode 100644 src/styles/partials/_general.scss create mode 100644 src/styles/partials/_generic.scss create mode 100644 src/styles/partials/_mixins.scss create mode 100644 src/styles/partials/_variables.scss create mode 100644 src/styles/partials/menu/_menu-lite.scss create mode 100644 src/styles/partials/mixins/_alert.scss create mode 100644 src/styles/partials/mixins/_buttons.scss create mode 100644 src/styles/partials/mixins/_function.scss create mode 100644 src/styles/partials/mixins/_pagination.scss create mode 100644 src/styles/partials/other/_chart.scss create mode 100644 src/styles/partials/other/_chat.scss create mode 100644 src/styles/partials/other/_icon-lauouts.scss create mode 100644 src/styles/partials/other/_prism.scss create mode 100644 src/styles/partials/other/_switches.scss create mode 100644 src/styles/partials/pages/gallery.scss create mode 100644 src/styles/partials/popup.scss create mode 100644 src/styles/partials/theme-elements/_alert.scss create mode 100644 src/styles/partials/theme-elements/_authentication.scss create mode 100644 src/styles/partials/theme-elements/_breadcrumb-pagination.scss create mode 100644 src/styles/partials/theme-elements/_button.scss create mode 100644 src/styles/partials/theme-elements/_data-tables.scss create mode 100644 src/styles/partials/theme-elements/_form.scss create mode 100644 src/styles/partials/theme-elements/_labels-badges.scss create mode 100644 src/styles/partials/theme-elements/_modal.scss create mode 100644 src/styles/partials/theme-elements/_nav.scss create mode 100644 src/styles/partials/theme-elements/_popover.scss create mode 100644 src/styles/partials/theme-elements/_progress.scss create mode 100644 src/styles/partials/theme-elements/_radiobox-checkbox.scss create mode 100644 src/styles/partials/theme-elements/_tooltip.scss create mode 100644 src/styles/partials/third-party/_css-animator.scss create mode 100644 src/styles/partials/third-party/_ngx-perfect-scrollbar.scss create mode 100644 src/styles/partials/third-party/_react-full-screen.scss create mode 100644 src/styles/partials/third-party/_third-party.scss create mode 100644 src/styles/partials/third-party/react-bootstrap/_header.scss create mode 100644 src/styles/partials/third-party/react-bootstrap/react-bootstrap.scss create mode 100644 src/styles/partials/widget/_widget.scss create mode 100644 src/styles/style.scss create mode 100644 src/styles/styles.css create mode 100644 src/styles/ui-treetable.css create mode 100644 tsconfig.json create mode 100644 tsconfig.paths.json diff --git a/.env.dev b/.env.dev new file mode 100644 index 0000000..966c3a4 --- /dev/null +++ b/.env.dev @@ -0,0 +1,8 @@ +REACT_APP_API_URL=https://cms-api-dev.angkorcoms.com +REACT_APP_VERSION=2.0.0 +REACT_APP_CODE=009 + +REACT_APP_AES_SECRETKEY=unionmobilekookhwa20230906open11 +REACT_APP_AES_IV=unionmobileivhuh +REACT_APP_DEV_THUMBNAIL_SERVER=https://d2ngfzyfwzgoim.cloudfront.net/ +GENERATE_SOURCEMAP=false diff --git a/.env.prod b/.env.prod new file mode 100644 index 0000000..c7a6b81 --- /dev/null +++ b/.env.prod @@ -0,0 +1,7 @@ +REACT_APP_API_URL=https://cms-api.angkorlifes.com +REACT_APP_VERSION=2.0.0 +REACT_APP_CODE=008 + +REACT_APP_AES_SECRETKEY=unionmobilekookhwa20230906open11 +REACT_APP_AES_IV=unionmobileivhuh +REACT_APP_PROD_THUMBNAIL_SERVER=https://d2ngfzyfwzgoim.cloudfront.net/ diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6a58efe --- /dev/null +++ b/.gitattributes @@ -0,0 +1,8 @@ +# 자동 줄바꿈 변환 방지 +* text=auto +*.js text eol=lf +*.jsx text eol=lf +*.ts text eol=lf +*.tsx text eol=lf +*.scss text eol=lf +*.css text eol=lf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..77599e6 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +node_modules +build +coverage +.vscode \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..9f5f355 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,9 @@ +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "useTabs": false, + "trailingComma": "none", + "jsxBracketSameLine": false, + "printWidth": 120 +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..fcf9ec1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}", + "preLaunchTask": "npm: start:dev" + } + ] + } + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ea2320b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.updateImportsOnFileMove.enabled": "always", + "javascript.updateImportsOnFileMove.enabled": "always" + } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..29eeb23 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "npm: start:dev", + "type": "npm", + "script": "start:dev", + "isBackground": true, + "problemMatcher": { + "owner": "custom", + "pattern": [ + { + "regexp": "No issues found", + "file": 1, + "location": 2, + "message": 3 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "Files successfully emitted, wating for typecheck results...", + "endsPattern": "No issues found" + } + }, + "detail": "env-cmd -f .env.dev craco start" + } + ] +} \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..b87cb00 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/craco.config.ts b/craco.config.ts new file mode 100644 index 0000000..e8abbb8 --- /dev/null +++ b/craco.config.ts @@ -0,0 +1,14 @@ +const { CracoAliasPlugin } = require('react-app-alias'); + +export default { + plugins: [ + { + plugin: CracoAliasPlugin, + options: { + source: 'tsconfig', + baseUrl: '.', + tsConfigPath: './tsconfig.paths.json' + } + } + ] +}; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..49f4324 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,45 @@ +import js from '@eslint/js'; +import react from 'eslint-plugin-react'; +import reactJsxRuntime from 'eslint-plugin-react/jsx-runtime'; +import typescript from '@typescript-eslint/eslint-plugin'; +import prettier from 'eslint-plugin-prettier'; +import tsParser from '@typescript-eslint/parser'; + +export default [ + { + root: true, + languageOptions: { + parser: tsParser, + parserOptions: { + project: './tsconfig.json' + } + }, + settings: { + react: { + version: 'detect' + } + }, + plugins: { + react, + prettier, + '@typescript-eslint': typescript + }, + rules: { + ...js.configs.recommended.rules, + ...react.configs.recommended.rules, + ...reactJsxRuntime.configs.recommended.rules, + ...typescript.configs.recommended.rules, + ...prettier.configs.recommended.rules, + + 'prettier/prettier': ['error', { singleQuote: true, endOfLine: 'auto' }], + 'arrow-body-style': 'off', + 'prefer-arrow-callback': 'off' + }, + ignores: ['craco.config.ts'], + environment: { + browser: true, + es2021: true, + jest: true + } + } +]; diff --git a/md b/md new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ca7ccbb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,19637 @@ +{ + "name": "angkoremoticons-cms", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "angkoremoticons-cms", + "version": "0.1.0", + "dependencies": { + "@reduxjs/toolkit": "^2.6.1", + "@tanstack/react-query": "^5.68.0", + "@tanstack/react-query-devtools": "^5.68.0", + "@testing-library/dom": "^10.4.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "axios": "^1.8.3", + "bootstrap": "^5.3.3", + "classnames": "^2.5.1", + "crypto-js": "^4.2.0", + "date-fns": "^4.1.0", + "nvd3": "^1.8.6", + "react": "^19.0.0", + "react-bootstrap": "^2.10.9", + "react-datepicker": "^8.2.1", + "react-dom": "^19.0.0", + "react-icons": "^5.5.0", + "react-perfect-scrollbar": "^1.5.8", + "react-redux": "^9.2.0", + "react-router-dom": "^7.3.0", + "react-scripts": "5.0.1", + "react-select": "^5.10.1", + "react-toastify": "^11.0.5", + "redux-persist": "^6.0.0", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@craco/craco": "^7.1.0", + "@eslint/js": "^9.22.0", + "@types/crypto-js": "^4.2.2", + "@types/node": "^22.13.10", + "@types/react": "^19.0.11", + "@types/react-dom": "^19.0.4", + "env-cmd": "^10.1.0", + "eslint": "^8.57.1", + "eslint-plugin-react": "^7.37.4", + "globals": "^16.0.0", + "prettier": "3.5.3", + "react-app-alias": "^2.2.2", + "sass": "^1.86.0", + "typescript-eslint": "^8.26.1" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.2.tgz", + "integrity": "sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==", + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.26.10.tgz", + "integrity": "sha512-QsfQZr4AiLpKqn7fz+j7SN+f43z2DZCgGyYbNJ2vJOqKfG4E6MZer1+jqGZqKJaxq/gdO2DC/nUu45+pOL5p2Q==", + "license": "MIT", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "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==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", + "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.26.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.10" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "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.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.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==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "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==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-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==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "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==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.26.5.tgz", + "integrity": "sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-flow": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", + "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", + "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", + "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/@craco/craco": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.1.0.tgz", + "integrity": "sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "autoprefixer": "^10.4.12", + "cosmiconfig": "^7.0.1", + "cosmiconfig-typescript-loader": "^1.0.0", + "cross-spawn": "^7.0.3", + "lodash": "^4.17.21", + "semver": "^7.3.7", + "webpack-merge": "^5.8.0" + }, + "bin": { + "craco": "dist/bin/craco.js" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "react-scripts": "^5.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==", + "license": "CC0-1.0" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/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==", + "license": "MIT" + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", + "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.27.5", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.5.tgz", + "integrity": "sha512-BX3jKxo39Ba05pflcQmqPPwc0qdNsdNi/eweAFtoIdrJWNen2sVEWMEac3i6jU55Qfx+lOcdMNKYn2CtWmlnOQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.9", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "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", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "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", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@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==", + "license": "ISC", + "dependencies": { + "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" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "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-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/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==", + "license": "MIT" + }, + "node_modules/@jest/transform/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/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==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", + "license": "MIT", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.7.tgz", + "integrity": "sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.6.1.tgz", + "integrity": "sha512-SSlIqZNYhqm/oMkXbtofwZSt9lrncblzo6YcZ9zoX+zLngRBrCOjK4lNLdkNucJF58RHOWrD9txT3bT3piH7Zw==", + "license": "MIT", + "dependencies": { + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@restart/hooks": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.4.tgz", + "integrity": "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", + "@react-aria/ssr": "^3.5.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", + "dequal": "^2.0.3", + "dom-helpers": "^5.2.0", + "uncontrollable": "^8.0.4", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, + "node_modules/@restart/ui/node_modules/@restart/hooks": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.1.tgz", + "integrity": "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.14.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "license": "MIT", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.68.0.tgz", + "integrity": "sha512-r8rFYYo8/sY/LNaOqX84h12w7EQev4abFXDWy4UoDVUJzJ5d9Fbmb8ayTi7ScG+V0ap44SF3vNs/45mkzDGyGw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { + "version": "5.67.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.67.2.tgz", + "integrity": "sha512-O4QXFFd7xqp6EX7sdvc9tsVO8nm4lpWBqwpgjpVLW5g7IeOY6VnS/xvs/YzbRhBVkKTMaJMOUGU7NhSX+YGoNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.68.0.tgz", + "integrity": "sha512-mMOdGDKlwTP/WV72QqSNf4PAMeoBp/DqBHQ222wBfb51Looi8QUqnCnb9O98ZgvNISmy6fzxRGBJdZ+9IBvX2Q==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.68.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.68.0.tgz", + "integrity": "sha512-h9ArHkfa7SD5eGnJ9h+9M5uYWBdeVeY+WalrtGLCAtJJvHx6/RrtbbzxeoEQbPyx3f0kPcwJ58DGQ+7CBXelpg==", + "license": "MIT", + "dependencies": { + "@tanstack/query-devtools": "5.67.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.68.0", + "react": "^18 || ^19" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", + "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.2.0.tgz", + "integrity": "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "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==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", + "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "license": "MIT", + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.11.tgz", + "integrity": "sha512-vrdxRZfo9ALXth6yPfV16PYTLZwsUWhVjjC+DkfE5t1suNSbBrWC9YqSuuxJZ8Ps6z1o2ycRpIqzZJIgklq4Tw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz", + "integrity": "sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@types/warning": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.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": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "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 + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.62.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" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "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_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "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_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.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": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "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.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "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" + } + }, + "node_modules/@typescript-eslint/utils/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==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "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==", + "license": "Apache-2.0" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "license": "BSD-3-Clause" + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "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==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz", + "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/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==", + "license": "BSD-3-Clause", + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.1.0.tgz", + "integrity": "sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg==", + "license": "MIT", + "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-proposal-private-property-in-object": "^7.16.7", + "@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/babel-preset-react-app/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==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.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==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "license": "BSD-2-Clause" + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "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.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001706", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz", + "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==", + "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/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "license": "MIT", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/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==", + "license": "MIT" + }, + "node_modules/coa/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==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT" + }, + "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" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.41.0.tgz", + "integrity": "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz", + "integrity": "sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7", + "ts-node": "^10.7.0" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "typescript": ">=3" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "license": "CC0-1.0", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "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==", + "license": "BSD-2-Clause", + "dependencies": { + "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/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "license": "MIT" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "CC0-1.0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/csso/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", + "integrity": "sha512-yFk/2idb8OHPKkbAL8QaOaqENNoMhIaSHZerk3oQsECwkObkCpJyjYwCe+OHiq6UEdhe1m8ZGARRRO3ljFjlKg==", + "license": "BSD-3-Clause", + "peer": true + }, + "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==", + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "license": "BSD-2-Clause" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/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==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.120", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.120.tgz", + "integrity": "sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ==", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?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==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + }, + "bin": { + "env-cmd": "bin/env-cmd.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "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" + } + }, + "node_modules/escodegen/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==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-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==", + "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" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "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==", + "license": "BSD-3-Clause", + "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" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "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 + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "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/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==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "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" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.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==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/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==", + "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/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==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "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" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ms": "2.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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "license": "Unlicense" + }, + "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==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "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==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/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==", + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", + "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "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==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/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==", + "license": "MIT" + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "license": "MIT", + "engines": { + "node": ">= 6.0.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==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "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==", + "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/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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "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", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "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==", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "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": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.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==", + "license": "MIT" + }, + "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==", + "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.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "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 + } + } + }, + "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==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", + "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "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==", + "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": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "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/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@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 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "license": "MIT", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "license": "MIT", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/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==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "license": "MIT", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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==", + "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==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", + "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "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==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "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==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "license": "MIT", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "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": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "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==", + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "license": "CC0-1.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.10.tgz", + "integrity": "sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "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==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": 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==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nvd3": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/nvd3/-/nvd3-1.8.6.tgz", + "integrity": "sha512-YGQ9hAQHuQCF0JmYkT2GhNMHb5pA+vDfQj6C2GdpQPzdRPj/srPG3mh/3fZzUFt+at1NusLk/RqICUWkxm4viQ==", + "license": "Apache-2.0", + "peerDependencies": { + "d3": "^3.4.4" + } + }, + "node_modules/nwsapi": { + "version": "2.2.18", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.18.tgz", + "integrity": "sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA==", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "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==", + "license": "MIT", + "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==", + "license": "ISC", + "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==", + "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", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "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" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/perfect-scrollbar": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.6.tgz", + "integrity": "sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==", + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/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==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/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==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/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==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "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.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/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==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/postcss-svgo/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "license": "MIT", + "dependencies": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "peerDependencies": { + "react": ">=0.14.0" + } + }, + "node_modules/prop-types-extra/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==", + "license": "MIT" + }, + "node_modules/prop-types/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==", + "license": "MIT" + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "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/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-app-alias/-/react-app-alias-2.2.2.tgz", + "integrity": "sha512-mkebUkGLEBA8A8jripu5h1e3cccGl8wWHCUmyJo43/KhaN91DO3qyCLWGWneogqkG4PWhp2JHtlCJ06YSdHVYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "license": "MIT", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-polyfill/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==", + "license": "MIT" + }, + "node_modules/react-bootstrap": { + "version": "2.10.9", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.9.tgz", + "integrity": "sha512-TJUCuHcxdgYpOqeWmRApM/Dy0+hVsxNRFvq2aRFQuxhNi/+ivOxC5OdWIeHS3agxvzJ4Ev4nDw2ZdBl9ymd/JQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@restart/hooks": "^0.4.9", + "@restart/ui": "^1.9.4", + "@types/prop-types": "^15.7.12", + "@types/react-transition-group": "^4.4.6", + "classnames": "^2.3.2", + "dom-helpers": "^5.2.1", + "invariant": "^2.2.4", + "prop-types": "^15.8.1", + "prop-types-extra": "^1.1.0", + "react-transition-group": "^4.4.5", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "@types/react": ">=16.14.8", + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-datepicker": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-8.2.1.tgz", + "integrity": "sha512-1pyALWM9mTZ7DG7tfcApwBy2kkld9Kz/EI++LhPnoXJAASbvuq6fdsDfkoB3q1JrxF7vhghVmQ759H/rOwUNNw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.27.3", + "clsx": "^2.1.1", + "date-fns": "^4.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.25.0" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "node_modules/react-error-overlay": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", + "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==", + "license": "MIT" + }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" + }, + "node_modules/react-perfect-scrollbar": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/react-perfect-scrollbar/-/react-perfect-scrollbar-1.5.8.tgz", + "integrity": "sha512-bQ46m70gp/HJtiBOF3gRzBISSZn8FFGNxznTdmTG8AAwpxG1bJCyn7shrgjEvGSQ5FJEafVEiosY+ccER11OSA==", + "license": "MIT", + "dependencies": { + "perfect-scrollbar": "^1.5.0", + "prop-types": "^15.6.1" + }, + "peerDependencies": { + "react": ">=16.3.3", + "react-dom": ">=16.3.3" + } + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": 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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.3.0.tgz", + "integrity": "sha512-466f2W7HIWaNXTKM5nHTqNxLrHTyXybm7R0eBlVSt0k/u55tTCDO194OIx/NrYD4TS5SXKTNekXfT37kMKUjgw==", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.3.0.tgz", + "integrity": "sha512-z7Q5FTiHGgQfEurX/FBinkOXhWREJIAB2RiU24lvcBa82PxUpwqvs/PAXb9lJyPjTs2jrl6UkLvCZVGJPeNuuQ==", + "license": "MIT", + "dependencies": { + "react-router": "7.3.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/react-select": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.1.tgz", + "integrity": "sha512-roPEZUL4aRZDx6DcsD+ZNreVl+fM8VsKn0Wtex1v4IazH60ILp5xhdlp464IsEAlJdXeD+BhDAFsBVMfvLQueA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-toastify": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-11.0.5.tgz", + "integrity": "sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1" + }, + "peerDependencies": { + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "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", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "license": "MIT", + "peerDependencies": { + "redux": ">4.0.0" + } + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-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==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/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==", + "license": "MIT" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/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==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "license": "CC0-1.0" + }, + "node_modules/sass": { + "version": "1.86.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.0.tgz", + "integrity": "sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT" + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "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": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/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==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/send/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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "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", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "license": "MIT" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "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", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "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", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "license": "MIT" + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/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==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/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==", + "license": "MIT" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/svgo/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==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "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.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "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/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==", + "license": "MIT" + }, + "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==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "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", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "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/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==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "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", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typescript-eslint": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.1.tgz", + "integrity": "sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.26.1", + "@typescript-eslint/parser": "8.26.1", + "@typescript-eslint/utils": "8.26.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz", + "integrity": "sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.26.1", + "@typescript-eslint/type-utils": "8.26.1", + "@typescript-eslint/utils": "8.26.1", + "@typescript-eslint/visitor-keys": "8.26.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.1.tgz", + "integrity": "sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.26.1", + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/typescript-estree": "8.26.1", + "@typescript-eslint/visitor-keys": "8.26.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz", + "integrity": "sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/visitor-keys": "8.26.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz", + "integrity": "sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.26.1", + "@typescript-eslint/utils": "8.26.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.1.tgz", + "integrity": "sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz", + "integrity": "sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/visitor-keys": "8.26.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.1.tgz", + "integrity": "sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.26.1", + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/typescript-estree": "8.26.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.26.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz", + "integrity": "sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.26.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "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.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", + "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.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==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "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", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "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.11", + "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": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "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-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "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.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "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.4", + "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-dev-server/node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "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/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "license": "MIT", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "license": "MIT", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "license": "MIT", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==", + "license": "MIT" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "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==", + "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", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "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/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f13cb3c --- /dev/null +++ b/package.json @@ -0,0 +1,78 @@ +{ + "name": "angkoremoticons-cms", + "version": "0.1.0", + "private": true, + "dependencies": { + "@reduxjs/toolkit": "^2.6.1", + "@tanstack/react-query": "^5.68.0", + "@tanstack/react-query-devtools": "^5.68.0", + "@testing-library/dom": "^10.4.0", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "axios": "^1.8.3", + "bootstrap": "^5.3.3", + "classnames": "^2.5.1", + "crypto-js": "^4.2.0", + "date-fns": "^4.1.0", + "nvd3": "^1.8.6", + "react": "^19.0.0", + "react-bootstrap": "^2.10.9", + "react-datepicker": "^8.2.1", + "react-dom": "^19.0.0", + "react-icons": "^5.5.0", + "react-perfect-scrollbar": "^1.5.8", + "react-redux": "^9.2.0", + "react-router-dom": "^7.3.0", + "react-scripts": "5.0.1", + "react-select": "^5.10.1", + "react-toastify": "^11.0.5", + "redux-persist": "^6.0.0", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "env-cmd -f .env.prod craco start", + "start:dev": "env-cmd -f .env.dev craco start", + "build": "set \"GENERATE_SOURCEMAP=false\" && set \"BUILD_PATH=build/prod\" && env-cmd -f .env.prod craco build", + "build:dev": "set \"GENERATE_SOURCEMAP=false\" && set \"BUILD_PATH=build/dev\" && env-cmd -f .env.dev craco build", + "test": "craco test", + "eject": "craco eject", + "format": "prettier --write ." + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@craco/craco": "^7.1.0", + "@eslint/js": "^9.22.0", + "@types/crypto-js": "^4.2.2", + "@types/node": "^22.13.10", + "@types/react": "^19.0.11", + "@types/react-dom": "^19.0.4", + "env-cmd": "^10.1.0", + "eslint": "^8.57.1", + "eslint-plugin-react": "^7.37.4", + "globals": "^16.0.0", + "prettier": "3.5.3", + "react-app-alias": "^2.2.2", + "sass": "^1.86.0", + "typescript-eslint": "^8.26.1" + } +} diff --git a/public/assets/fonts/datta/datta-icons.css b/public/assets/fonts/datta/datta-icons.css new file mode 100644 index 0000000..e3321ad --- /dev/null +++ b/public/assets/fonts/datta/datta-icons.css @@ -0,0 +1,79 @@ +@charset "UTF-8"; + +@font-face { + font-family: 'pct'; + src: url('fonts/pct.eot'); + src: + url('fonts/pct.eot?#iefix') format('embedded-opentype'), + url('fonts/pct.woff') format('woff'), + url('fonts/pct.ttf') format('truetype'), + url('fonts/pct.svg#pct') format('svg'); + font-weight: normal; + font-style: normal; +} + +[data-icon]:before { + font-family: 'pct' !important; + content: attr(data-icon); + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + speak: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +[class^='pct-']:before, +[class*=' pct-']:before { + font-family: 'pct' !important; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + speak: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.pct-arrow1:before { + content: '\61'; +} +.pct-arrow2:before { + content: '\62'; +} +.pct-arrow3:before { + content: '\63'; +} +.pct-arrow4:before { + content: '\64'; +} +.pct-chat1:before { + content: '\65'; +} +.pct-chat2:before { + content: '\66'; +} +.pct-chat3:before { + content: '\67'; +} +.pct-chat4:before { + content: '\68'; +} +.pct-loader1:before { + content: '\69'; +} +.pct-arrow-sharp1:before { + content: '\6a'; +} +.pct-arrow-sharp2:before { + content: '\6b'; +} +.pct-arrow-sharp3:before { + content: '\6c'; +} +.pct-arrow-sharp4:before { + content: '\6d'; +} diff --git a/public/assets/fonts/datta/fonts/pct.eot b/public/assets/fonts/datta/fonts/pct.eot new file mode 100644 index 0000000000000000000000000000000000000000..8ceda302fa1219b028146f3a882b3f5a6838fde1 GIT binary patch literal 2548 zcmcguO=w(I6h7zu&YO98Gt*3FnrSkfBx93WGRe%OliHu8w&_Gm)0Q>_Yqk1FCX+&v z875O~5ka8~K^I+#h#=HO1ffXlsuaPBAVqX(7cL4af*UujnB^3wq+TLj>zJU%pYkUGa4rRHGWrQUeN$&QO^u zbcq(praClnnt`THD|C^nv`lHrQI>|$vtb26OwdN}l1!&drRk}+-?%c z{gX(33GWXJWqU4iA$}Bnzv3+}K%optDr{qrGYd1BJV{N<-7zbDco(9P7UD~)@9PwSX^0sS|fwPAgg+vOW?gbzNV zkQ?`3KKtu)^pj5|Hy;5nEr1faLCgAia*%|^Z;GRdAUYy`?r?Va!;TCLiTE0+6yOs) z58b3kA5kY=ZO%RVTnx|f^!%|otkI?=ez5ky_rV|IdgM+B{w^NTR=uY{xA3?Pc@Vjv zF3)xXl9;KB6dC~4K;2SYLe@mH1zo%D&jrVjd*3-M$P0@z*8TXMO{!;RWkuEWfDsIt zZC3c1t^ZGhUYekJdY`V-9lB2s`6M^^6aI#OhZ8I^!D9$gRK!iUILwyR5l^Hz5l`@# z)*b3KO-T=NR2f%NszfuH$n$2K988+qcjzVcg(IyP?ZR{?r=$)6rfd4$4Tx>ZxZDbn z?9?X}Ksf2Ti`p9#emu9UKg&a$mHIr4=2<Wtgod{fc5X{-vXm~d9H8pV--N> z_+M;I)YI3S<-H@t(J^I|&wVT#R#aD#dv^D!a@dT-CGI?O;j;^^HU~IA1{+MO^sheE z#Ice29O907+6(y=1D!(dyq5hD-%g`49e$4kEsm zgyhDHqeaAJ7qVojx|T>82@xu+RvIm$8}4Y_uCzrIZFlB_XxDh*eCFt$Feid>t6fhH z=vK%IM75ZfP^P;L!;B}B2Zjz#TV^mOMYU~KJXx0X?)Dx{ojZBu)l$0=2nRW;$2)pr z=U+Bs5z7dvK{+VpU)*tEDv?UWWS$&Izn(zlM0FF}A&WhMrw}9Tv+Mcnh@-k>QJhnH zS7>)QthB{ArG~qWaJaR&5}mS@3`C>3L;<2C5N_K*46EYA8( z2mP6H<!6Tjpf^9_gAaTO?2n)1$(pQiob-K&Dj=W!7jqT;u0tyjwF ze0Dg!KaIKY%?}Um8_W;qFu=QNI6ge(YB5u;uUxDyr*m1{Gn&V5J~^H|H*kU@P7+Hj zv%)HCtaE@34swW1ZevTc>-FkeIhW*JQgF$LI=f&ua?UsJd<)KZL|?4hbLD!@bZiG# z7VLVhMaVbz6q + + +Generated by Fontastic.me + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/fonts/datta/fonts/pct.ttf b/public/assets/fonts/datta/fonts/pct.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ea8e2ab9b85930554d5ad91ce24e3b8dd829310b GIT binary patch literal 2400 zcmcguUrbwN6hG(w?QJi&?OIyspes=M<3gb=D>xY7#)>Y&7DtFU#oR!FB|w|PB8xH6 zWDh3#uqR`T$&&fN5|hOYpUh$+#>6Z}AKilwOVpV7;*0ZTG5Gs#FVHf4;Kkc~-*?XW z&iS45opbJYOH4#{^bW~%DW9L3czO9gvAFdI3Cy`M31 zOAshMk_y`}_~g>c`iAEl>2L6#gYR4}&e_@z>Rs3h|E(+bMu{%dDE0@yCsys1!e^gM zeoLeWAe$}~*VZ5WIi|mxa4;_=g^oPlABxr(1t~TD?l-$UT(>JFsyi zsfs>kfmHn{jwFEWRCa_SJM^fl#uD*OQpv+F@d9My?)sP->4v~p4OjC3`lW^Q^E65} zt?;9rN94xf`q>LnIKb9^Iz<^pO7I zNnYoV`78bvL9nO<4f;I^oN{fW_l89r&$M@>xQA0x zn~PEH)irqv_5jA-S=t0xM|;O17}dwC#D+LF0W`z^kVVwe)|%o|eYyT&rJrX$k_{`U zE3uPZZK~`y0}+WE&(7YOt+g5C%rI==RO#6KPZP&R<{9K2enQzyoa@6ltfJT0NL1s< zsn;g$*>PK|1v_M1iPpyVlp#}=RQ`>Bp&{hgl2F`8u0Myow4+Lvs%z1>5f!PzX{G)g zwh@lTA*C*$XkE$ogH0pZE6H;w{T%g1tdJh-)GeRo32I?2s!TN-h8c;)27894EYlm7 zg4!`F5-Ui0bErjA=O?efnhzNszn6o0q`oD5Tfpu{@Uh>Hp*7a6AY#= z9KfpTQFObECfzy$6yhS1(?h=zebP&Z^W%9VRMEc%MD$@y?cjXFnK5%K3e00a9HOTLa8&@$P!9D8I68hA1 zX_Cy^xZn(5c5xVKp8suM4iRNgXs5FP^Wh&4jU87}uBg$Y4i`SNI5P2%nDzwB} zhDL!Bl%W*$Vm*yf!Kly~NV{nOLr`f@lrOHX=ZodVLL!suO`J}^7v@ZF_ds{1Hw}gA z7^Z<}4OD zT*sDXm&?UB)0HJtS+bR-Pn}z`*VE3NaptTu_vy<;d%jRkn~rVw+LB!^)i9arooqGJ n=Y+@jBBDV-<94A2M<#fg{FoK+c&YF>=lTB3?H>hG{r}=$DOeTv literal 0 HcmV?d00001 diff --git a/public/assets/fonts/datta/fonts/pct.woff b/public/assets/fonts/datta/fonts/pct.woff new file mode 100644 index 0000000000000000000000000000000000000000..d106341c864e4e7f7dfdae905e2b0da6ebb581ca GIT binary patch literal 1544 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 + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/assets/fonts/feather/fonts/feather.ttf b/public/assets/fonts/feather/fonts/feather.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e8112bd328c8f949d1212e9564126f93717211c3 GIT binary patch literal 55664 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 J3<(@k{~rRK!_5Ey literal 0 HcmV?d00001 diff --git a/public/assets/fonts/feather/fonts/feather.woff b/public/assets/fonts/feather/fonts/feather.woff new file mode 100644 index 0000000000000000000000000000000000000000..05d6c78d2c0e5af365742b6f851aabd1b9ebdaf4 GIT binary patch literal 26432 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 literal 0 HcmV?d00001 diff --git a/public/assets/fonts/feather/icon-font.css b/public/assets/fonts/feather/icon-font.css new file mode 100644 index 0000000..bd7abea --- /dev/null +++ b/public/assets/fonts/feather/icon-font.css @@ -0,0 +1,992 @@ +@font-face { + font-family: 'feather'; + src: url('fonts/feather.eot?t=1501841394106'); + /* IE9*/ + src: + url('fonts/feather.eot?t=1501841394106#iefix') format('embedded-opentype'), + url('fonts/feather.ttf?t=1501841394106') format('truetype'), + url('fonts/feather.svg?t=1501841394106#feather') format('svg'); + /* iOS 4.1- */ +} + +.feather { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'feather' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-alert-octagon:before { + content: '\e81b'; +} + +.icon-alert-circle:before { + content: '\e81c'; +} + +.icon-activity:before { + content: '\e81d'; +} + +.icon-alert-triangle:before { + content: '\e81e'; +} + +.icon-align-center:before { + content: '\e81f'; +} + +.icon-airplay:before { + content: '\e820'; +} + +.icon-align-justify:before { + content: '\e821'; +} + +.icon-align-left:before { + content: '\e822'; +} + +.icon-align-right:before { + content: '\e823'; +} + +.icon-arrow-down-left:before { + content: '\e824'; +} + +.icon-arrow-down-right:before { + content: '\e825'; +} + +.icon-anchor:before { + content: '\e826'; +} + +.icon-aperture:before { + content: '\e827'; +} + +.icon-arrow-left:before { + content: '\e828'; +} + +.icon-arrow-right:before { + content: '\e829'; +} + +.icon-arrow-down:before { + content: '\e82a'; +} + +.icon-arrow-up-left:before { + content: '\e82b'; +} + +.icon-arrow-up-right:before { + content: '\e82c'; +} + +.icon-arrow-up:before { + content: '\e82d'; +} + +.icon-award:before { + content: '\e82e'; +} + +.icon-bar-chart:before { + content: '\e82f'; +} + +.icon-at-sign:before { + content: '\e830'; +} + +.icon-bar-chart-2:before { + content: '\e831'; +} + +.icon-battery-charging:before { + content: '\e832'; +} + +.icon-bell-off:before { + content: '\e833'; +} + +.icon-battery:before { + content: '\e834'; +} + +.icon-bluetooth:before { + content: '\e835'; +} + +.icon-bell:before { + content: '\e836'; +} + +.icon-book:before { + content: '\e837'; +} + +.icon-briefcase:before { + content: '\e838'; +} + +.icon-camera-off:before { + content: '\e839'; +} + +.icon-calendar:before { + content: '\e83a'; +} + +.icon-bookmark:before { + content: '\e83b'; +} + +.icon-box:before { + content: '\e83c'; +} + +.icon-camera:before { + content: '\e83d'; +} + +.icon-check-circle:before { + content: '\e83e'; +} + +.icon-check:before { + content: '\e83f'; +} + +.icon-check-square:before { + content: '\e840'; +} + +.icon-cast:before { + content: '\e841'; +} + +.icon-chevron-down:before { + content: '\e842'; +} + +.icon-chevron-left:before { + content: '\e843'; +} + +.icon-chevron-right:before { + content: '\e844'; +} + +.icon-chevron-up:before { + content: '\e845'; +} + +.icon-chevrons-down:before { + content: '\e846'; +} + +.icon-chevrons-right:before { + content: '\e847'; +} + +.icon-chevrons-up:before { + content: '\e848'; +} + +.icon-chevrons-left:before { + content: '\e849'; +} + +.icon-circle:before { + content: '\e84a'; +} + +.icon-clipboard:before { + content: '\e84b'; +} + +.icon-chrome:before { + content: '\e84c'; +} + +.icon-clock:before { + content: '\e84d'; +} + +.icon-cloud-lightning:before { + content: '\e84e'; +} + +.icon-cloud-drizzle:before { + content: '\e84f'; +} + +.icon-cloud-rain:before { + content: '\e850'; +} + +.icon-cloud-off:before { + content: '\e851'; +} + +.icon-codepen:before { + content: '\e852'; +} + +.icon-cloud-snow:before { + content: '\e853'; +} + +.icon-compass:before { + content: '\e854'; +} + +.icon-copy:before { + content: '\e855'; +} + +.icon-corner-down-right:before { + content: '\e856'; +} + +.icon-corner-down-left:before { + content: '\e857'; +} + +.icon-corner-left-down:before { + content: '\e858'; +} + +.icon-corner-left-up:before { + content: '\e859'; +} + +.icon-corner-up-left:before { + content: '\e85a'; +} + +.icon-corner-up-right:before { + content: '\e85b'; +} + +.icon-corner-right-down:before { + content: '\e85c'; +} + +.icon-corner-right-up:before { + content: '\e85d'; +} + +.icon-cpu:before { + content: '\e85e'; +} + +.icon-credit-card:before { + content: '\e85f'; +} + +.icon-crosshair:before { + content: '\e860'; +} + +.icon-disc:before { + content: '\e861'; +} + +.icon-delete:before { + content: '\e862'; +} + +.icon-download-cloud:before { + content: '\e863'; +} + +.icon-download:before { + content: '\e864'; +} + +.icon-droplet:before { + content: '\e865'; +} + +.icon-edit-2:before { + content: '\e866'; +} + +.icon-edit:before { + content: '\e867'; +} + +.icon-edit-1:before { + content: '\e868'; +} + +.icon-external-link:before { + content: '\e869'; +} + +.icon-eye:before { + content: '\e86a'; +} + +.icon-feather:before { + content: '\e86b'; +} + +.icon-facebook:before { + content: '\e86c'; +} + +.icon-file-minus:before { + content: '\e86d'; +} + +.icon-eye-off:before { + content: '\e86e'; +} + +.icon-fast-forward:before { + content: '\e86f'; +} + +.icon-file-text:before { + content: '\e870'; +} + +.icon-film:before { + content: '\e871'; +} + +.icon-file:before { + content: '\e872'; +} + +.icon-file-plus:before { + content: '\e873'; +} + +.icon-folder:before { + content: '\e874'; +} + +.icon-filter:before { + content: '\e875'; +} + +.icon-flag:before { + content: '\e876'; +} + +.icon-globe:before { + content: '\e877'; +} + +.icon-grid:before { + content: '\e878'; +} + +.icon-heart:before { + content: '\e879'; +} + +.icon-home:before { + content: '\e87a'; +} + +.icon-github:before { + content: '\e87b'; +} + +.icon-image:before { + content: '\e87c'; +} + +.icon-inbox:before { + content: '\e87d'; +} + +.icon-layers:before { + content: '\e87e'; +} + +.icon-info:before { + content: '\e87f'; +} + +.icon-instagram:before { + content: '\e880'; +} + +.icon-layout:before { + content: '\e881'; +} + +.icon-link-2:before { + content: '\e882'; +} + +.icon-life-buoy:before { + content: '\e883'; +} + +.icon-link:before { + content: '\e884'; +} + +.icon-log-in:before { + content: '\e885'; +} + +.icon-list:before { + content: '\e886'; +} + +.icon-lock:before { + content: '\e887'; +} + +.icon-log-out:before { + content: '\e888'; +} + +.icon-loader:before { + content: '\e889'; +} + +.icon-mail:before { + content: '\e88a'; +} + +.icon-maximize-2:before { + content: '\e88b'; +} + +.icon-map:before { + content: '\e88c'; +} + +.icon-map-pin:before { + content: '\e88e'; +} + +.icon-menu:before { + content: '\e88f'; +} + +.icon-message-circle:before { + content: '\e890'; +} + +.icon-message-square:before { + content: '\e891'; +} + +.icon-minimize-2:before { + content: '\e892'; +} + +.icon-mic-off:before { + content: '\e893'; +} + +.icon-minus-circle:before { + content: '\e894'; +} + +.icon-mic:before { + content: '\e895'; +} + +.icon-minus-square:before { + content: '\e896'; +} + +.icon-minus:before { + content: '\e897'; +} + +.icon-moon:before { + content: '\e898'; +} + +.icon-monitor:before { + content: '\e899'; +} + +.icon-more-vertical:before { + content: '\e89a'; +} + +.icon-more-horizontal:before { + content: '\e89b'; +} + +.icon-move:before { + content: '\e89c'; +} + +.icon-music:before { + content: '\e89d'; +} + +.icon-navigation-2:before { + content: '\e89e'; +} + +.icon-navigation:before { + content: '\e89f'; +} + +.icon-octagon:before { + content: '\e8a0'; +} + +.icon-package:before { + content: '\e8a1'; +} + +.icon-pause-circle:before { + content: '\e8a2'; +} + +.icon-pause:before { + content: '\e8a3'; +} + +.icon-percent:before { + content: '\e8a4'; +} + +.icon-phone-call:before { + content: '\e8a5'; +} + +.icon-phone-forwarded:before { + content: '\e8a6'; +} + +.icon-phone-missed:before { + content: '\e8a7'; +} + +.icon-phone-off:before { + content: '\e8a8'; +} + +.icon-phone-incoming:before { + content: '\e8a9'; +} + +.icon-phone:before { + content: '\e8aa'; +} + +.icon-phone-outgoing:before { + content: '\e8ab'; +} + +.icon-pie-chart:before { + content: '\e8ac'; +} + +.icon-play-circle:before { + content: '\e8ad'; +} + +.icon-play:before { + content: '\e8ae'; +} + +.icon-plus-square:before { + content: '\e8af'; +} + +.icon-plus-circle:before { + content: '\e8b0'; +} + +.icon-plus:before { + content: '\e8b1'; +} + +.icon-pocket:before { + content: '\e8b2'; +} + +.icon-printer:before { + content: '\e8b3'; +} + +.icon-power:before { + content: '\e8b4'; +} + +.icon-radio:before { + content: '\e8b5'; +} + +.icon-repeat:before { + content: '\e8b6'; +} + +.icon-refresh-ccw:before { + content: '\e8b7'; +} + +.icon-rewind:before { + content: '\e8b8'; +} + +.icon-rotate-ccw:before { + content: '\e8b9'; +} + +.icon-refresh-cw:before { + content: '\e8ba'; +} + +.icon-rotate-cw:before { + content: '\e8bb'; +} + +.icon-save:before { + content: '\e8bc'; +} + +.icon-search:before { + content: '\e8bd'; +} + +.icon-server:before { + content: '\e8be'; +} + +.icon-scissors:before { + content: '\e8bf'; +} + +.icon-share-2:before { + content: '\e8c0'; +} + +.icon-share:before { + content: '\e8c1'; +} + +.icon-shield:before { + content: '\e8c2'; +} + +.icon-settings:before { + content: '\e8c3'; +} + +.icon-skip-back:before { + content: '\e8c4'; +} + +.icon-shuffle:before { + content: '\e8c5'; +} + +.icon-sidebar:before { + content: '\e8c6'; +} + +.icon-skip-forward:before { + content: '\e8c7'; +} + +.icon-slack:before { + content: '\e8c8'; +} + +.icon-slash:before { + content: '\e8c9'; +} + +.icon-smartphone:before { + content: '\e8ca'; +} + +.icon-square:before { + content: '\e8cb'; +} + +.icon-speaker:before { + content: '\e8cc'; +} + +.icon-star:before { + content: '\e8cd'; +} + +.icon-stop-circle:before { + content: '\e8ce'; +} + +.icon-sun:before { + content: '\e8cf'; +} + +.icon-sunrise:before { + content: '\e8d0'; +} + +.icon-tablet:before { + content: '\e8d1'; +} + +.icon-tag:before { + content: '\e8d2'; +} + +.icon-sunset:before { + content: '\e8d3'; +} + +.icon-target:before { + content: '\e8d4'; +} + +.icon-thermometer:before { + content: '\e8d5'; +} + +.icon-thumbs-up:before { + content: '\e8d6'; +} + +.icon-thumbs-down:before { + content: '\e8d7'; +} + +.icon-toggle-left:before { + content: '\e8d8'; +} + +.icon-toggle-right:before { + content: '\e8d9'; +} + +.icon-trash-2:before { + content: '\e8da'; +} + +.icon-trash:before { + content: '\e8db'; +} + +.icon-trending-up:before { + content: '\e8dc'; +} + +.icon-trending-down:before { + content: '\e8dd'; +} + +.icon-triangle:before { + content: '\e8de'; +} + +.icon-type:before { + content: '\e8df'; +} + +.icon-twitter:before { + content: '\e8e0'; +} + +.icon-upload:before { + content: '\e8e1'; +} + +.icon-umbrella:before { + content: '\e8e2'; +} + +.icon-upload-cloud:before { + content: '\e8e3'; +} + +.icon-unlock:before { + content: '\e8e4'; +} + +.icon-user-check:before { + content: '\e8e5'; +} + +.icon-user-minus:before { + content: '\e8e6'; +} + +.icon-user-plus:before { + content: '\e8e7'; +} + +.icon-user-x:before { + content: '\e8e8'; +} + +.icon-user:before { + content: '\e8e9'; +} + +.icon-users:before { + content: '\e8ea'; +} + +.icon-video-off:before { + content: '\e8eb'; +} + +.icon-video:before { + content: '\e8ec'; +} + +.icon-voicemail:before { + content: '\e8ed'; +} + +.icon-volume-x:before { + content: '\e8ee'; +} + +.icon-volume-2:before { + content: '\e8ef'; +} + +.icon-volume-1:before { + content: '\e8f0'; +} + +.icon-volume:before { + content: '\e8f1'; +} + +.icon-watch:before { + content: '\e8f2'; +} + +.icon-wifi:before { + content: '\e8f3'; +} + +.icon-x-square:before { + content: '\e8f4'; +} + +.icon-wind:before { + content: '\e8f5'; +} + +.icon-x:before { + content: '\e8f6'; +} + +.icon-x-circle:before { + content: '\e8f7'; +} + +.icon-zap:before { + content: '\e8f8'; +} + +.icon-zoom-in:before { + content: '\e8f9'; +} + +.icon-zoom-out:before { + content: '\e8fa'; +} + +.icon-command:before { + content: '\e8fb'; +} + +.icon-cloud:before { + content: '\e8fc'; +} + +.icon-hash:before { + content: '\e8fd'; +} + +.icon-headphones:before { + content: '\e8fe'; +} + +.icon-underline:before { + content: '\e8ff'; +} + +.icon-italic:before { + content: '\e900'; +} + +.icon-bold:before { + content: '\e901'; +} + +.icon-crop:before { + content: '\e902'; +} + +.icon-help-circle:before { + content: '\e903'; +} + +.icon-paperclip:before { + content: '\e904'; +} + +.icon-shopping-cart:before { + content: '\e905'; +} + +.icon-tv:before { + content: '\e906'; +} + +.icon-wifi-off:before { + content: '\e907'; +} + +.icon-minimize:before { + content: '\e88d'; +} + +.icon-maximize:before { + content: '\e908'; +} + +.icon-gitlab:before { + content: '\e909'; +} + +.icon-sliders:before { + content: '\e90a'; +} + +.icon-star-on:before { + content: '\e90b'; +} + +.icon-heart-on:before { + content: '\e90c'; +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..f3c4529 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..d9e6b4a --- /dev/null +++ b/public/index.html @@ -0,0 +1,27 @@ + + + + + AngkorLife Emoticions CMS + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..1f2f141 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/src/App.test.tsx b/src/App.test.tsx new file mode 100644 index 0000000..2a68616 --- /dev/null +++ b/src/App.test.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..ec5b62f --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,56 @@ +import { toast, ToastContainer } from 'react-toastify'; +import { MutationCache, QueryCache, QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; +import axios from 'axios'; +import RootLayout from '@layout/RootLayout'; + +const App = () => { + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false + }, + mutations: { + retry: false + } + }, + queryCache: new QueryCache({ + onError: (error) => { + if (axios.isAxiosError(error)) { + toast.error(`${error.response?.data?.errorMessage || error.message || 'An unexpected error occurred.'}`); + } else { + toast.error('An unexpected error occurred.'); + } + } + }), + mutationCache: new MutationCache({ + onError: (error) => { + if (axios.isAxiosError(error)) { + toast.error(`${error.response?.data?.errorMessage || error.message || 'An unexpected error occurred.'}`); + } else { + toast.error('An unexpected error occurred.'); + } + } + }) + }); + + return ( + + + + + + ); +}; + +export default App; diff --git a/src/components/errorboundary/ErrorBoundary.tsx b/src/components/errorboundary/ErrorBoundary.tsx new file mode 100644 index 0000000..b8f383b --- /dev/null +++ b/src/components/errorboundary/ErrorBoundary.tsx @@ -0,0 +1,67 @@ +import React, { JSX } from 'react'; +import AlertModal from '@components/ui/modal/AlertModal'; + +interface ErrorBoundaryProps { + children: JSX.Element; + onReset?: () => void; + navigate: (path: string) => void; +} + +interface ErrorBoundaryState { + hasError: boolean; + error: Error | null; + isModalOpen: boolean; +} + +class ErrorBoundary extends React.Component { + state: ErrorBoundaryState = { hasError: false, error: null, isModalOpen: false }; + + /* 에러 발생시 fallback UI 표시하도록 상태 업데이트 */ + static getDerivedStateFromError(error: Error) { + return { hasError: true, error, isModalOpen: true }; + } + + /* 에러 내용과 발생 위치에 대한 log */ + componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void { + if (process.env.NODE_ENV === 'development') { + console.error('Uncaught error:', error, errorInfo); + } + } + + handleCloseBtn = () => { + this.setState({ hasError: false, error: null, isModalOpen: false }); + this.props.navigate('/'); + }; + + // confirm 버튼 활성화시 -> reset 동작 + handleConfirmBtn = () => { + this.setState({ hasError: false, error: null, isModalOpen: false }); + if (this.props.onReset) { + this.props.onReset(); + } + }; + + render() { + const { hasError, isModalOpen, error } = this.state; + if (hasError) { + const modalBtn = { + closeTxt: 'Close', + isCancelBtn: true // 필요에 따라 설정 + }; + const modalTxt = error || 'An unexpected error occurred.'; + + return ( + + {'Error: ' + (modalTxt || 'An unexpected error occurred.')} + + ); + } + return this.props.children; + } +} + +export default ErrorBoundary; diff --git a/src/components/scrolltotop/ScrollToTop.tsx b/src/components/scrolltotop/ScrollToTop.tsx new file mode 100644 index 0000000..ebb0a83 --- /dev/null +++ b/src/components/scrolltotop/ScrollToTop.tsx @@ -0,0 +1,18 @@ +import React, { ReactElement, useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; + +interface Props { + children?: React.ReactNode; +} + +const ScrollToTop = ({ children }: Props): ReactElement => { + const location = useLocation(); + + useEffect(() => { + window.scrollTo(0, 0); + }, [location]); + + return <>{children}; +}; + +export default ScrollToTop; diff --git a/src/components/ui/button/Button.module.scss b/src/components/ui/button/Button.module.scss new file mode 100644 index 0000000..c09312d --- /dev/null +++ b/src/components/ui/button/Button.module.scss @@ -0,0 +1,104 @@ +@mixin button-styles( + $background-color, + $color, + $border-radius: 4px, + $border-color: transparent, + $apply-hover: true, + $hover-background: null, + $hover-color: $color +) { + background-color: $background-color; + color: $color; + border-radius: $border-radius; + border: 1px solid $border-color; + + @if $apply-hover { + &:hover { + background-color: $hover-background; + color: $hover-color; + } + } +} + +.button { + border: none; + cursor: pointer; + font-size: 14px; + font-family: pretendard; + line-height: 1px; + transition: + background-color 0.2s ease, + color 0.2s ease; + + // [action] 공통 스타일 + @mixin base-action { + display: flex; + justify-content: center; + align-items: center; + gap: 2px; + height: 36px; + } + + // ------------------------------------- SIZE -------------------------------------- + + // Delete(icon) + &--xs { + @include base-action; + } + + // Details, Edit + &--sm { + height: 30px; + padding: 0.5rem 1rem; + } + + // Close, Confirm, Process, Cancel + &--md { + height: 33px; + min-width: 100px; + padding: 0.5rem 1rem; + } + + // Add, Delete, Change, Reset + &--lg { + @include base-action; + min-width: 74px; + } + + // ------------------------------------- SIZE -------------------------------------- + + // ------------------------------------- STYLE ------------------------------------- + + // Details, Edit + &--rounded { + @include button-styles(#fff, #7e84a3, 4px, #a1a7c4, #fff, #6c757d, #fff); + } + + // Confirm + &--confirm { + @include button-styles(#fec702, #fff, 50px, null, true, #fdde6d, #fff); + } + + // Process + &--process { + @include button-styles(#fec702, #fff, 4px, null, true, #fdde6d, #fff); + } + + // Close, Cancel + &--close { + @include button-styles(#fff, #858c97, 50px, #c2cad4, false); + } + + // Add, Reset, Change, Delete + &--action { + @include button-styles(#fff, #7e84a3, 4px, #d5d7e3, false); + } + + &[disabled] { + opacity: 0.3; + pointer-events: none; + cursor: not-allowed; + } +} + +// ------------------------------------- STYLE ------------------------------------- diff --git a/src/components/ui/button/Button.tsx b/src/components/ui/button/Button.tsx new file mode 100644 index 0000000..01e6827 --- /dev/null +++ b/src/components/ui/button/Button.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import styles from './Button.module.scss'; +import classNames from 'classnames/bind'; + +const cn = classNames.bind(styles); + +interface ButtonProps { + size?: 'xs' | 'sm' | 'md' | 'lg'; + color?: 'rounded' | 'confirm' | 'process' | 'close' | 'action' | 'disabled'; + type?: 'button' | 'submit' | 'reset'; + value?: string | number; + name?: string; + children: React.ReactNode; + onClick?: (e: React.MouseEvent) => void; + disabled?: boolean; +} + +const Button: React.FC = ({ + size = 'sm', + color = 'rounded', + type = 'button', + value, + name, + children, + onClick, + disabled +}) => { + const classNames = cn('button', `button--${size}`, `button--${color}`); + + return ( + + ); +}; + +export default Button; diff --git a/src/components/ui/button/SortButton.module.scss b/src/components/ui/button/SortButton.module.scss new file mode 100644 index 0000000..8312075 --- /dev/null +++ b/src/components/ui/button/SortButton.module.scss @@ -0,0 +1,20 @@ +.btn_sort { + background: none; + border: none; + display: flex; + justify-content: center; + align-items: center; + + &:focus { + outline: none; + } +} + +.arrow { + margin-left: 8px; +} +.default_arrow { + display: flex; + flex-direction: column; + align-items: end; +} diff --git a/src/components/ui/button/SortButton.tsx b/src/components/ui/button/SortButton.tsx new file mode 100644 index 0000000..8cf1520 --- /dev/null +++ b/src/components/ui/button/SortButton.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import classNames from 'classnames/bind'; + +import styles from './SortButton.module.scss'; +import SortDown from '@styles/images/icons/ic-arrow-down.svg'; +import SortUp from '@styles/images/icons/ic-arrow-up.svg'; + +const cn = classNames.bind(styles); + +interface Props { + label: string; + column: string; + onClick: React.MouseEventHandler; + dataList: { + content: object[]; + } | null; + sortRequest: { + sort: string[]; + }; +} + +const SortButton = ({ label, column, onClick, dataList, sortRequest }: Props) => { + const isSortActive = sortRequest.sort[0] && sortRequest.sort[0].startsWith(column); + const isAscending = sortRequest.sort[0] === `${column},asc`; + + return ( + + ); +}; + +export default SortButton; diff --git a/src/components/ui/loader/Loader.tsx b/src/components/ui/loader/Loader.tsx new file mode 100644 index 0000000..67a9bbc --- /dev/null +++ b/src/components/ui/loader/Loader.tsx @@ -0,0 +1,13 @@ +import React from 'react'; + +const Loader: React.FC = () => { + return ( +
+
+
+
+
+ ); +}; + +export default Loader; diff --git a/src/components/ui/modal/AlertModal.module.scss b/src/components/ui/modal/AlertModal.module.scss new file mode 100644 index 0000000..3de9252 --- /dev/null +++ b/src/components/ui/modal/AlertModal.module.scss @@ -0,0 +1,71 @@ +.container { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + z-index: 1001; + background: rgba(0, 0, 0, 0.5); // 어두운 배경 + overflow-y: auto; + + .modal-wrap { + position: relative; + width: 500px; // 모달의 기본 너비 + max-width: 90%; // 작은 화면에서 반응형 + background: #fff; + border-radius: 8px; + box-shadow: 0px 4px 16px rgba(0, 0, 0, 0.2); + padding: 36px 40px 30px; + font-family: Pretendard, sans-serif; + + .body { + color: #505050; + font-family: Pretendard; + font-size: 14px; + font-weight: 400; + white-space: pre-line; + margin-bottom: 16px; + } + + .footer { + display: flex; + justify-content: flex-end; + gap: 10px; + + .btn { + padding: 6px 16px; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + min-width: 100px; + cursor: pointer; + transition: all 0.3s ease; + + &.confirm { + background-color: #fec702; + border-radius: 50px; + color: #fff; + border: none; + + &:hover { + background-color: darken(#fec702, 10%); + } + } + + &.cancel { + background-color: #fff; + border: 1px solid #c2cad4; + border-radius: 50px; + color: #858c97; + + &:hover { + background-color: darken(#fff, 3%); + } + } + } + } + } +} diff --git a/src/components/ui/modal/AlertModal.tsx b/src/components/ui/modal/AlertModal.tsx new file mode 100644 index 0000000..80f6407 --- /dev/null +++ b/src/components/ui/modal/AlertModal.tsx @@ -0,0 +1,64 @@ +import React, { useEffect } from 'react'; +import ReactDOM from 'react-dom'; +import Button from '../button/Button'; + +interface Button { + onClose: () => void; + buttonName: string; +} + +interface AlertModalProps { + isOpen: boolean; + closeBtn?: Button; + confirmBtn?: Button; + children: React.ReactNode; + disabled?: boolean; +} + +const AlertModal = ({ isOpen, closeBtn, confirmBtn, children, disabled }: AlertModalProps) => { + // 모달 열린 상태에선 스크롤 제어 + useEffect(() => { + if (isOpen && document.body.style.overflow !== 'hidden') { + document.body.style.overflow = 'hidden'; + } + + return () => { + if (!document.querySelector('.modal_wrapper')) { + document.body.style.overflow = 'auto'; + } + }; + }, [isOpen]); + + const handleClickOutside = (event: React.MouseEvent) => { + event.preventDefault(); + event.stopPropagation(); + }; + + if (!isOpen) { + return null; + } + + return ReactDOM.createPortal( +
handleClickOutside(e)}> +
+
e.stopPropagation()}> +

{children}

+
+ {closeBtn && ( + + )} + {confirmBtn && ( + + )} +
+
+
, + document.body + ); +}; + +export default AlertModal; diff --git a/src/components/ui/modal/Modal.tsx b/src/components/ui/modal/Modal.tsx new file mode 100644 index 0000000..7867156 --- /dev/null +++ b/src/components/ui/modal/Modal.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; + +interface Props { + isOpen: boolean; + onClose: (isOpen: boolean) => void; + children: React.ReactNode; +} + +const Modal: React.FC = ({ isOpen, onClose, children }) => { + const handleClickOutside = (event: React.MouseEvent) => { + if ((event.target as Element).className === 'black_bg') { + onClose(false); + } + }; + + if (!isOpen) { + return null; + } + + return ReactDOM.createPortal( +
handleClickOutside(e)}> +
+
{children}
+
, + document.body + ); +}; + +export default Modal; diff --git a/src/components/ui/pagination/Pagination.tsx b/src/components/ui/pagination/Pagination.tsx new file mode 100644 index 0000000..63ad107 --- /dev/null +++ b/src/components/ui/pagination/Pagination.tsx @@ -0,0 +1,55 @@ +import React from 'react'; + +import prevImg from '@icons/chevron-left.svg'; +import nextImg from '@icons/chevron-right.svg'; + +interface Props { + totalItems: number; + itemsPerPage: number; + currentPage: number; + onPaginate: (pageNumber: number) => void; +} + +const Pagination = ({ totalItems, itemsPerPage, currentPage, onPaginate }: Props) => { + const totalPage = Math.ceil(totalItems / itemsPerPage); + const pagesToShow = 10; + + return ( +
+ + {Array.from( + { length: pagesToShow }, + (_, index) => Math.floor((currentPage - 1) / pagesToShow) * pagesToShow + 1 + index + ).map((num) => { + if (num <= totalPage) { + return ( + + ); + } else { + return null; + } + })} + +
+ ); +}; + +export default Pagination; diff --git a/src/components/ui/radio/Radio.module.scss b/src/components/ui/radio/Radio.module.scss new file mode 100644 index 0000000..8530b4b --- /dev/null +++ b/src/components/ui/radio/Radio.module.scss @@ -0,0 +1,45 @@ +.radio { + margin: 0 16px 0 0; + padding-left: 23px; + cursor: pointer; + background-repeat: no-repeat; + background-image: url('~@icons/btn-radio-default.svg'); + background-position: left; +} + +.radio { + &.checked { + cursor: default; + background-image: url('~@icons/btn-radio-active.svg'); + } +} + +input[type='radio'] { + display: none; +} + +// ----------------------------------------------- + +.chart_radio_label { + font-family: 'Pretendard'; + padding: 0 12px; + display: inline-block; + line-height: 36px; + color: #131523; + cursor: pointer; + font-size: 13px; + background: none; + margin: 0; + width: 70px; + text-align: center; + + &.checked { + background: #fec702; + color: #fff; + border-radius: 5px; + } +} + +.input_name { + color: #fff; +} diff --git a/src/components/ui/radio/Radio.tsx b/src/components/ui/radio/Radio.tsx new file mode 100644 index 0000000..40a72f7 --- /dev/null +++ b/src/components/ui/radio/Radio.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import styles from './Radio.module.scss'; +import classNames from 'classnames/bind'; + +const cn = classNames.bind(styles); + +export interface RadioOption { + id: string; + label: string; +} + +interface RadioGroupProps { + className?: 'radio' | 'chart_radio_label'; + options: RadioOption[]; + name: string; + value: string; + onChange: (option: RadioOption) => void; + disabled?: boolean; +} + +const Radio: React.FC = ({ + className = 'radio', + options, + name, + value, + onChange, + disabled = false +}) => { + return ( + <> + {options.map((option) => ( + + ))} + + ); +}; + +export default Radio; diff --git a/src/components/ui/searchBar/SearchBar.module.scss b/src/components/ui/searchBar/SearchBar.module.scss new file mode 100644 index 0000000..3c7e6f6 --- /dev/null +++ b/src/components/ui/searchBar/SearchBar.module.scss @@ -0,0 +1,37 @@ +.search-form { + display: flex; + align-items: center; + border: 1px solid #d5d7e3; + border-radius: 18px; + width: 300px; + + @media (max-width: 1200px) { + width: 200px; // 작은 화면에서 중간 크기 + } + + button { + height: 100%; + border: none; + background: none; + padding-left: 10px; + + &.disabled { + cursor: auto; + } + } + + input { + width: 100%; + height: 36px; + border-radius: 18px; + border: 0; + padding: 6px 12px; + background-color: #fff; + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5; + color: #131523; + appearance: none; + -moz-appearance: none; + } +} diff --git a/src/components/ui/searchBar/SearchBar.tsx b/src/components/ui/searchBar/SearchBar.tsx new file mode 100644 index 0000000..5ac1e9e --- /dev/null +++ b/src/components/ui/searchBar/SearchBar.tsx @@ -0,0 +1,28 @@ +import React, { forwardRef } from 'react'; +import classNames from 'classnames/bind'; + +import styles from './SearchBar.module.scss'; +import SearchIcon from '@images/icons/ic-search.svg'; + +const cn = classNames.bind(styles); + +interface Props { + onClick: React.MouseEventHandler; + onKeyDown: React.KeyboardEventHandler; + placeholderText: string; +} + +const SearchBar = forwardRef(({ onClick, onKeyDown, placeholderText }, ref) => { + return ( +
+ + +
+ ); +}); + +SearchBar.displayName = 'SearchBar'; + +export default SearchBar; diff --git a/src/hooks/useModal.ts b/src/hooks/useModal.ts new file mode 100644 index 0000000..fb0a2fe --- /dev/null +++ b/src/hooks/useModal.ts @@ -0,0 +1,19 @@ +import { useState } from 'react'; + +interface ModalState { + isOpen: boolean; + modalData?: T; +} + +export const useModal = () => { + const [modal, setModal] = useState>({ isOpen: false }); + + const handleToggleModal = (isOpen: boolean, modalData?: T) => { + setModal({ + isOpen, + modalData: isOpen ? modalData : undefined + }); + }; + + return { ...modal, handleToggleModal }; +}; diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..25738fb --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,25 @@ +import ReactDOM from 'react-dom/client'; +import { Provider } from 'react-redux'; +import { PersistGate } from 'redux-persist/integration/react'; +import { BrowserRouter } from 'react-router-dom'; + +import { persistor, store } from './redux'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +import './styles/custom/custom.scss'; +import './styles/styles.css'; +import './styles/common.css'; + +const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); +root.render( + + + + + + + +); + +reportWebVitals(); diff --git a/src/layout/AuthLayout.tsx b/src/layout/AuthLayout.tsx new file mode 100644 index 0000000..e4329d4 --- /dev/null +++ b/src/layout/AuthLayout.tsx @@ -0,0 +1,31 @@ +import { Navigate, Route, Routes } from 'react-router-dom'; + +import SignIn from '@pages/authentication/SignIn'; +import IntegrationProcess from '@pages/authentication/IntegrationProcess'; +import SecondaryCertification from '@pages/authentication/SecondaryCertification'; + +import loginLogo from '@images/logo/login-logo.png'; + +const AuthLayout = () => { + return ( +
+
+
+
+
+ login_logo +
+ + } /> + } /> + } /> + } /> + +
+
+
+
+ ); +}; + +export default AuthLayout; diff --git a/src/layout/MasterLayout.tsx b/src/layout/MasterLayout.tsx new file mode 100644 index 0000000..682f620 --- /dev/null +++ b/src/layout/MasterLayout.tsx @@ -0,0 +1,96 @@ +import React, { useEffect } from 'react'; +import { Navigate, Route, Routes, useLocation, useNavigate } from 'react-router-dom'; +import { useSelector } from 'react-redux'; + +import { RootState } from '@redux/index'; +import ErrorBoundary from '@components/errorboundary/ErrorBoundary'; + +import 'react-toastify/dist/ReactToastify.css'; +import { useMenuPrivacyQuery } from '@api/menuAPI'; +import Loader from '@components/ui/loader/Loader'; +import Header from './components/header/Header'; +import Sidebar from './components/Sidebar'; + +const MasterLayout = () => { + const authLv = { + level: useSelector((state: RootState) => state.auth.userData?.auth as string) + }; + const { data: menuItems = [], isLoading } = useMenuPrivacyQuery(authLv); + + const navigate = useNavigate(); + const location = useLocation(); + + useEffect(() => { + if (!isLoading && menuItems.length > 0 && location.pathname === '/') { + navigate(menuItems[0]?.menuLink); + } + }, [isLoading, menuItems, location]); + + interface DynamicRouteCompnentProps { + path: string; + componentName: string; + } + + const DynamicRouteComponent: React.FC = ({ path, componentName }) => { + const menuPath = path.replace(/\s/g, ''); + const menuName = componentName.replace(/\s/g, ''); + + const Component = React.lazy(() => + import(`../pages${menuPath}/${menuName}`).catch(() => ({ default: () => <>error })) + ); + + return ( + }> + + + ); + }; + + if (isLoading) { + return null; + } + + return ( + <> + {/*
*/} +
+
+ +
+
+
+
+
+ + + {menuItems?.map((item, index) => + item.children[0] ? ( + item.children?.map((cItem, cIndex) => ( + } + /> + )) + ) : ( + } + /> + ) + )} + } /> + + +
+
+
+
+
+
+ + ); +}; + +export default MasterLayout; diff --git a/src/layout/RootLayout.tsx b/src/layout/RootLayout.tsx new file mode 100644 index 0000000..fb6961e --- /dev/null +++ b/src/layout/RootLayout.tsx @@ -0,0 +1,29 @@ +import React, { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useSelector } from 'react-redux'; +import { RootState } from '../redux'; + +import AuthLayout from './AuthLayout'; +import MasterLayout from './MasterLayout'; +import ScrollToTop from '@components/scrolltotop/ScrollToTop'; + +const RootLayout = () => { + const isAuthenticated = useSelector((state: RootState) => state.auth.isAuthenticated); + const navigate = useNavigate(); + + useEffect(() => { + const handleLogout = (): void => { + navigate('/'); + }; + + window.addEventListener('logout', handleLogout); + + return () => { + window.removeEventListener('logout', handleLogout); + }; + }, [navigate]); + + return {isAuthenticated ? : }; +}; + +export default RootLayout; diff --git a/src/layout/TitleLayout.tsx b/src/layout/TitleLayout.tsx new file mode 100644 index 0000000..e1a7b03 --- /dev/null +++ b/src/layout/TitleLayout.tsx @@ -0,0 +1,20 @@ +import React, { ReactNode } from 'react'; +import { Row, Col } from 'react-bootstrap'; + +interface TitleLaytoutProps { + title: string; + children: ReactNode; +} + +const TitleLayout: React.FC = ({ title, children }) => { + return ( +
+

{title}

+ + {children} + +
+ ); +}; + +export default TitleLayout; diff --git a/src/layout/components/Sidebar.tsx b/src/layout/components/Sidebar.tsx new file mode 100644 index 0000000..5369aa0 --- /dev/null +++ b/src/layout/components/Sidebar.tsx @@ -0,0 +1,85 @@ +import React from 'react'; +import { Link, useLocation } from 'react-router-dom'; + +import { MenuPrivacyResponse } from '@api/menuAPI'; + +import ScrollBar from 'react-perfect-scrollbar'; + +interface Props { + menuInfo: MenuPrivacyResponse[]; +} + +const Sidebar = ({ menuInfo }: Props) => { + const location = useLocation(); + const naviLinkClass = ['nav-link']; + + const navItem = (menuInfo: MenuPrivacyResponse, index: number) => { + // 🔹 menuFolder에 "/emoticons/" 또는 "/manage/"가 포함되지 않으면 렌더링하지 않음 + if (!menuInfo.menuFolder.includes('/emoticons/') && !menuInfo.menuFolder.includes('/manage/')) { + return null; + } + + if ([menuInfo.menuLink].concat(menuInfo.children.map((item) => item.menuLink)).includes(location.pathname)) { + if (!naviLinkClass.includes('active')) { + naviLinkClass.push('active'); + } + } else { + const activeIndex = naviLinkClass.findIndex((item) => item === 'active'); + + if (activeIndex > 0) { + naviLinkClass.splice(activeIndex, 1); + } + } + + if (menuInfo.children[0]?.id) { + return ( +
  • + + + + + + {menuInfo.menuName} + + +
      {menuInfo.children.map((item, index) => navItem(item, index))}
    +
  • + ); + } else if (menuInfo.parentId === 0) { + return ( +
  • + + + + + + {menuInfo.menuName} + + +
  • + ); + } else { + return ( +
  • + + {menuInfo.menuName} + +
  • + ); + } + }; + + return ( + + ); +}; + +export default Sidebar; diff --git a/src/layout/components/header/Header.tsx b/src/layout/components/header/Header.tsx new file mode 100644 index 0000000..0878373 --- /dev/null +++ b/src/layout/components/header/Header.tsx @@ -0,0 +1,114 @@ +import React, { useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { Dropdown } from 'react-bootstrap'; +import { useDispatch, useSelector } from 'react-redux'; + +import { RootState } from '@redux/index'; +import { logoutSuccess } from '@redux/auth'; +import { aesDecrypt } from '@utils/cryption'; + +import Modal from '@components/ui/modal/Modal'; + +import headerLogo from '@images/logo/logo-main.png'; +import imgBell from '@icons/ic-bell.svg'; +import downImg from '@icons/ic-chevron-down.svg'; +import userInfoImg from '@icons/ic-user.svg'; +import logoutImg from '@icons/ic-logout.svg'; +import AdminInfo from './my_info/AdminInfoModal'; + +interface Props { + pagePath: string; +} + +const Header = ({ pagePath }: Props) => { + const version = process.env.REACT_APP_VERSION; + const userName = aesDecrypt(useSelector((state: RootState) => state.auth.userData?.userName as string)); + + const [isModalOpen, setIsModalOpen] = useState(false); + + const dispatch = useDispatch(); + + const navigate = useNavigate(); + + const headerClass = ['navbar', 'pcoded-header', 'navbar-expand-lg']; + + const openModal = (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + + setIsModalOpen(true); + }; + + const handleLogout = () => { + dispatch(logoutSuccess()); + navigate('/'); + }; + + return ( + <> + setIsModalOpen(false)}> + setIsModalOpen(false)} /> + +
    +
    + +
    + angkor chat + {version} +
    + +
    +
    + +
    +
    + + ); +}; + +export default Header; diff --git a/src/layout/components/header/my_info/AdminInfoModal.tsx b/src/layout/components/header/my_info/AdminInfoModal.tsx new file mode 100644 index 0000000..7f1014f --- /dev/null +++ b/src/layout/components/header/my_info/AdminInfoModal.tsx @@ -0,0 +1,213 @@ +import React, { useState } from 'react'; +import { toast } from 'react-toastify'; + +import { InfoResponse, useInfoQuery } from '@api/authAPI'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import { useCheckPasswordMutation, useUpdatePasswordMutation } from '@api/adminAPI'; +import { sha256Encrypt } from '@utils/cryption'; + +import AlertModal from '@components/ui/modal/AlertModal'; +import Button from '@components/ui/button/Button'; + +interface Props { + onClose: () => void; +} + +const AUTH_CODE = '008'; + +const AdminInfo = ({ onClose }: Props) => { + const [toggleChangePassword, setToggleChangePassword] = useState(true); + + const { data: myInfo = {} as InfoResponse, isLoading: infoLoading, isError: infoError } = useInfoQuery(); + const { + data: authCodeList = [], + isLoading: authCodeLoading, + isError: authCodeError + } = useSimpleCodeListQuery(AUTH_CODE); + + const Password: React.FC = () => { + return ( +
    + ******** + +
    + ); + }; + + const ChangePassword: React.FC = () => { + const [modal, setModal] = useState({ + isOpen: false, + txt: '' + }); + + const [changePassword, setChangePassword] = useState({ + currentPassword: '', + newPassword: '', + confirmPassword: '', + isPasswordCheck: false + }); + + const { mutate: checkPassword } = useCheckPasswordMutation(); + const { mutate: updataPassword } = useUpdatePasswordMutation(); + + const handleModalClose = (toggle: boolean) => { + setModal((prevState) => ({ ...prevState, isOpen: false })); + + if (toggle) { + setToggleChangePassword(true); + } + }; + + const handleCurrentPasswordCheck = () => { + const request = { + userId: myInfo.adminId, + password: sha256Encrypt(changePassword.currentPassword) + }; + + checkPassword(request, { + onSuccess: () => { + setChangePassword((prevState) => ({ ...prevState, isPasswordCheck: true })); + setModal({ + isOpen: true, + txt: 'You can change your password.' + }); + } + }); + }; + + const handlePasswordChange = () => { + const passwordPattern = /^(?=.*[0-9])(?=.*[!@#$%^&*()])(?=.{8,16}).*$/; + const isValidPassword = passwordPattern.test(changePassword.newPassword); + + if (!isValidPassword) { + setModal({ + isOpen: true, + txt: 'New Password must be at least 8 characters and not more than 16 characters, including at least one digit/special character (!@#$%^&*()).' + }); + } else if (changePassword.currentPassword === changePassword.newPassword) { + setModal({ isOpen: true, txt: 'You cannot set the same password as your previous password.' }); + } else if (changePassword.newPassword !== changePassword.confirmPassword) { + setModal({ isOpen: true, txt: 'Password is different.' }); + } else { + const request = { + userId: myInfo.adminId, + password: sha256Encrypt(changePassword.newPassword) + }; + + updataPassword(request, { + onSuccess: () => { + toast.success('Your password has been changed.'); + onClose(); + } + }); + } + }; + + return ( + <> + handleModalClose(false), + buttonName: 'Close' + }} + > + {modal.txt} + +
    + {!changePassword.isPasswordCheck && ( +
    + setChangePassword((prevState) => ({ ...prevState, currentPassword: e.target.value }))} + /> + +
    + )} + {changePassword.isPasswordCheck && ( + <> + setChangePassword((prevState) => ({ ...prevState, newPassword: e.target.value }))} + /> +
    + + setChangePassword((prevState) => ({ ...prevState, confirmPassword: e.target.value })) + } + /> + +
    + + )} +
    + + ); + }; + + if (infoLoading && authCodeLoading) { + return <>; + } + + if (infoError || authCodeError) { + return 데이터 로딩에 실패했습니다. 다시 시도해 주세요.; + } + + return ( + <> +
    + My Info +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Administrator Name{myInfo.name}
    Email{myInfo.email}
    Password{toggleChangePassword ? : }
    Phone Number{myInfo.phone}
    Permission{authCodeLoading ? '' : authCodeList.find((item) => item.code === myInfo.auth)?.codeName}
    Group{myInfo.groupName}
    +
    +
    + +
    + + ); +}; + +export default AdminInfo; diff --git a/src/pages/authentication/IntegrationProcess.tsx b/src/pages/authentication/IntegrationProcess.tsx new file mode 100644 index 0000000..98f4cf1 --- /dev/null +++ b/src/pages/authentication/IntegrationProcess.tsx @@ -0,0 +1,113 @@ +import React, { useState } from 'react'; +import { FaUserCircle, FaLock } from 'react-icons/fa'; +import { useNavigate } from 'react-router-dom'; +import { useDispatch } from 'react-redux'; + +import { integrationSuccess } from '@redux/auth'; +import { aesEncrypt } from '@utils/cryption'; +import { useCheckIdMutation } from '@api/authAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; + +const FaUserCircleIcon = FaUserCircle as unknown as React.FC>; +const FaLockIcon = FaLock as unknown as React.FC>; + +const IntegrationProcess: React.FC = () => { + const [isModalOpen, setIsModalOpen] = useState(false); + const [modalTxt, setModalTxt] = useState(''); + const [modalBtn, setModalBtn] = useState({ + isCancelBtn: false, + closeTxt: 'Close' + }); + const [angkorId, setAngkorId] = useState(''); + + const { mutate: checkId } = useCheckIdMutation(); + const dispatch = useDispatch(); + + const navigate = useNavigate(); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + + const request = { + angkorId: angkorId + }; + + checkId(request, { + onSuccess: () => { + setModalTxt( + `Your AngkorLife User ID is ${angkorId}. + Do you want to continue logging in?` + ); + setModalBtn({ isCancelBtn: true, closeTxt: 'Cancel' }); + setIsModalOpen(true); + }, + onError: (error) => { + if (error.response?.data.errorCode === 2000) { + setModalTxt( + `This AngkorLife User ID does not exist. + Set the userID in the AngkorLife app.` + ); + setIsModalOpen(true); + } else { + setModalTxt(error.response?.data.errorMessage as string); + setIsModalOpen(true); + } + } + }); + }; + + const handleCloseBtn = () => { + if (modalBtn.isCancelBtn === true) { + setModalBtn({ isCancelBtn: false, closeTxt: 'Close' }); + } + + setIsModalOpen(false); + }; + + const handleConfirmBtn = () => { + dispatch(integrationSuccess(aesEncrypt(angkorId))); + + navigate('/secondCert'); + }; + + return ( + <> + handleCloseBtn(), buttonName: modalBtn.closeTxt }} + {...(modalBtn.isCancelBtn ? { confirmBtn: { onClose: () => handleConfirmBtn(), buttonName: 'Confirm' } } : {})} + > + {modalTxt} + +
    + + AngkorLife ID is not linked. +
    + You need to link your AngkorLife ID to continue logging in. +
    +
    +
    + + + + setAngkorId(e.target.value)} + /> +
    + +
    +
    + + ); +}; + +export default IntegrationProcess; diff --git a/src/pages/authentication/SecondaryCertification.tsx b/src/pages/authentication/SecondaryCertification.tsx new file mode 100644 index 0000000..070fe60 --- /dev/null +++ b/src/pages/authentication/SecondaryCertification.tsx @@ -0,0 +1,158 @@ +import React, { useCallback, useEffect, useRef, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useNavigate } from 'react-router-dom'; + +import { RootState } from '@redux/index'; +import { loginAuthenticate } from '@redux/auth'; +import { aesDecrypt } from '@utils/cryption'; + +import Stopwatch from './components/Stopwatch'; +import { useAuthCheckMutation, useAuthCodeMutation } from '@api/authAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; + +const SecondaryCertification: React.FC = () => { + const [isModalOpen, setIsModalOpen] = useState(false); + const [modalTxt, setModalTxt] = useState(''); + const [authCodeInfo, setAuthCodeInfo] = useState({ authKey: '', authNumber: '', userId: '' }); + const [authCodeMap, setAuthCodeMap] = useState(new Array(6).fill('')); + + const authCodeMapRefs = useRef<(HTMLInputElement | null)[]>([]); + + const { mutate: authCode } = useAuthCodeMutation(); + const { mutate: authCheck } = useAuthCheckMutation(); + const angkorId = useSelector((state: RootState) => state.auth.userData?.angkorUserId as string); + const dispatch = useDispatch(); + + const navigate = useNavigate(); + + const handelReset = useCallback(() => { + const request = { + id: aesDecrypt(angkorId) + }; + + authCode(request, { + onSuccess: (data) => { + setAuthCodeInfo((prevState) => ({ + ...prevState, + authKey: data.tokenType + ' ' + data.authKey, + userId: data.userId + })); + } + }); + + setAuthCodeMap(new Array(6).fill('')); + }, [angkorId, authCode]); + + useEffect(() => { + handelReset(); + authCodeMapRefs.current[0]?.focus(); + }, [handelReset]); + + const submitAuthCheck = () => { + authCheck(authCodeInfo, { + onSuccess: (data) => { + dispatch(loginAuthenticate(data.accessToken)); + + navigate('/'); + } + }); + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + + submitAuthCheck(); + }; + + useEffect(() => { + setAuthCodeInfo((prevState) => ({ + ...prevState, + authNumber: authCodeMap.join('') + })); + }, [authCodeMap]); + + const handleKeydown = (e: React.KeyboardEvent, index: number) => { + const key = e.key; + if (/^\d$/.test(key)) { + setAuthCodeMap((codeMap) => codeMap.map((num, i) => (i === index ? key : num))); + + authCodeMapRefs.current[index + 1]?.focus(); + } else if (['Backspace', 'Delete'].includes(key)) { + setAuthCodeMap((codeMap) => { + const updated = [...codeMap.slice(0, index), ...codeMap.slice(index + 1)]; + + updated.push(''); + + return updated; + }); + + if (authCodeMap[index + 1] === '' || index === 5) { + authCodeMapRefs.current[index - 1]?.focus(); + } + } else if (key === 'ArrowLeft') { + authCodeMapRefs.current[index - 1]?.focus(); + } else if (key === 'ArrowRight') { + if (!authCodeMap[index]) { + return; + } + authCodeMapRefs.current[index + 1]?.focus(); + } else if (key === 'Enter') { + e.preventDefault(); + + submitAuthCheck(); + } else { + e.preventDefault(); + } + }; + + const handleClick = (index: number) => { + if (authCodeMap[index] === '') { + const currentTarget: number = authCodeMap.findIndex((value) => value === ''); + + authCodeMapRefs.current[currentTarget]?.focus(); + } + }; + + return ( + <> + setIsModalOpen(false), buttonName: 'Close' }}> + {modalTxt} + +
    + + Check the authentication number on AngkorLife. + +
    +
    + {authCodeMap.map((input, index) => ( + handleKeydown(e, index)} + onClick={() => handleClick(index)} + ref={(item) => { + authCodeMapRefs.current[index] = item; + }} + /> + ))} +
    +
    + handelReset()} /> +
    + +
    +
    + + ); +}; + +export default SecondaryCertification; diff --git a/src/pages/authentication/SignIn.tsx b/src/pages/authentication/SignIn.tsx new file mode 100644 index 0000000..029be40 --- /dev/null +++ b/src/pages/authentication/SignIn.tsx @@ -0,0 +1,134 @@ +import React, { useEffect, useState } from 'react'; +import { FaUserCircle, FaLock } from 'react-icons/fa'; +import { useNavigate } from 'react-router-dom'; +import { useDispatch } from 'react-redux'; + +import '@styles/style.scss'; +import { sha256Encrypt, aesDecrypt } from '@utils/cryption'; +import { loginSuccess } from '@redux/auth'; +import { useLoginMutation } from '@api/authAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; + +const FaUserCircleIcon = FaUserCircle as unknown as React.FC>; +const FaLockIcon = FaLock as unknown as React.FC>; + +const SignIn: React.FC = () => { + const [isModalOpen, setIsModalOpen] = useState(false); + const [modalTxt, setModalTxt] = useState(''); + const [email, setEmail] = useState(''); + const [rememberEmail, setRememberEmail] = useState(false); + + const { mutate: login } = useLoginMutation(); + const dispatch = useDispatch(); + + const navigate = useNavigate(); + + useEffect(() => { + const emailInfo = window.localStorage.getItem('EmailSave'); + + if (emailInfo) { + setRememberEmail(true); + setEmail(emailInfo); + } + }, []); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + const request = { + id: formData.get('email') as string, + password: sha256Encrypt(formData.get('password') as string) + }; + + login(request, { + onSuccess: (data) => { + if (data) { + // redux state update + dispatch(loginSuccess(data)); + + // Remeber Email Check + if (rememberEmail) { + window.localStorage.setItem('EmailSave', email); + } else { + window.localStorage.removeItem('EmailSave'); + } + + // Account Integration Check + if (aesDecrypt(data.angkorUserId).length === 0) { + navigate('/integration'); + } else { + navigate('/secondCert'); + } + } else { + setModalTxt('An unknown error has occurred. Please retry again.'); + setIsModalOpen(true); + } + } + }); + }; + + const handleRememberEmailChange = () => { + setRememberEmail(!rememberEmail); + }; + + return ( + <> + setIsModalOpen(false), buttonName: 'Close' }}> + {modalTxt} + +
    +
    +
    + + + + { + setEmail(e.target.value); + }} + /> +
    +
    + + + + +
    +
    +
    + + +
    +
    + +
    +
    + + ); +}; + +export default SignIn; diff --git a/src/pages/authentication/components/Stopwatch.tsx b/src/pages/authentication/components/Stopwatch.tsx new file mode 100644 index 0000000..7d1f4f6 --- /dev/null +++ b/src/pages/authentication/components/Stopwatch.tsx @@ -0,0 +1,54 @@ +import { useEffect, useState } from 'react'; + +interface StopwatchProps { + initialTime: number; + onReset: () => void; +} + +const Stopwatch = ({ initialTime, onReset }: StopwatchProps) => { + const [timeLeft, setTimeLeft] = useState(initialTime); + + useEffect(() => { + // 타이머가 0이 되면 카운트 정지 + if (timeLeft === 0) { + return; + } + + // 매 초마다 timeLeft 1 씩 감소 + const intervalId = setInterval(() => { + setTimeLeft((prevTimeLeft) => prevTimeLeft - 1); + }, 1000); + + // 컴포넌트가 언마운트 되거나 timeLeft 가 변경될때 마다 인터벌을 정리합니다. + return () => clearInterval(intervalId); + }, [timeLeft]); + + // 타이머 리셋 + const resetTimer = () => { + setTimeLeft(initialTime); + onReset(); + }; + + // 시간 표기 + const formatTimeLeft = () => { + const minutes = Math.floor(timeLeft / 60); + const seconds = timeLeft % 60; + + return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; + }; + + return ( + <> +

    {formatTimeLeft()}

    + + Send code again + + + ); +}; + +export default Stopwatch; diff --git a/src/pages/emoticons/givingEmoticons/GivingEmoticons.tsx b/src/pages/emoticons/givingEmoticons/GivingEmoticons.tsx new file mode 100644 index 0000000..e5e2b35 --- /dev/null +++ b/src/pages/emoticons/givingEmoticons/GivingEmoticons.tsx @@ -0,0 +1,42 @@ +import { useState } from 'react'; + +import GivingEmoticonsList from './components/GivingEmoticonList'; +import EmoticonOwnerList from './components/EmoticonOwnerList'; + +type ComponentType = 'List' | 'Details'; + +export interface GivingEmoticonState { + guid: number; + emoticonName: string; +} + +const GivingEmoticons = () => { + const [currentComponent, setCurrentComponent] = useState('List'); + const [emoticonState, setEmoticonState] = useState({ guid: 0, emoticonName: '' }); + + const handleDetailClick = () => { + setCurrentComponent('Details'); + }; + + const handleBackClick = () => { + setCurrentComponent('List'); + }; + + return ( +
    +

    Giving Emoticons

    + {currentComponent === 'List' && ( +
    + +
    + )} + {currentComponent === 'Details' && ( +
    + +
    + )} +
    + ); +}; + +export default GivingEmoticons; diff --git a/src/pages/emoticons/givingEmoticons/components/EmoticonOwnerList.tsx b/src/pages/emoticons/givingEmoticons/components/EmoticonOwnerList.tsx new file mode 100644 index 0000000..dbdef4a --- /dev/null +++ b/src/pages/emoticons/givingEmoticons/components/EmoticonOwnerList.tsx @@ -0,0 +1,293 @@ +import React, { useRef, useState } from 'react'; +import { Card, Col, Row } from 'react-bootstrap'; +import { format, parse } from 'date-fns'; +import classNames from 'classnames/bind'; + +import { handleSearchSubmit } from '@utils/searchBoxUtils'; + +import { GivingEmoticonState } from '../GivingEmoticons'; +import OwnerDetailModal from './OwnerDetailModal'; +import NonOwnerAddModal from './NonOwnerAddModal'; + +import styles from '../../manageEmoticons/ManageEmoticons.module.scss'; +import PrevIcon from '@icons/chevron-left.svg'; +import DropDownIcon from '@icons/ic-chevron-down.svg'; +import PlusIcon from '@images/icons/ic-plus.svg'; +import { EmoticonOwnerListRequest, useEmoticonOwnerListQuery } from '@api/emoticonAPI'; +import { setNewSortType } from '@utils/sortUtils'; +import Modal from '@components/ui/modal/Modal'; +import SearchBar from '@components/ui/searchBar/SearchBar'; +import Button from '@components/ui/button/Button'; +import SortButton from '@components/ui/button/SortButton'; +import Pagination from '@components/ui/pagination/Pagination'; + +const cn = classNames.bind(styles); + +interface EmoticonModalInfo { + isOpen: boolean; + modalName: string | null; +} + +export interface OwnerDetailData { + angkorId: string | undefined; + userId: string | undefined; + emoticonCode: number; + emoticonName: string; + saveDate: string | undefined; + expiredDate: string | undefined; +} + +interface Props { + onBackClick: (e: React.MouseEvent) => void; + emoticonState: GivingEmoticonState; +} + +const EmoticonOwnerList = ({ onBackClick, emoticonState }: Props) => { + const [modalInfo, setModalInfo] = useState({ + isOpen: false, + modalName: null + }); + const [emoticonOwnerListRequest, setEmoticonOwnerListRequest] = useState({ + page: 1, + size: 10, + sort: [], + searchKeyword: '', + status: '' + }); + const [ownerDetailData, setOwnerDetailData] = useState({ + angkorId: '', + userId: '', + emoticonCode: emoticonState.guid, + emoticonName: emoticonState.emoticonName, + saveDate: '', + expiredDate: '' + }); + const [isDropBoxOpen, setIsDropBoxOpen] = useState(false); + + // Ref + const searchRef = useRef(null); + + // API + const { data: emoticonOwnerListData = null } = useEmoticonOwnerListQuery( + emoticonState.guid, + emoticonOwnerListRequest + ); + + // Func + // Date 포맷팅 함수 + const formatDate = (dateNum: number) => { + const dateStr = dateNum.toString(); + const parsedDate = parse(dateStr, 'yyyyMMdd', new Date()); + + if (dateStr.startsWith('9999')) return 'indefinitely'; + + return format(parsedDate, 'yyyy-MM-dd'); + }; + + // Sort 정렬 변경 핸들러 + const handleSortChange = (column: 'saveDt') => { + setEmoticonOwnerListRequest((prev) => ({ + ...prev, + sort: setNewSortType(column, prev.sort) + })); + }; + + const handleDropBoxClick = () => { + setIsDropBoxOpen(!isDropBoxOpen); + }; + + // Status 종류 변경 핸들러 + const handleStatusChange = (status: string) => { + setEmoticonOwnerListRequest((prev) => ({ + ...prev, + status: status + })); + setIsDropBoxOpen(false); + }; + + // Detail Modal Open 핸들러 + const handleDetailModalOpen = (e: React.MouseEvent) => { + const modalType = e.currentTarget.textContent; + const selectedUserNo = Number(e.currentTarget.value); + const userData = emoticonOwnerListData?.content.find((user) => user.userNo === selectedUserNo); + + setModalInfo(() => ({ + isOpen: true, + modalName: modalType + })); + + setOwnerDetailData(() => ({ + angkorId: userData?.angkorId, + userId: userData?.userId, + emoticonCode: emoticonState.guid, + emoticonName: emoticonState.emoticonName, + saveDate: userData?.saveDt, + expiredDate: formatDate(userData?.expiredDate as number) + })); + }; + + // Add Modal Open 핸들러 + const handleAddModalOpen = (e: React.MouseEvent) => { + const modalType = e.currentTarget.textContent; + + setModalInfo(() => ({ + isOpen: true, + modalName: modalType + })); + }; + + // Modal close 핸들러 + const handleModalClose = () => { + setModalInfo(() => ({ + isOpen: false, + modalName: null + })); + }; + + return ( + <> + + {modalInfo.modalName === 'Add' && ( + + )} + {modalInfo.modalName === 'Details' && ( + + )} + +
    + + + + + +
    + + {`Gift Emoticon (${emoticonState.emoticonName})`}{' '} + > Emoticon Owners + List +
    +
    + +
    + handleSearchSubmit(event, searchRef, setEmoticonOwnerListRequest)} + onClick={(event) => handleSearchSubmit(event, searchRef, setEmoticonOwnerListRequest)} + placeholderText="Angkor Id, User Id" + /> + +
    +
    + +
    + + + + + + + + + + + + + {emoticonOwnerListData?.content.map((item, idx: number) => ( + + + + + + + + + + ))} + +
    NoAngkor IdUser IdExpired Date + handleSortChange('saveDt')} + dataList={emoticonOwnerListData} + sortRequest={emoticonOwnerListRequest} + /> + + + {isDropBoxOpen && ( +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    + )} +
    {item.userNo}{item.angkorId}{item.userId} {formatDate(item.expiredDate)}{item.saveDt} + + {['Using', 'Hiding', 'Deleted'].find((constants) => constants.includes(item.status))} + + +
    +
    + + setEmoticonOwnerListRequest((prevState) => ({ ...prevState, page: pageNumber })) + } + /> +
    +
    +
    +
    + +
    +
    + + ); +}; + +export default EmoticonOwnerList; diff --git a/src/pages/emoticons/givingEmoticons/components/GivingEmoticonList.tsx b/src/pages/emoticons/givingEmoticons/components/GivingEmoticonList.tsx new file mode 100644 index 0000000..040bed6 --- /dev/null +++ b/src/pages/emoticons/givingEmoticons/components/GivingEmoticonList.tsx @@ -0,0 +1,57 @@ +import React, { useState } from 'react'; +import { Card, Col, Row } from 'react-bootstrap'; +import classNames from 'classnames/bind'; + +import { GivingEmoticonState } from '../GivingEmoticons'; +import EmoticonTable from '../../manageEmoticons/components/EmoticonTable'; + +import styles from '../../manageEmoticons/ManageEmoticons.module.scss'; +import { EmoticonListRequest, useEmoticonListQuery } from '@api/emoticonAPI'; +import { SEARCH_FILTER_OPTIONS_EMOTICONS } from '@constants/constants'; + +const cn = classNames.bind(styles); + +interface Props { + onDetailClick: (e: React.MouseEvent) => void; + setEmoticonState: React.Dispatch>; +} + +const GivingEmoticonsList = ({ onDetailClick, setEmoticonState }: Props) => { + const [emoticonListRequest, setEmoticonListRequest] = useState({ + page: 1, + size: 9, + sort: [], + emotiType: SEARCH_FILTER_OPTIONS_EMOTICONS[3].value + }); + + // API + const { data: emoticonListData } = useEmoticonListQuery(emoticonListRequest); + + return ( + <> +
    + + + + + Gift Emoticon List + + + + + + + +
    + + ); +}; + +export default GivingEmoticonsList; diff --git a/src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.module.scss b/src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.module.scss new file mode 100644 index 0000000..cda74d4 --- /dev/null +++ b/src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.module.scss @@ -0,0 +1,276 @@ +.giving_emoticon_table { + padding-bottom: 40px; + font-family: pretendard; + + h5 { + padding-bottom: 20px; + font-size: 20px; + font-weight: 700; + border-bottom: 1px solid #e6e9f4; + margin: 0; + } + + table { + tr { + color: #131523; + font-size: 14px; + border-bottom: 1px solid #e6e9f4; + display: flex; + align-items: center; + + th { + width: 140px; + font-weight: 600; + padding: 1.0625rem 0.5rem; + display: block; + } + + td { + height: 100%; + display: flex; + align-items: center; + gap: 15px; + border-left: 1px solid #e6e9f4; + padding: 15px 0.5rem; + width: 540px; + } + + &:nth-child(1) { + td { + height: 70px; /* 첫 번째 td의 높이 */ + } + } + + &:nth-child(2) { + td { + height: 150px; /* 두 번째 td의 높이 */ + overflow-y: scroll; + background-color: #dbdbdb24; + } + } + } + .date_picker { + display: flex; + width: 140px; + align-items: center; + color: #131523; + background-color: #f5f6fa; + outline: 0; + box-shadow: none; + border: 1px solid #c2cad4; + border-radius: 4px; + font-family: 'Poppins'; + letter-spacing: -0.65px; + padding: 8px 34px 7px 9px; + gap: 3px; + font-weight: 500; + .sendDate { + background: transparent; + border: 0; + outline: none; + cursor: pointer; + } + } + + .selected_user_container { + display: flex; + flex-direction: column; + align-items: center; + width: 90%; + height: 100%; + margin: 0 auto; + } + + .selected_user_box { + margin: 8px auto; + padding: 15px 20px; + height: 45px; + width: 90%; + display: flex; + align-items: center; + justify-content: space-between; + background: #ffffff; + border-radius: 20px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* 더 부드러운 그림자 효과 */ + cursor: pointer; + transition: + background-color 0.2s ease-in-out, + box-shadow 0.2s ease-in-out; /* 전환 효과 추가 */ + + &:hover { + background-color: #f1f1f1; /* 호버 시 배경색 변화 */ + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); /* 호버 시 그림자 강화 */ + + button { + opacity: 1; + } + } + + span { + padding: 0 10px; + font-size: 16px; /* 폰트 크기 조정 */ + color: #333; /* 텍스트 색상 변경 */ + } + + button { + border: 0; + background: none; + color: #d9534f; /* 더 부드러운 색상 */ + margin-left: 15px; + font-size: 16px; /* 폰트 크기 조정 */ + font-weight: 600; + opacity: 0; + transition: + opacity 0.2s ease-in-out, + transform 0.2s ease-in-out; /* 전환 효과 조정 */ + + &:focus, + &:active { + outline: none; + } + } + } + } +} + +.userList_table { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + font-size: 12px; + color: #131523; + font-family: pretendard; + + .userList_table_header { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid #e6e9f4; + padding-bottom: 20px; + + h5 { + font-size: 20px; + font-weight: 700; + margin: 0; + } + } + + table { + width: 100%; + display: flex; + flex-direction: column; + height: 100%; + + thead { + display: flex; + justify-content: center; + align-items: center; + border-bottom: 1px solid #e6e9f4; + tr { + width: 100%; + height: 50px; + display: flex; + justify-content: center; + align-items: center; + th { + text-align: center; + font-weight: 500; + padding: 1rem 0; + + .form-check { + padding-left: 0; + input[type='checkbox'] { + display: none; + } + input[type='checkbox'] + label { + height: 23px; + cursor: pointer; + padding-left: 23px; + background-repeat: no-repeat; + background-image: url('~@icons/btn-check-box-default.svg'); + background-position: left; + } + input[type='checkbox']:checked + label { + background-image: url('~@icons/btn-check-box-active.svg'); + } + } + + button { + background: none; + border: none; + &:focus { + outline: none; + } + } + &.status { + position: relative; + .status_img { + img { + width: 20px; + height: 20px; + } + } + ul { + &.status_dropdown_menu { + display: none; + position: absolute; + inset: 0px auto auto 0px; + margin: 0px; + transform: translate(0px, 40px); + box-shadow: 0 1px 4px 0 rgba(21, 34, 50, 0.08); + background: #fff; + border-radius: 0.25rem; + z-index: 900; + &.show { + display: block; + } + } + } + } + } + } + } + + tbody { + tr { + display: flex; + border-bottom: 1px solid #e6e9f4; + width: 100%; + td { + display: flex; + align-items: center; + vertical-align: middle; + justify-content: center; + padding: 1rem 3px; + text-align: center; + font-size: 14px; + .form-check { + padding-left: 0; + input[type='checkbox'] { + display: none; + } + input[type='checkbox'] + label { + height: 23px; + cursor: pointer; + padding-left: 23px; + background-repeat: no-repeat; + background-image: url('~@icons/btn-check-box-default.svg'); + background-position: left; + } + input[type='checkbox']:checked + label { + background-image: url('~@icons/btn-check-box-active.svg'); + } + } + } + } + } + } +} + +// select style +.select_custom { + width: 100%; +} diff --git a/src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.tsx b/src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.tsx new file mode 100644 index 0000000..5b50f02 --- /dev/null +++ b/src/pages/emoticons/givingEmoticons/components/NonOwnerAddModal.tsx @@ -0,0 +1,260 @@ +import React, { useRef, useState } from 'react'; +import classNames from 'classnames/bind'; +import { useQueryClient } from '@tanstack/react-query'; +import DatePicker from 'react-datepicker'; +import Select, { SingleValue } from 'react-select'; +import { addMonths, format } from 'date-fns'; +import { toast } from 'react-toastify'; + +import { handleSearchSubmit } from '@utils/searchBoxUtils'; + +import styles from './NonOwnerAddModal.module.scss'; +import CalendarIcon from '@icons/ic-calendar.svg'; +import { + EmoticonNonOwnerListRequest, + useEmoticonNonOwnerListQuery, + usePostAdminGiftEmoticonMutation +} from '@api/emoticonAPI'; +import { EXPIRE_DATE_OPTIONS_EMOTICONS, SearchFilterOption } from '@constants/constants'; +import SearchBar from '@components/ui/searchBar/SearchBar'; +import Pagination from '@components/ui/pagination/Pagination'; +import Button from '@components/ui/button/Button'; + +const cn = classNames.bind(styles); + +interface Props { + emoticonGuid: number; + onCloseModal: () => void; +} + +const NonOwnerAddModal = ({ emoticonGuid, onCloseModal }: Props) => { + const [emoticonNonOwnerListRequest, setEmoticonNonOwnerListRequest] = useState({ + page: 1, + size: 10, + sort: [], + searchKeyword: '' + }); + const [changedExpiredDate, setChangedExpireDate] = useState(new Date()); + const [checkedItems, setCheckedItems] = useState([]); + + // Ref + const searchRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { data: NonOwnerListData } = useEmoticonNonOwnerListQuery(emoticonGuid, emoticonNonOwnerListRequest); + const { mutate: postAdminGiftEmoticon, isPending: isPostingAdminGiftedEmoticon } = usePostAdminGiftEmoticonMutation(); + + // Func + // Datepicker date 변경 핸들러 + const handleExpireDateChange = (date: Date) => { + setChangedExpireDate(date); + }; + + // Datepicker 옆의 날짜 select option 핸들러 + const handleExpireOptionChange = (option: SingleValue) => { + const now = new Date(); + const newDate = Number(option?.value); + + switch (option?.label) { + case EXPIRE_DATE_OPTIONS_EMOTICONS[0].label: + return setChangedExpireDate(now); + case EXPIRE_DATE_OPTIONS_EMOTICONS[1].label: + return setChangedExpireDate(addMonths(now, newDate)); + case EXPIRE_DATE_OPTIONS_EMOTICONS[2].label: + return setChangedExpireDate(addMonths(now, newDate)); + case EXPIRE_DATE_OPTIONS_EMOTICONS[3].label: + return setChangedExpireDate(addMonths(now, newDate)); + case EXPIRE_DATE_OPTIONS_EMOTICONS[4].label: + return setChangedExpireDate(new Date(9999, 0, 1)); + default: + return setChangedExpireDate(now); + } + }; + + // user 개개인 체크 핸들러 + const handleUserSelect = (checked: boolean, userAngkorId: string) => { + if (checked) { + setCheckedItems((prev) => [...prev, userAngkorId]); + } else { + setCheckedItems((prev) => prev.filter((item) => item !== userAngkorId)); + } + }; + + // user 전체 체크 핸들러 + const handleAllUsersSelect = (checked: boolean) => { + const allUserAngkorIdArr = NonOwnerListData?.content.map((user) => user.angkorId as string); + + if (checked) { + setCheckedItems((prev) => { + const newSet = new Set([...prev, ...(allUserAngkorIdArr as string[])]); + return Array.from(newSet); + }); + } else { + const newUserArr = [...checkedItems].filter((user) => !allUserAngkorIdArr?.includes(user)); + + setCheckedItems(newUserArr); + } + }; + + // 선택된 user 체크 해제 핸들러 + const handleSelectedUserDelete = (userId: string) => { + const newSelectedUsers = checkedItems.filter((user) => user !== userId); + + setCheckedItems(newSelectedUsers); + }; + + // user에게 이모티콘 선물하기, Process Btn 핸들러 + const handleProcess = () => { + const request = { + guid: emoticonGuid, + angkorId: checkedItems, + expiredDate: Number(format(changedExpiredDate, 'yyyyMMdd')), + status: 'U' + }; + + postAdminGiftEmoticon(request, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['emoticonOwnerList'] }); + queryClient.invalidateQueries({ queryKey: ['emoticonNonOwnerList'] }); + onCloseModal(); + toast.success('Giving emoticons as a gift was successful.'); + } + }); + }; + + return ( + <> +
    +
    Giving emoticons as a Gift
    + + + + + + + + + + + +
    Expired Date +
    +
    + CalendarIcon +
    + +
    +
    Selected User +
    + {checkedItems.length > 0 + ? checkedItems.map((user) => ( +
    handleSelectedUserDelete(user)} + > + {user} + +
    + )) + : null} +
    +
    +
    +
    +
    +
    User Search
    + handleSearchSubmit(event, searchRef, setEmoticonNonOwnerListRequest)} + onClick={(event) => handleSearchSubmit(event, searchRef, setEmoticonNonOwnerListRequest)} + placeholderText="Angkor Id, User Id" + /> +
    + + + + + + + + + + + {NonOwnerListData?.content.map((user, idx) => ( + + + + + + + ))} + +
    +
    + ) => handleAllUsersSelect(e.target.checked)} + checked={NonOwnerListData?.content + .map((item) => item.angkorId) + .every((angkorId) => checkedItems.includes(angkorId))} + /> + +
    +
    NoUser IdAngkor Id
    +
    + ) => + handleUserSelect(e.target.checked, user.angkorId) + } + checked={checkedItems.includes(user.angkorId)} + /> + + +
    +
    {user.userNo}{user.userId}{user.angkorId}
    +
    + + setEmoticonNonOwnerListRequest((prevState) => ({ ...prevState, page: pageNumber })) + } + /> +
    +
    +
    + + +
    + + ); +}; + +export default NonOwnerAddModal; diff --git a/src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.module.scss b/src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.module.scss new file mode 100644 index 0000000..2a90bb4 --- /dev/null +++ b/src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.module.scss @@ -0,0 +1,48 @@ +.owner_detail_modal { + padding: 0 20px; + h5 { + padding-bottom: 20px; + font-size: 20px; + font-weight: 700; + border-bottom: 1px solid #e6e9f4; + margin: 0; + } + + tbody { + tr { + color: #131523; + font-size: 14px; + border-bottom: 1px solid #e6e9f4; + display: flex; + align-items: center; + th { + height: 50px; + font-weight: 600; + padding: 1.0625rem 0.5rem; + width: 140px; + display: block; + } + td { + border-left: 1px solid #e6e9f4; + padding: 1.25rem 1rem; + width: 493px; + display: block; + } + } + &:last-child { + td { + display: flex; + gap: 10px; + align-items: center; + } + } + } + + .footer { + gap: 10px; + display: flex; + justify-content: center; + width: 100%; + margin-top: 30px; + } +} diff --git a/src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.tsx b/src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.tsx new file mode 100644 index 0000000..0800895 --- /dev/null +++ b/src/pages/emoticons/givingEmoticons/components/OwnerDetailModal.tsx @@ -0,0 +1,198 @@ +import { useState } from 'react'; +import classNames from 'classnames/bind'; +import DatePicker from 'react-datepicker'; +import { format, parseISO } from 'date-fns'; +import { useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; + +import { OwnerDetailData } from './EmoticonOwnerList'; + +import 'react-datepicker/dist/react-datepicker.css'; +import styles from './OwnerDetailModal.module.scss'; +import CalendarIcon from '@icons/ic-calendar.svg'; +import { useDeleteEmoticonOwnershipMutation, useUpdateExpiredDateMutation } from '@api/emoticonAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Button from '@components/ui/button/Button'; + +const cn = classNames.bind(styles); + +interface ButtonInfo { + onClose: () => void; // 함수 타입 정의 + buttonName: string; // 문자열 타입 정의 +} + +interface AlertModalInfo { + isOpen: boolean; + txt: string; + closeBtn: ButtonInfo; + confirmBtn?: ButtonInfo; +} + +interface Props { + ownerDetailData: OwnerDetailData; + onCloseModal: () => void; +} + +const OwnerDetailModal = ({ ownerDetailData, onCloseModal }: Props) => { + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + closeBtn: { onClose: onCloseModal, buttonName: 'Cancel' }, + confirmBtn: { onClose: onCloseModal, buttonName: 'Confirm' } + }); + const [changedExpiredDate, setChangedExpireDate] = useState(ownerDetailData.expiredDate as string); + + // API + const queryClient = useQueryClient(); + const { mutate: patchExpireDate } = useUpdateExpiredDateMutation(); + const { mutate: deleteOwnership } = useDeleteEmoticonOwnershipMutation(); + + // Func + // Datepicker의 날짜 변경 핸들러 + const handleExpireDateChange = (date: Date) => { + const newDate = format(date, 'yyyy-MM-dd'); + + setChangedExpireDate(newDate); + }; + + const handleChangeBtnClick = () => { + setAlertModal({ + isOpen: true, + txt: "Are you sure you want to extend the validity of this user's emoji?", + closeBtn: { + onClose: handleAlertClose, + buttonName: 'Cancel' + }, + confirmBtn: { + onClose: handleExpireDateConfirm, + buttonName: 'Confirm' + } + }); + }; + + // Change 버튼 활성화 이후, Alert Modal confirm 버튼 핸들러 + const handleExpireDateConfirm = () => { + const request = { + guid: ownerDetailData.emoticonCode, + angkorId: ownerDetailData.angkorId as string, + expiredDate: Number(format(parseISO(changedExpiredDate), 'yyyyMMdd')) + }; + + patchExpireDate(request, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['emoticonOwnerList'] }); + setAlertModal((prev) => ({ ...prev, txt: '', isOpen: false })); + onCloseModal(); + toast.success('Expiration date updated.'); + } + }); + }; + + const handleDeleteBtnClick = () => { + setAlertModal({ + isOpen: true, + txt: "Are you sure you want to delete that user's emoji?", + closeBtn: { + onClose: handleAlertClose, + buttonName: 'Cancel' + }, + confirmBtn: { + onClose: handleDeleteConfirm, + buttonName: 'Confirm' + } + }); + }; + + // Delete 버튼 활성화 이후, Alert Modal close 버튼 핸들러 + const handleAlertClose = () => { + setAlertModal((prev) => ({ ...prev, txt: '', isOpen: false })); + }; + + // Delete 버튼 활성화 이후, Alert Modal confirm 버튼 핸들러 + const handleDeleteConfirm = () => { + const request = { + guid: ownerDetailData.emoticonCode, + angkorId: ownerDetailData.angkorId as string + }; + + deleteOwnership(request, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['emoticonOwnerList'] }); + setAlertModal((prev) => ({ ...prev, txt: '', isOpen: false })); + onCloseModal(); + toast.success('Emoticon owner removed'); + } + }); + }; + + return ( +
    + + {alertModal.txt} + +
    Emoticon Owners Details
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Angkor Id{ownerDetailData.angkorId}
    User Id{ownerDetailData.userId}
    Emoticon Code{ownerDetailData.emoticonCode}
    Emoticon Name{ownerDetailData.emoticonName}
    Save Date{ownerDetailData.saveDate}
    Expired Date +
    +
    + ic_chevron_down +
    + +
    + +
    + +
    + + +
    +
    + ); +}; + +export default OwnerDetailModal; diff --git a/src/pages/emoticons/manageEmoticons/ManageEmoticons.module.scss b/src/pages/emoticons/manageEmoticons/ManageEmoticons.module.scss new file mode 100644 index 0000000..7d9abad --- /dev/null +++ b/src/pages/emoticons/manageEmoticons/ManageEmoticons.module.scss @@ -0,0 +1,175 @@ +.manage_emoticons { + .card_header { + display: flex; + justify-content: space-between; + align-items: center; + + .header_box { + display: flex; + gap: 1rem; + } + } +} + +.emoticon_list_table { + width: 100%; + border-top: 1px solid #e6e9f4; + font-size: 12px; + color: #131523; + font-family: pretendard; + table { + width: 100%; + display: flex; + flex-direction: column; + height: 100%; + thead { + border-bottom: 1px solid #e6e9f4; + tr { + width: 100%; + display: flex; + align-items: center; + height: 50px; + th { + display: flex; + justify-content: center; + font-weight: 500; + &.status { + position: relative; + + .status_img, + .open { + img { + transition: transform 0.2s ease-in-out; + width: 20px; + height: 20px; + } + } + .open img { + transform: rotate(180deg); + } + + ul { + &.status_dropdown_menu { + position: absolute; + top: 25px; + left: 50%; + transform: translateX(-50%); + margin: 0px; + box-shadow: 0 1px 4px 0 rgba(21, 34, 50, 0.1); + background: #fff; + border-radius: 0.25rem; + z-index: 10; + + li { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: 400; + color: #131523; + text-align: initial; + white-space: nowrap; + background-color: transparent; + border: 0; + + button { + color: #131523; + border: none; + background-color: #fff; + + i { + width: 10px; + height: 10px; + border-radius: 50%; + display: inline-block; + vertical-align: middle; + margin-right: 10px; + transform: translateY(-1px); + background: #fec702; + + &.all { + background: linear-gradient(126deg, red, orange, yellow, green, blue, navy, purple); + opacity: 0.7; + } + + &.normal, + &.my_status_1 { + background: #21d59b; + } + + &.block, + &.my_status_0 { + background: #f0142f; + } + &.report, + &.my_status_2 { + background: #fec702; + } + + &.withdraw { + background: #c2cad4; + } + } + } + } + } + } + } + } + .btn_sort { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; + background: none; + border: none; + i { + display: flex; + flex-direction: column; + } + } + } + } + + tbody { + overflow-y: scroll; + width: 100%; + &::-webkit-scrollbar { + width: 6px; + height: 6px; + background-color: transparent; + } + &::-webkit-scrollbar-track { + border-radius: 0; + background-color: transparent; + } + &::-webkit-scrollbar-thumb { + border-radius: 9px; + background-color: #a5a7ab; + } + tr { + width: 100%; + display: flex; + border-bottom: 1px solid #e6e9f4; + + td { + display: flex; + align-items: center; + justify-content: center; + padding: 15px 0.5rem; + + i { + width: 10px; + height: 10px; + border-radius: 50%; + display: inline-block; + vertical-align: middle; + margin-right: 10px; + transform: translateY(-1px); + background: #fec702; + } + } + } + } + } +} diff --git a/src/pages/emoticons/manageEmoticons/ManageEmoticons.tsx b/src/pages/emoticons/manageEmoticons/ManageEmoticons.tsx new file mode 100644 index 0000000..cee0199 --- /dev/null +++ b/src/pages/emoticons/manageEmoticons/ManageEmoticons.tsx @@ -0,0 +1,117 @@ +import React, { useState } from 'react'; +import { Card, Col, Row } from 'react-bootstrap'; +import Select, { SingleValue } from 'react-select'; +import classNames from 'classnames/bind'; + +import EmoticonTable from './components/EmoticonTable'; +import EmoticonAddModal from './components/modal/EmoticonAddModal'; +import EmoticonDetailModal from './components/modal/EmoticonDetailModal'; + +import styles from './ManageEmoticons.module.scss'; +import PlusIcon from '@images/icons/ic-plus.svg'; +import { EmoticonListRequest, useEmoticonListQuery } from '@api/emoticonAPI'; +import { SEARCH_FILTER_OPTIONS_EMOTICONS, SearchFilterOption } from '@constants/constants'; +import Modal from '@components/ui/modal/Modal'; +import Button from '@components/ui/button/Button'; + +const cn = classNames.bind(styles); + +interface EmoticonModalInfo { + isOpen: boolean; + modalName: string | null; + emoticonGuid: number; +} + +const ManageEmoticons = () => { + const [modalInfo, setModalInfo] = useState({ + isOpen: false, + modalName: null, + emoticonGuid: 0 + }); + const [emoticonListRequest, setEmoticonListRequest] = useState({ + page: 1, + size: 9, + sort: [], + emotiType: SEARCH_FILTER_OPTIONS_EMOTICONS[1].value + }); + + // API + const { data: emoticonListData } = useEmoticonListQuery(emoticonListRequest); + console.log(emoticonListData); + // Func + // selectBox 옵션 이벤트 + const handleSelectChange = (selectedOption: SingleValue) => { + if (selectedOption) { + setEmoticonListRequest((prev) => ({ ...prev, emotiType: selectedOption.value, page: 1 })); + } + }; + + // modal open 이벤트 + const handleModalOpen = (e: React.MouseEvent) => { + const modalType = e.currentTarget.textContent; + const selectedEmoticonGuid = Number(e.currentTarget.value); + + setModalInfo(() => ({ + isOpen: true, + modalName: modalType, + emoticonGuid: selectedEmoticonGuid + })); + }; + + // modal close 이벤트 + const handleModalClose = () => { + setModalInfo(() => ({ + isOpen: false, + modalName: null, + emoticonGuid: 0 + })); + }; + + return ( + <> + + {modalInfo.modalName === 'Add' && } + {modalInfo.modalName === 'Edit' && ( + + )} + + +
    +

    Manage Emoticons

    + + + + + Emoticon List +
    + + + + + Emoticon Count + + + +
    +
    + + +
    +
    + + + + Status + + + + + + isDefault + + + + + + +
    +
    +
    Short cut
    + help +
    +
      +
    • + + + +

      Active

      +
    • +
    +
    +
    +
    +
    File Upload
    + + +
    +
      + {Children.toArray( + emoticonDetailFiles?.map((item, index) => { + return ( +
    • handleDragStart(e, index)} + onDragEnd={(e) => handleDragEnd(e, index)} + onDragOver={handelDragOver} + draggable + > +
      + + +

      {index + 1}

      +
      +
    • + ); + }) + )} +
    +
    +
    + + +
    + + + ); +}; + +export default EmoticonAddModal; diff --git a/src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.module.scss b/src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.module.scss new file mode 100644 index 0000000..8139a0f --- /dev/null +++ b/src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.module.scss @@ -0,0 +1,165 @@ +//Emoticons modal +.emoticon_detail_modal { + .modal_title { + padding-bottom: 20px; + font-size: 20px; + font-weight: 700; + font-family: pretendard; + border-bottom: 1px solid #e6e9f4; + margin: 0; + } + + table { + tbody { + tr { + font-family: pretendard; + color: #131523; + font-size: 14px; + border-bottom: 1px solid #e6e9f4; + display: flex; + align-items: center; + th { + width: 240px; + height: 50px; + font-weight: 600; + padding: 1.0625rem 0.5rem; + display: block; + } + td { + border-left: 1px solid #e6e9f4; + padding: 15px 0.5rem; + width: 440px; + display: block; + .form_control { + display: block; + width: 100%; + padding: 0.5rem 0.75rem; + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5; + color: #131523; + background-color: #f5f6fa; + background-clip: padding-box; + border: 0 solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0; + } + } + } + } + } +} + +// Short cut +.short_cut_section { + padding-top: 60px; + .section_header { + padding-bottom: 20px; + font-size: 20px; + font-weight: 700; + font-family: pretendard; + border-bottom: 1px solid #e6e9f4; + } + + .section_upload { + display: flex; + flex-wrap: wrap; + -moz-column-gap: 15px; + column-gap: 15px; + row-gap: 10px; + padding-bottom: 1rem; + padding-top: 1rem; + input[type='file'] { + display: none; + } + label { + width: 100px; + height: 100px; + border-radius: 4px; + display: block; + cursor: pointer; + position: relative; + } + P { + font-family: theme-font-family; + text-align: center; + font-size: 20px; + color: #858c97; + } + } +} + +// File Upload +.file_upload_section { + .section_header { + border-bottom: 1px solid #e6e9f4; + padding-bottom: 20px; + font-size: 20px; + font-weight: 700; + font-family: pretendard; + margin: 0; + } + + .section_upload { + display: flex; + flex-wrap: wrap; + -moz-column-gap: 15px; + column-gap: 15px; + row-gap: 10px; + padding-top: 20px; + input[type='file'] { + display: none; + } + label { + width: 100px; + height: 100px; + border-radius: 4px; + display: block; + cursor: pointer; + position: relative; + } + P { + text-align: center; + font-size: 20px; + font-weight: 500; + color: #858c97; + } + } +} + +// footer +.modal_footer { + gap: 10px; + display: flex; + justify-content: end; + width: 100%; + margin-top: 30px; + font-family: pretendard; +} + +/* 그외 */ +.img_no_file { + width: 24px; + height: 24px; + display: block; + position: absolute; + transform: translate(-50%, -50%); + top: 50%; + left: 50%; +} + +.img_has_file { + width: 100px; + height: 100px; +} + +.lable_img_no_file { + width: 100px; + height: 100px; + display: block; + background: #f6f6f8; + border-radius: 4px; + border: 1px dashed #707070; +} diff --git a/src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.tsx b/src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.tsx new file mode 100644 index 0000000..c72592a --- /dev/null +++ b/src/pages/emoticons/manageEmoticons/components/modal/EmoticonDetailModal.tsx @@ -0,0 +1,488 @@ +import React, { Children, useEffect, useRef, useState } from 'react'; +import classNames from 'classnames/bind'; +import { useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; + +import styles from './EmoticonDetailModal.module.scss'; +import PlusIcon from '@icons/ic-plus.svg'; +import { + EmoticonPatchJsonData, + FileDetail, + ReorderFile, + useEmoticonDetailsQuery, + useUpdateEmoticonFileMutation, + useUpdateEmoticonMutation +} from '@api/emoticonAPI'; +import Radio, { RadioOption } from '@components/ui/radio/Radio'; +import { validateImageFileProperties, ValidateImageResponse } from '@utils/fileUtils'; +import AlertModal from '@components/ui/modal/AlertModal'; +import { DEFAULT_TYPE } from '@constants/constants'; +import Button from '@components/ui/button/Button'; + +const cn = classNames.bind(styles); + +interface EmoticonState { + emoticonName: string; + status: number; + statusNm: string; + isDefault: string; +} + +interface Props { + emoticonGuid: number; + onCloseModal: () => void; +} + +const EmoticonDetailsDataModal = ({ emoticonGuid, onCloseModal }: Props) => { + const [modal, setModal] = useState({ + isOpen: false, + txt: '' + }); + const [emoticonState, setEmoticonState] = useState({ + emoticonName: '', + status: 0, + statusNm: '', + isDefault: '' + }); + const [shortCutImageUrl, setShortCutImageUrl] = useState(); // shortCut image URL + const [reorderFiles, setReorderFiles] = useState([]); + const [emoticonDetailFilesUrl, setEmoticonDetailFilesUrl] = useState([]); // files image URL + const [isDataChanged, setIsDataChanged] = useState(false); + const [isApiCalled, setIsApiCalled] = useState(false); + + // Ref + const dropIndexRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { data: emoticonDetailsData } = useEmoticonDetailsQuery(emoticonGuid); + const { mutate: updateEmoticon, isPending: isUpdatingEmoticon } = useUpdateEmoticonMutation(); + const { mutate: updateEmoticonFile } = useUpdateEmoticonFileMutation(); + + // emoticonDetailsData 변경에 따른 emoticonState 초기 값 셋팅. - useEffect + useEffect(() => { + if (emoticonDetailsData) { + setEmoticonState({ + emoticonName: emoticonDetailsData.emoticonName, + status: emoticonDetailsData.status, + statusNm: emoticonDetailsData.status === 0 ? 'OFF' : 'ON', + isDefault: emoticonDetailsData.isDefault + }); + setEmoticonDetailFilesUrl(emoticonDetailsData.detailFile.sort((a, b) => a.dispOrd - b.dispOrd)); + setShortCutImageUrl(emoticonDetailsData.shortCutFile[0].absFilePath); + } + }, [emoticonDetailsData]); + + // detail modal의 detail 이미지를 수정하여 사진 변경 API가 호출 된 상황에, confirm을 누르지 않고 모달 외부를 눌러 언마운트 시켰을 때, query 무효화를 시킨다. - useEffect + useEffect(() => { + document.addEventListener('mousedown', handleModalOutsideClick); + return () => { + document.removeEventListener('mousedown', handleModalOutsideClick); + }; + }, [isApiCalled]); + + // Func + // api requestBody에 쓰일 데이터 타입 체크하는 함수 + const convertToFormData = (requestBody: EmoticonPatchJsonData, formDataBody: File): FormData => { + const formData = new FormData(); + + formData.append( + 'request', + new Blob([JSON.stringify(requestBody)], { + type: 'application/json' + }) + ); + + formData.append('file', formDataBody); + + return formData; + }; + + const handleModalClose = () => { + setModal((prevState) => ({ ...prevState, isOpen: false })); + }; + + const handleModalOutsideClick = (event: MouseEvent) => { + if ((event.target as Element).className === 'black_bg') { + if (isApiCalled) { + queryClient.invalidateQueries({ queryKey: ['emoticonList'] }); + queryClient.invalidateQueries({ queryKey: ['emoticonDetails'] }); + } + onCloseModal(); + } + }; + + const handleEmoticonNameChange = (e: React.ChangeEvent) => { + setEmoticonState((prev) => ({ ...prev, emoticonName: e.target.value })); + setIsDataChanged(true); + }; + + const handleStatusChange = (option: RadioOption) => { + const status = Number(option.id); + setEmoticonState((prev) => ({ ...prev, status: status, statusNm: option.id === '0' ? 'OFF' : 'ON' })); + setIsDataChanged(true); + }; + + const handleIsDefaultChange = (option: RadioOption) => { + const selecteDefaultType = option.id; + setEmoticonState((prev) => ({ ...prev, isDefault: selecteDefaultType })); + setIsDataChanged(true); + }; + + const handleDragStart = (e: React.DragEvent, dropIndex: number) => { + dropIndexRef.current = dropIndex; + }; + + const handelDragOver = (e: React.DragEvent) => { + e.preventDefault(); + }; + + const handleDragEnd = (e: React.DragEvent, dragStartIndex: number) => { + e.preventDefault(); + const dropIndex = dropIndexRef.current; + + if (dropIndex === dragStartIndex || dropIndex === null || dropIndex === undefined) { + return; + } + + const updatedEmoticonDetailFiles: FileDetail[] = JSON.parse(JSON.stringify(emoticonDetailFilesUrl)); + + // emoticonDetailFilesUrl 배열을 drag, drop에 맞게 업데이트 + [updatedEmoticonDetailFiles[dragStartIndex], updatedEmoticonDetailFiles[dropIndex]] = [ + updatedEmoticonDetailFiles[dropIndex], + updatedEmoticonDetailFiles[dragStartIndex] + ]; + + const newReorderFiles = updatedEmoticonDetailFiles + .filter((file) => file.id !== undefined && file.dispOrd !== undefined) + .map((file, index) => ({ + id: file.id as number, + dispOrd: (index + 1) as number + })) + .sort((a, b) => a.id - b.id); + + setReorderFiles(newReorderFiles); + setEmoticonDetailFilesUrl(updatedEmoticonDetailFiles); + setIsDataChanged(true); + + dropIndexRef.current = null; // 참조 초기화 + }; + + const handleShortcutUpload = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + + // 0. image 유무, 조건 + if (!file) { + return; + } + + // 1. image 형식, 조건 + if (file.type !== 'image/png') { + alert('Select the correct file format. (PNG)'); + e.target.value = ''; // 파일 선택 취소 + return; + } + + // 2. image 용량 및 크기 검사 + const imageValidationResult: ValidateImageResponse = await validateImageFileProperties(file, 150 * 1024, 96, 96); + + if (!imageValidationResult.isValid) { + setModal({ + isOpen: true, + txt: imageValidationResult.message || 'Unknown error' + }); + e.target.value = ''; // 파일 선택 취소 + return; + } + + // 파일을 읽어 Base64 인코딩된 데이터 URL로 변환 + const reader = new FileReader(); + reader.readAsDataURL(file); + + reader.onloadend = () => { + const ShortCutImageUrl = reader.result as string; + + if (ShortCutImageUrl) { + const requestBody = { + guid: emoticonGuid, + dispOrd: 0 + }; + const typeCheckedFormData = convertToFormData(requestBody, file); + + setShortCutImageUrl(ShortCutImageUrl); + setIsDataChanged(true); + updateEmoticonFile(typeCheckedFormData, { + onSuccess: () => { + setIsApiCalled(true); + } + }); + } + }; + }; + + const handleDetailFileUpload = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + const selectedImageDispOrd = Number(e.target.dataset.displayOrder); // e.target으로 값에 접근하면 string으로 잡히기에, Number로 변환 + const selectedImageId = Number(e.target.dataset.id); + const selectedImageIndex = Number(e.target.dataset.index); + + let imageValidationResult: ValidateImageResponse = { isValid: false, message: '' }; + const validGifCount = emoticonDetailFilesUrl.length !== 12; + const validPngCount = emoticonDetailFilesUrl.length !== 12; + + // 0. image file 유무, 조건 + if (!file) { + return; + } + + // 1. GIF와 PNG가 아닌 경우, 조건 + if (file.type !== 'image/gif' && file.type !== 'image/png') { + alert('Select the correct file format. (GIF or PNG)'); + e.target.value = ''; // 파일 선택 취소 + return; + } else if (file.type === 'image/gif' && validGifCount) { + // 2. gif 형식 + 사진 갯수 + 그외 이미지 유효 조건들 확인, 조건 + imageValidationResult = await validateImageFileProperties(file, 2 * 1024 * 1024, 360, 360); + } else if (file.type === 'image/png' && validPngCount) { + // 3. png 형식 + 사진 갯수 + 그외 이미지 유효 조건들 확인, 조건 + imageValidationResult = await validateImageFileProperties(file, 150 * 1024, 360, 360); + } + + if (!imageValidationResult.isValid) { + setModal({ + isOpen: true, + txt: imageValidationResult.message || 'Unknown error' + }); + e.target.value = ''; // 파일 선택 취소 + return; + } + + // 위의 모든 이미지 업로드 조건을 통과하면, 이미지 파일의 url을 위의 url state에 동기화한다. + const reader = new FileReader(); + reader.readAsDataURL(file); + + reader.onloadend = () => { + const uploadedEmoticonDetailImagesUrl = reader.result as string; + + if (uploadedEmoticonDetailImagesUrl) { + const requestBody = { + guid: emoticonGuid, + dispOrd: selectedImageDispOrd + }; + + const typeCheckedFormData = convertToFormData(requestBody, file); + + const changeUploadDetailFileUrl = { + id: selectedImageId, + dispOrd: selectedImageDispOrd, + absFilePath: uploadedEmoticonDetailImagesUrl + }; + + // 이미지 미리보기 업데이트용 + setEmoticonDetailFilesUrl((prev) => { + const newState = [...prev]; + newState[selectedImageIndex] = changeUploadDetailFileUrl; + return newState; + }); + + setIsDataChanged(true); + updateEmoticonFile(typeCheckedFormData, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['emoticonList'] }); + setIsApiCalled(true); + } + }); + } + }; + }; + + const handleCancelClick = () => { + if (isApiCalled) { + queryClient.invalidateQueries({ queryKey: ['emoticonList'] }); + queryClient.invalidateQueries({ queryKey: ['emoticonDetails'] }); + onCloseModal(); + } else { + onCloseModal(); + } + }; + + const handleConfirmClick = () => { + // shortCut과 file image만 변경됐을 경우, 조건 ( 이미지 순서 변경 + 그외 이름 등의 사항의 변경은 해당 안 된다.) + if (reorderFiles.length === 0 && !isDataChanged) { + queryClient.invalidateQueries({ queryKey: ['emoticonList'] }); + queryClient.invalidateQueries({ queryKey: ['emoticonDetails'] }); + onCloseModal(); + return; + } + + const request = { + guid: emoticonGuid, + emotiName: emoticonState.emoticonName, + status: emoticonState.status.toString(), + isDefault: emoticonState.isDefault, + reorderFiles: reorderFiles + }; + + updateEmoticon(request, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['emoticonList'] }); + queryClient.invalidateQueries({ queryKey: ['emoticonDetails'] }); + onCloseModal(); + toast.success('The emoticon has been edited.'); + } + }); + }; + + return ( + <> + + {modal.txt} + +
    +
    Register a default Emoticon
    + + + + + + + + + + + + + + + +
    Emoticon Name + +
    Status + +
    isDefault + +
    +
    +
    Short cut
    +
      +
    • + + +

      Active

      +
    • +
    +
    +
    +
    File Upload
    +
      + {Children.toArray( + emoticonDetailFilesUrl?.map((item, index) => ( +
    • handleDragStart(e, index)} + onDragEnd={(e) => handleDragEnd(e, index)} + onDragOver={handelDragOver} + draggable + > +
      + + +

      {index + 1}

      +
      +
    • + )) + )} +
    +
    +
    + + +
    +
    + + ); +}; + +export default EmoticonDetailsDataModal; diff --git a/src/pages/manage/administrator/AdministratorList.tsx b/src/pages/manage/administrator/AdministratorList.tsx new file mode 100644 index 0000000..b98aae8 --- /dev/null +++ b/src/pages/manage/administrator/AdministratorList.tsx @@ -0,0 +1,256 @@ +import { useRef, useState } from 'react'; +import { Card } from 'react-bootstrap'; +import { useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; + +import AdministratorDetailModal from './components/AdministratorDetailModal'; +import AdministratorAddModal from './components/AdministratorAddModal'; + +import PlusImg from '@icons/ic-plus.svg'; +import DeleteImg from '@icons/ic-bin.svg'; +import { useModal } from '@hooks/useModal'; +import { AdminListRequest, useAdminListQuery, useDeleteAdminMutation } from '@api/adminAPI'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Modal from '@components/ui/modal/Modal'; +import TitleLayout from '@layout/TitleLayout'; +import SearchBar from '@components/ui/searchBar/SearchBar'; +import { handleSearchSubmit } from '@utils/searchBoxUtils'; +import Button from '@components/ui/button/Button'; +import Pagination from '@components/ui/pagination/Pagination'; + +const AUTH_CODE = '008'; + +const AdministratorList = () => { + const { isOpen, handleToggleModal } = useModal(); + const [checkItems, setCheckItems] = useState({ id: [] as number[] }); + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + + // 전체선택 핸들러 + const handleAllCheckClick = (checked: HTMLInputElement['checked']) => { + if (checked) { + setCheckItems({ id: adminListData?.content.map((item) => item.id) ?? [] }); + } else { + setCheckItems({ id: [] }); + } + }; + + // 개별선택 핸들러 + const handleSingleCheckClick = (checked: HTMLInputElement['checked'], id: number) => { + if (checked) { + setCheckItems((prevState) => ({ + ...prevState, + id: [...prevState.id, id] + })); + } else { + setCheckItems((prevState) => ({ + ...prevState, + id: checkItems.id.filter((item) => item !== id) + })); + } + }; + + const [id, setId] = useState(0); + const [adminListRequest, setAdminListRequest] = useState({ + page: 1, + size: 10, + sort: [], + searchKeyword: '' + }); + + // Ref + const searchRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { data: authCodeList = [], isLoading: authCodeLoading } = useSimpleCodeListQuery(AUTH_CODE); + const { data: adminListData = null, isLoading: adminListLoading } = useAdminListQuery(adminListRequest); + const { mutate: deleteAdmin, isPending: isDeletingAdmin } = useDeleteAdminMutation(); + + // Func + // Modal event + const handleModalBtnClick = (id?: number) => { + id ? setId(id) : setId(0); + handleToggleModal(true); + }; + + // 삭제 핸들러 + const handleDeleteClick = () => { + deleteAdmin(checkItems, { + onSuccess: () => { + toast.success('Admin has been deleted'); + // setAlertModal((prev) => ({ + // ...prev, + // isOpen: false + // })); + queryClient.invalidateQueries({ queryKey: ['adminList'] }); + } + }); + }; + + return ( + <> + + setAlertModal({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }), + buttonName: 'Close' + }} + {...(alertModal.confirmBtn.isConfirm + ? { confirmBtn: { onClose: () => alertModal.confirmBtn.onConfirmClick(), buttonName: 'Process' } } + : {})} + > + {alertModal.txt} + + handleToggleModal(false)}> + {id > 0 ? ( + handleToggleModal(false)} /> + ) : ( + handleToggleModal(false)} /> + )} + + + + + +
    + Administrator List +
    + handleSearchSubmit(event, searchRef, setAdminListRequest)} + onKeyDown={(event) => handleSearchSubmit(event, searchRef, setAdminListRequest)} + placeholderText="Name, Email, Contact" + /> + +
    +
    +
    + +
    + + + + + + + + + + + + + + + {adminListData?.content.map((admin, idx) => ( + + + + + + + + + + + ))} + +
    +
    + { + handleAllCheckClick(e.target.checked); + }} + checked={checkItems.id.length === adminListData?.content.length} + /> + +
    +
    AdministratorPerson in chargePermissionContactEmailGroup
    +
    + handleSingleCheckClick(e.target.checked, admin.id)} + checked={checkItems.id.includes(admin.id) ? true : false} + /> + +
    +
    {admin.userId}{admin.name} + {authCodeList.map((item) => (item.code === admin.auth ? item.codeName : ''))} + {admin.phone}{admin.email}{admin.groupName} + +
    +
    +
    + +
    +
    + + setAdminListRequest((prevState) => ({ ...prevState, page: pageNumber })) + } + /> +
    +
    +
    +
    +
    +
    + + ); +}; + +export default AdministratorList; diff --git a/src/pages/manage/administrator/components/AdministratorAddModal.tsx b/src/pages/manage/administrator/components/AdministratorAddModal.tsx new file mode 100644 index 0000000..c50a08d --- /dev/null +++ b/src/pages/manage/administrator/components/AdministratorAddModal.tsx @@ -0,0 +1,184 @@ +import Select from 'react-select'; +import { useEffect, useRef, useState } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import { useAdminGroupCodeQuery } from '@api/adminGroupAPI'; +import { AddAdminRequest, useAddAdminMutation } from '@api/adminAPI'; +import { isEmpty } from '@utils/objectUtils'; +import Button from '@components/ui/button/Button'; + +interface Props { + onCloseModal: () => void; +} + +const AUTH_CODE = '008'; + +const AdministratorAddModal = ({ onCloseModal }: Props) => { + const [addAdminRequest, setAddAdminRequest] = useState({ + email: '', + name: '', + phone: '', + grp: '', + auth: '' + }); + + // Ref + const nameRef = useRef(null); + const contactRef = useRef(null); + const emailRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { data: authCodeList } = useSimpleCodeListQuery(AUTH_CODE); + const { data: groupCodeList } = useAdminGroupCodeQuery(); + const { mutate: addAdmin, isPending: isPostingAdmin } = useAddAdminMutation(); + + const groupCodeOptions = + groupCodeList?.map((group) => ({ + label: group.groupName, + value: group.groupCd + })) ?? []; + + const authCodeOptions = + authCodeList?.map((auth) => ({ + label: auth.codeName, + value: auth.code + })) ?? []; + + useEffect(() => { + if (authCodeList && authCodeList.length > 0) { + setAddAdminRequest((prevState) => ({ ...prevState, auth: authCodeList[0].code })); + } + }, [authCodeList]); + + useEffect(() => { + if (groupCodeList && groupCodeList.length > 0) { + setAddAdminRequest((prevState) => ({ ...prevState, grp: groupCodeList[0].groupCd })); + } + }, [groupCodeList]); + + // Func + const handleConfirmClick = () => { + if (addAdminRequest.name === '') { + toast.error('Please enter your name.'); + nameRef.current?.focus(); + + return; + } else if (!/^[\d-]+$/.test(addAdminRequest.phone)) { + toast.error('Please enter your contact.'); + contactRef.current?.focus(); + + return; + } else if (!/^[\w.-]+\w@[\w.-]+\w$/.test(addAdminRequest.email)) { + toast.error('Please enter your email in the correct format.'); + emailRef.current?.focus(); + + return; + } + + addAdmin(addAdminRequest, { + onSuccess: () => { + toast.success('A new Admin has been created.'); + onCloseModal(); + queryClient.invalidateQueries({ queryKey: ['adminList'] }); + queryClient.invalidateQueries({ queryKey: ['adminInfo'] }); + } + }); + }; + + return ( + <> +
    + Add Administrator +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AdministratorAdmin + Number (Auto Create)
    Person in charge + setAddAdminRequest((prevState) => ({ ...prevState, name: e.target.value }))} + placeholder="Name" + disabled={isEmpty(addAdminRequest)} + /> +
    Contact + setAddAdminRequest((prevState) => ({ ...prevState, phone: e.target.value }))} + placeholder="000-0000-0000" + disabled={isEmpty(addAdminRequest)} + /> +
    Email + setAddAdminRequest((prevState) => ({ ...prevState, email: e.target.value }))} + placeholder="AngkorLife@email.com" + disabled={isEmpty(addAdminRequest)} + /> +
    Group +
    Permission +
    +
    +
    + + +
    + + ); +}; + +export default AdministratorAddModal; diff --git a/src/pages/manage/administrator/components/AdministratorDetailModal.tsx b/src/pages/manage/administrator/components/AdministratorDetailModal.tsx new file mode 100644 index 0000000..fb3fafc --- /dev/null +++ b/src/pages/manage/administrator/components/AdministratorDetailModal.tsx @@ -0,0 +1,232 @@ +import Select from 'react-select'; +import { useEffect, useRef, useState } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; +import { UpdateAdminRequest, useAdminInfoQuery, useResetPasswordMutation, useUpdateAdminMutation } from '@api/adminAPI'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import { useAdminGroupCodeQuery } from '@api/adminGroupAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import { isEmpty } from '@utils/objectUtils'; +import Button from '@components/ui/button/Button'; + +interface Props { + id: number; + onCloseModal: () => void; +} + +const AUTH_CODE = '008'; + +const AdministratorDetailModal = ({ id, onCloseModal }: Props) => { + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + isConfirm: false + }); + + const [updateAdminRequest, setUpdateAdminRequest] = useState({ + email: '', + name: '', + phone: '', + grp: '', + auth: '', + id: 0 + }); + + // Ref + const nameRef = useRef(null); + const contactRef = useRef(null); + const emailRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { data: authCodeList } = useSimpleCodeListQuery(AUTH_CODE); + const { data: groupCodeList } = useAdminGroupCodeQuery(); + const { data: adminInfo } = useAdminInfoQuery(id); + const { mutate: updateAdmin, isPending: isUpdatingAdmin } = useUpdateAdminMutation(); + const { mutate: resetPassword, isPending: isResettingPassword } = useResetPasswordMutation(); + + // 변수 + const groupCodeOptions = + groupCodeList?.map((group) => ({ + label: group.groupName, + value: group.groupCd + })) ?? []; + + const authCodeOptions = + authCodeList?.map((auth) => ({ + label: auth.codeName, + value: auth.code + })) ?? []; + + // Func + const handlePasswordReset = () => { + const resetAccount = { + userId: adminInfo?.userId || '', + email: adminInfo?.email + }; + + resetPassword(resetAccount, { + onSuccess: () => { + toast.success('A temporary password has been sent to your e-mail.'); + onCloseModal(); + } + }); + }; + + const handleConfirmClick = () => { + if (updateAdminRequest.name === '') { + toast.error('Please enter your name.'); + nameRef.current?.focus(); + + return; + } else if (!/^[\d-]+$/.test(updateAdminRequest.phone)) { + toast.error('Please enter your contact.'); + contactRef.current?.focus(); + + return; + } else if (!/^[\w.-]+\w@[\w.-]+\w$/.test(updateAdminRequest.email)) { + toast.error('Please enter your email in the correct format.'); + emailRef.current?.focus(); + + return; + } + + updateAdmin(updateAdminRequest, { + onSuccess: () => { + toast.success('Admin has been updated.'); + onCloseModal(); + queryClient.invalidateQueries({ queryKey: ['adminList'] }); + queryClient.invalidateQueries({ queryKey: ['adminInfo'] }); + } + }); + }; + + useEffect(() => { + if (adminInfo && adminInfo !== undefined) { + setUpdateAdminRequest(adminInfo); + } + }, [adminInfo]); + + return ( + <> + onCloseModal(), buttonName: 'Close' }} + disabled={isResettingPassword} + > + {alertModal.txt} + +
    + Edit Administrator +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AdministratorAdmin(임시)
    Person in charge + setUpdateAdminRequest((prevState) => ({ ...prevState, name: e.target.value }))} + placeholder="Name" + disabled={isEmpty(updateAdminRequest)} + /> +
    Contact + setUpdateAdminRequest((prevState) => ({ ...prevState, phone: e.target.value }))} + placeholder="000-0000-0000" + disabled={isEmpty(updateAdminRequest)} + /> +
    Email + setUpdateAdminRequest((prevState) => ({ ...prevState, email: e.target.value }))} + placeholder="AngkorLife@email.com" + disabled={isEmpty(updateAdminRequest)} + /> +
    Group +
    Permission +
    +
    +
    +
    + +
    +
    + + +
    +
    + + ); +}; + +export default AdministratorDetailModal; diff --git a/src/pages/manage/code/Code.tsx b/src/pages/manage/code/Code.tsx new file mode 100644 index 0000000..c7e82c2 --- /dev/null +++ b/src/pages/manage/code/Code.tsx @@ -0,0 +1,36 @@ +import React, { useState } from 'react'; +import { Col, Row } from 'react-bootstrap'; + +import MajorCode from './components/MajorCode'; +import MinorCode from './components/MinorCode'; + +export interface Major { + code: string; + name: string; +} + +const Code: React.FC = () => { + const [major, setMajor] = useState({ code: '', name: '' }); + + return ( +
    +

    Code

    + + + + + + + + +
    + ); +}; + +export default Code; diff --git a/src/pages/manage/code/components/AddCodeModal.tsx b/src/pages/manage/code/components/AddCodeModal.tsx new file mode 100644 index 0000000..0e40813 --- /dev/null +++ b/src/pages/manage/code/components/AddCodeModal.tsx @@ -0,0 +1,196 @@ +import React, { useEffect, useState } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; +import { AddCodeRequest, useAddCodeMutation } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Button from '@components/ui/button/Button'; + +interface Props { + major: { code: string; name: string }; + onClose: () => void; +} + +const AddCodeModal = ({ major, onClose }: Props) => { + const [isSuccess, setIsSuccess] = useState(false); + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '' + }); + const [addMajorRequest, setAddMajorRequest] = useState({ + majorName: '', + codeEn: '', + codeKr: '', + etc: '' + }); + + const queryClient = useQueryClient(); + + const { mutate: addMajor, isPending: isPostingMajor } = useAddCodeMutation(); + + useEffect(() => { + if (major.code !== '') { + setAddMajorRequest((prevState) => ({ ...prevState, major: major.code, majorName: undefined })); + } + }, [major]); + + const handleConfirmClick = () => { + if (addMajorRequest.majorName === '' || addMajorRequest.codeEn === '' || addMajorRequest.codeKr === '') { + setAlertModal({ isOpen: true, txt: 'Please fill the empty form.' }); + return; + } + + addMajor(addMajorRequest, { + onSuccess: () => { + setIsSuccess(true); + queryClient.invalidateQueries({ queryKey: ['codeList'] }); + queryClient.invalidateQueries({ queryKey: ['majorCodeList'] }); + toast.success('Major has been created.'); + onClose(); + }, + onError: (error) => { + setAlertModal({ isOpen: true, txt: error.response?.data.errorMessage as string }); + setIsSuccess(false); + } + }); + }; + + const handleAlertModalClose = () => { + setAlertModal({ isOpen: false, txt: '' }); + + if (isSuccess) { + onClose(); + } + }; + + // etc 이미지 -> base64로 변환 + const handleInsertImg = (e: React.ChangeEvent) => { + const file = e.target.files ? e.target.files[0] : null; + + if (!file) { + return; + } + + const fileReader = new FileReader(); + + fileReader.readAsDataURL(file); + fileReader.onloadend = () => { + const menuIconUrl = fileReader.result?.toString(); + + if (menuIconUrl) { + setAddMajorRequest((prevState) => ({ + ...prevState, + etc: menuIconUrl + })); + } + fileReader.onloadend = null; + }; + }; + + return ( + <> + handleAlertModalClose(), + buttonName: 'Close' + }} + > + {alertModal.txt} + +
    + Add Code +
    +
    + + + + + + + + + + + + + + + + + + + +
    Major Name + {major.code === '' ? ( + + setAddMajorRequest((prevState) => ({ + ...prevState, + majorName: e.target.value + })) + } + placeholder="Enter a major name." + /> + ) : ( + major.name + )} +
    Code Eng + + setAddMajorRequest((prevState) => ({ + ...prevState, + codeEn: e.target.value + })) + } + placeholder="Enter a major name(eng)." + /> +
    Code Kmer + + setAddMajorRequest((prevState) => ({ + ...prevState, + codeKr: e.target.value + })) + } + placeholder="Enter a major name(kmer)." + /> +
    Etc. (Optional) + + setAddMajorRequest((prevState) => ({ + ...prevState, + etc: e.target.value + })) + } + placeholder="Enter additional contents." + /> + {major.code.includes('005') && ( +
    + + +
    + )} +
    +
    +
    + + +
    + + ); +}; + +export default AddCodeModal; diff --git a/src/pages/manage/code/components/DetailCodeModal.tsx b/src/pages/manage/code/components/DetailCodeModal.tsx new file mode 100644 index 0000000..2000f30 --- /dev/null +++ b/src/pages/manage/code/components/DetailCodeModal.tsx @@ -0,0 +1,241 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; + +import DeleteIcon from '@icons/ic-bin.svg'; +import { toast } from 'react-toastify'; +import { UpdateCodeRequest, useDeleteCodeMutation, useUpdateCodeMutation } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Button from '@components/ui/button/Button'; + +interface Props { + code: { code: string; codeEn: string; codeKr: string; etc: string }; + onClose: () => void; +} + +const DetailCodeModal = ({ code, onClose }: Props) => { + const [isSuccess, setIsSuccess] = useState(false); + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + isConfirm: false + }); + const [updateMajorRequest, setUpdateMajorRequest] = useState({ + data: { + codeEn: '', + codeKr: '', + etc: '' + }, + path: '' + }); + + // Ref + const codeEngRef = useRef(null); + const codeKrRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { mutate: updateCode, isPending: isUpdatingCode } = useUpdateCodeMutation(); + const { mutate: deleteCode, isPending: isDeletingCode } = useDeleteCodeMutation(); + + useEffect(() => { + if (code) { + setUpdateMajorRequest({ + data: { + codeEn: code.codeEn, + codeKr: code.codeKr, + etc: code.etc + }, + path: code.code + }); + } + }, [code]); + + const handleConfirmClick = () => { + if (!codeEngRef.current?.value.trim() || !codeKrRef.current?.value.trim()) { + toast.error('Both codes are required.'); + return; + } + + updateCode(updateMajorRequest, { + onSuccess: () => { + setIsSuccess(true); + queryClient.invalidateQueries({ queryKey: ['codeList'] }); + queryClient.invalidateQueries({ queryKey: ['majorCodeList'] }); + toast.success('Code has been updated.'); + onClose(); + }, + onError: (error) => { + setAlertModal({ isOpen: true, txt: error.response?.data.errorMessage as string, isConfirm: false }); + setIsSuccess(false); + } + }); + }; + + const handleDeleteClick = () => { + deleteCode(code.code, { + onSuccess: () => { + toast.success('Code has been deleted.'); + onClose(); + setIsSuccess(true); + queryClient.invalidateQueries({ queryKey: ['codeList'] }); + queryClient.invalidateQueries({ queryKey: ['majorCodeList'] }); + }, + onError: (error) => { + setAlertModal({ isOpen: true, txt: error.response?.data.errorMessage as string, isConfirm: false }); + setIsSuccess(false); + } + }); + }; + + const handleAlertModalClose = () => { + setAlertModal({ isOpen: false, txt: '', isConfirm: false }); + + if (isSuccess) { + queryClient.invalidateQueries({ queryKey: ['codeList'] }); + onClose(); + } + }; + + const handleInsertImg = (e: React.ChangeEvent) => { + const file = e.target.files ? e.target.files[0] : null; + + if (!file) { + return; + } + + const fileReader = new FileReader(); + fileReader.readAsDataURL(file); + fileReader.onloadend = () => { + const menuIconUrl = fileReader.result?.toString(); + + if (menuIconUrl) { + setUpdateMajorRequest((prevState) => ({ + ...prevState, + data: { + ...prevState.data, + etc: menuIconUrl + } + })); + } + fileReader.onloadend = null; + }; + }; + + return ( + <> + + {alertModal.txt} + +
    + Edit Code +
    +
    + + + + + + + + + + + + + + + + + + + +
    Code{code.code}
    Code Eng + { + setUpdateMajorRequest((prevState) => ({ + ...prevState, + data: { + ...prevState.data, + codeEn: e.target.value + } + })); + }} + placeholder="Enter a code name (eng)." + /> +
    Code Kr + + setUpdateMajorRequest((prevState) => ({ + ...prevState, + data: { + ...prevState.data, + codeKr: e.target.value + } + })) + } + placeholder="Enter a code name (kr)." + /> +
    Etc. (Optional) + + setUpdateMajorRequest((prevState) => ({ + ...prevState, + data: { + ...prevState.data, + etc: e.target.value + } + })) + } + placeholder="Enter text or add an image." + /> + {code.code.startsWith('005') && ( +
    + + +
    + )} +
    +
    +
    +
    + +
    +
    + + +
    +
    + + ); +}; + +export default DetailCodeModal; diff --git a/src/pages/manage/code/components/MajorCode.tsx b/src/pages/manage/code/components/MajorCode.tsx new file mode 100644 index 0000000..d60f6c9 --- /dev/null +++ b/src/pages/manage/code/components/MajorCode.tsx @@ -0,0 +1,189 @@ +import React, { Dispatch, SetStateAction, useRef, useState } from 'react'; +import { Card } from 'react-bootstrap'; + +import { Major } from '../Code'; +import MajorNameModal from './MajorNameModal'; +import AddCodeModal from './AddCodeModal'; + +import PlusImg from '@icons/ic-plus.svg'; +import { MajorCodeListRequest, useMajorCodeListQuery } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Modal from '@components/ui/modal/Modal'; +import SearchBar from '@components/ui/searchBar/SearchBar'; +import { handleSearchSubmit } from '@utils/searchBoxUtils'; +import Button from '@components/ui/button/Button'; +import Pagination from '@components/ui/pagination/Pagination'; + +interface Props { + setMajorCode: Dispatch>; +} + +const MajorCode = ({ setMajorCode }: Props) => { + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + const [modalInfo, setModalInfo] = useState({ + isOpen: false, + modalName: '', + code: '', + name: '' + }); + const [codeListRequest, setCodeListRequest] = useState({ + page: 1, + size: 10, + sort: [], + searchKeyword: '' + }); + + const searchRef = useRef(null); + + const { data: majorList, isLoading: majorLoading, refetch: majorRefetch } = useMajorCodeListQuery(codeListRequest); + + // Minors event + const handleMinorsClick = (e: React.MouseEvent) => { + const majorCode = e.currentTarget.value; + const majorName = e.currentTarget.name; + + setMajorCode({ code: majorCode, name: majorName }); + }; + + if (majorLoading) { + return null; + } + + return ( + <> + + setAlertModal({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }), + buttonName: 'Close' + }} + {...(alertModal.confirmBtn.isConfirm + ? { confirmBtn: { onClose: () => alertModal.confirmBtn.onConfirmClick(), buttonName: 'Confirm' } } + : {})} + > + {alertModal.txt} + + setModalInfo({ isOpen: false, modalName: '', code: '', name: '' })} + > + {modalInfo.modalName === 'major' ? ( + setModalInfo({ isOpen: false, modalName: '', code: '', name: '' })} + majorListRefetch={majorRefetch} + /> + ) : ( + setModalInfo({ isOpen: false, modalName: '', code: '', name: '' })} + /> + )} + + + +
    + + Code List + > + Major Code + +
    + handleSearchSubmit(event, searchRef, setCodeListRequest)} + onKeyDown={(event) => handleSearchSubmit(event, searchRef, setCodeListRequest)} + placeholderText="Major Name" + /> + +
    +
    +
    + +
    + + + + + + + + + + {majorList?.content.map((item, idx) => ( + + + + + + ))} + +
    Major CodeMajor Name
    {item.major}{item.majorName} + + +
    +
    + + setCodeListRequest((prevState) => ({ ...prevState, page: pageNumber })) + } + /> +
    +
    +
    +
    + + ); +}; + +export default MajorCode; diff --git a/src/pages/manage/code/components/MajorNameModal.tsx b/src/pages/manage/code/components/MajorNameModal.tsx new file mode 100644 index 0000000..7140f2e --- /dev/null +++ b/src/pages/manage/code/components/MajorNameModal.tsx @@ -0,0 +1,111 @@ +import React, { useState } from 'react'; +import { QueryObserverResult, useQueryClient } from '@tanstack/react-query'; + +import { toast } from 'react-toastify'; +import { Page } from 'src/services/commonResponse/PageResponse'; +import { MajorCodeListResponse, UpdateMajorNameRequest, useUpdateMajorNameMutation } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import { isEmpty } from '@utils/objectUtils'; +import Button from '@components/ui/button/Button'; + +interface Props { + major: { code: string; name: string }; + onClose: () => void; + majorListRefetch: () => Promise, Error>>; +} + +const MajorNameModal = ({ major, onClose, majorListRefetch }: Props) => { + const [updateSuccess, setUpdateSuccess] = useState(false); + const [modal, setModal] = useState({ + isOpen: false, + txt: '' + }); + const [updateMajorNameRequest, setUpdateMajorNameRequest] = useState({ + data: { + codeValue: major.name + }, + path: major.code + }); + + // API + const queryClient = useQueryClient(); + const { mutate: updateMajorName, isPending: isUpdatingMajorName } = useUpdateMajorNameMutation(); + + const handleConfirmClick = () => { + updateMajorName(updateMajorNameRequest, { + onSuccess: () => { + toast.success('Major name has been updated.'); + onClose(); + setUpdateSuccess(true); + queryClient.invalidateQueries({ queryKey: ['majorCodeList'] }); + }, + onError: (error) => { + setModal({ isOpen: true, txt: error.response?.data.errorMessage as string }); + setUpdateSuccess(false); + } + }); + }; + + const handleAlertModalClose = () => { + setModal({ isOpen: false, txt: '' }); + + if (updateSuccess) { + majorListRefetch(); + onClose(); + } + }; + + return ( + <> + handleAlertModalClose(), + buttonName: 'Close' + }} + > + {modal.txt} + +
    + Major Name +
    +
    + + + + + + + + + + + +
    Major Code{major.code}
    Major Name + + setUpdateMajorNameRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, codeValue: e.target.value } + })) + } + readOnly={isEmpty(updateMajorNameRequest.data)} + /> +
    +
    +
    + + +
    + + ); +}; + +export default MajorNameModal; diff --git a/src/pages/manage/code/components/MinorCode.tsx b/src/pages/manage/code/components/MinorCode.tsx new file mode 100644 index 0000000..0a13191 --- /dev/null +++ b/src/pages/manage/code/components/MinorCode.tsx @@ -0,0 +1,236 @@ +import React, { Dispatch, SetStateAction, useEffect, useRef, useState } from 'react'; +import { Card } from 'react-bootstrap'; + +import AddCodeModal from './AddCodeModal'; +import DetailCodeModal from './DetailCodeModal'; +import { Major } from '../Code'; + +import prevImg from '@icons/chevron-left.svg'; +import plusImg from '@icons/ic-plus.svg'; +import { CodeListRequest, useCodeListQuery } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Modal from '@components/ui/modal/Modal'; +import SearchBar from '@components/ui/searchBar/SearchBar'; +import Button from '@components/ui/button/Button'; +import Pagination from '@components/ui/pagination/Pagination'; + +interface Props { + major: Major; + setMajor: Dispatch>; +} + +interface ModalInfo { + isOpen?: boolean; + modalName: string; + code: string; + codeEn?: string; + codeKr?: string; + etc?: string; +} + +const MinorCode = ({ major, setMajor }: Props) => { + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + const [modalInfo, setModalInfo] = useState({ + isOpen: false, + modalName: '', + code: '' + }); + const [codeListRequest, setCodeListRequest] = useState({ + params: { + page: 1, + size: 10, + sort: [], + searchKeyword: '' + }, + path: '' + }); + + const searchRef = useRef(null); + + const { data: codeList, isLoading: codeLoading } = useCodeListQuery(codeListRequest); + + useEffect(() => { + if (major.code !== '') { + setCodeListRequest((prevState) => ({ + ...prevState, + path: major.code + })); + } + }, [major]); + + // 검색 이벤트 + const handleSearchSubmit = (event: React.MouseEvent | React.KeyboardEvent) => { + if ( + event.type === 'click' || + (event.type === 'keydown' && (event as React.KeyboardEvent).key === 'Enter') + ) { + event.preventDefault(); + setCodeListRequest((prevState) => ({ + ...prevState, + params: { + ...prevState.params, + searchKeyword: searchRef.current?.value.trim() || '', + page: 1 + } + })); + } + }; + + const handlePrevClick = () => { + setMajor({ code: '', name: '' }); + }; + + if (codeLoading) { + return null; + } + + return ( + <> + + setAlertModal({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }), + buttonName: 'Close' + }} + {...(alertModal.confirmBtn.isConfirm + ? { confirmBtn: { onClose: () => alertModal.confirmBtn.onConfirmClick(), buttonName: 'Confirm' } } + : {})} + > + {alertModal.txt} + + setModalInfo({ modalName: '', code: '' })}> + {modalInfo.modalName === 'add' ? ( + setModalInfo({ modalName: '', code: '' })} + /> + ) : ( + setModalInfo({ modalName: '', code: '' })} + /> + )} + + + +
    + + + Major Code ({major.name})> + Minor Code + +
    + + +
    +
    +
    + +
    + + + + + + + + + + + + {codeList?.content.map((item, idx) => ( + + + + + + + + ))} + +
    CodeCode EngCode Kmeretc
    {item.code}{item.codeEn}{item.codeKr} + {item.etc.startsWith('data:image') ? ( + {item.codeEn} + ) : ( + item.etc + )} + + +
    +
    + + setCodeListRequest((prevState) => ({ + ...prevState, + params: { ...prevState.params, page: pageNumber } + })) + } + /> +
    +
    +
    +
    + + ); +}; + +export default MinorCode; diff --git a/src/pages/manage/group/Group.tsx b/src/pages/manage/group/Group.tsx new file mode 100644 index 0000000..3745546 --- /dev/null +++ b/src/pages/manage/group/Group.tsx @@ -0,0 +1,269 @@ +import React, { useRef, useState } from 'react'; +import { Card, Col, Row } from 'react-bootstrap'; +import GroupDetailModal from './components/GroupDetailModal'; +import GroupAddModal from './components/GroupAddModal'; +import plusImg from '@icons/ic-plus.svg'; +import deleteImg from '@icons/ic-bin.svg'; +import { toast } from 'react-toastify'; +import { AdminGroupListRequest, useAdminGroupListQuery, useDeleteAdminGroupMutation } from '@api/adminGroupAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Modal from '@components/ui/modal/Modal'; +import SearchBar from '@components/ui/searchBar/SearchBar'; +import Button from '@components/ui/button/Button'; +import Pagination from '@components/ui/pagination/Pagination'; + +const Group = () => { + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + const [isModalOpen, setIsModalOpen] = useState(false); + const [groupCd, setGroupCd] = useState(''); + const [checkItems, setCheckItems] = useState({ groupCd: [] as string[] }); + const [groupListRequest, setGroupListRequest] = useState({ + page: 1, + size: 10, + sort: [], + searchKeyword: '' + }); + + const searchRef = useRef(null); + + const { data: groupList = null, refetch: groupListRefetch } = useAdminGroupListQuery(groupListRequest); + const { mutate: deleteGroup, isPending: isDeletingGroup } = useDeleteAdminGroupMutation(); + + // Modal event + const handleModalBtnClick = (groupCd?: string) => { + groupCd ? setGroupCd(groupCd) : setGroupCd(''); + + setIsModalOpen(true); + }; + + // Search event + const handleSearch = () => { + setGroupListRequest((prevState) => ({ + ...prevState, + page: 0 + })); + + groupListRefetch(); + }; + + // CheckBox check event + const handleAllCheckClick = (checked: HTMLInputElement['checked']) => { + if (checked) { + setCheckItems((prevState) => ({ + ...prevState, + groupCd: [...prevState.groupCd, ...(groupList?.content.map((item) => item.groupCd) ?? [])] + })); + } else { + setCheckItems({ groupCd: [] }); + } + }; + + const handleSingleCheckClick = (checked: HTMLInputElement['checked'], groupCd: string) => { + if (checked) { + setCheckItems((prevState) => ({ + ...prevState, + groupCd: [...prevState.groupCd, groupCd] + })); + } else { + setCheckItems((prevState) => ({ + ...prevState, + groupCd: checkItems.groupCd.filter((item) => item !== groupCd) + })); + } + }; + + // Delete event + const handleDeleteClick = () => { + deleteGroup(checkItems, { + onSuccess: () => { + toast.success('Admin Group has been deleted'); + setAlertModal({ + isOpen: false, + txt: 'Admin Group has been deleted', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => null + } + }); + + groupListRefetch(); + }, + onError: (error) => { + setAlertModal({ + isOpen: true, + txt: error.response?.data.errorMessage as string, + confirmBtn: { + isConfirm: false, + onConfirmClick: () => null + } + }); + } + }); + }; + + return ( + <> + + setAlertModal({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }), + buttonName: 'Close' + }} + {...(alertModal.confirmBtn.isConfirm + ? { confirmBtn: { onClose: () => alertModal.confirmBtn.onConfirmClick(), buttonName: 'Process' } } + : {})} + > + {alertModal.txt} + + setIsModalOpen(false)}> + {groupCd === '' ? ( + setIsModalOpen(false)} groupListRefetch={groupListRefetch} /> + ) : ( + setIsModalOpen(false)} + groupListRefetch={groupListRefetch} + /> + )} + +
    +

    Group

    + + + + +
    + Group List +
    + groupListRefetch()} + onKeyDown={(e) => { + e.preventDefault(); + handleSearch(); + }} + placeholderText="Group Name" + /> +
    + +
    +
    +
    +
    + +
    + + + + + + + + + + + {groupList?.content.map((group, idx) => ( + + + + + + + ))} + +
    +
    + handleAllCheckClick(e.target.checked)} + checked={checkItems.groupCd.length === groupList?.content.length ? true : false} + /> + +
    +
    Group NameMembers
    +
    + handleSingleCheckClick(e.target.checked, group.groupCd)} + checked={checkItems.groupCd.includes(group.groupCd) ? true : false} + /> + +
    +
    {group.groupName}{group.members} + +
    +
    +
    + +
    +
    + + setGroupListRequest((prevState) => ({ ...prevState, page: pageNumber })) + } + /> +
    +
    +
    +
    +
    + +
    +
    + + ); +}; + +export default Group; diff --git a/src/pages/manage/group/components/GroupAddModal.tsx b/src/pages/manage/group/components/GroupAddModal.tsx new file mode 100644 index 0000000..b62e780 --- /dev/null +++ b/src/pages/manage/group/components/GroupAddModal.tsx @@ -0,0 +1,99 @@ +import { useRef, useState } from 'react'; +import { QueryObserverResult, useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; +import { AddAdminGroupRequest, AdminGroupListResponse, useAddAdminGroupMutation } from '@api/adminGroupAPI'; +import { Page } from 'src/services/commonResponse/PageResponse'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Button from '@components/ui/button/Button'; + +interface Props { + onCloseModal: () => void; + groupListRefetch: () => Promise, Error>>; +} + +const GroupAddModal = ({ onCloseModal, groupListRefetch }: Props) => { + const [addSuccess, setAddSuccess] = useState(false); + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '' + }); + const [addGroupRequest, setAddGroupRequest] = useState({ + groupName: '' + }); + + // Ref + const groupNameRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { mutate: addGroup, isPending: isPostingGroup } = useAddAdminGroupMutation(); + + const handleConfirmClick = () => { + if (addGroupRequest.groupName === '') { + toast.error('Please enter group name.'); + groupNameRef.current?.focus(); + return; + } + + addGroup(addGroupRequest, { + onSuccess: () => { + toast.success('A new admin group has been created.'); + queryClient.invalidateQueries({ queryKey: ['adminGroupList'] }); + onCloseModal(); + setAddSuccess(true); + }, + onError: (error) => { + setAlertModal({ isOpen: true, txt: error.response?.data.errorMessage as string }); + setAddSuccess(false); + } + }); + }; + + const handleAlertModalClose = () => { + setAlertModal({ isOpen: false, txt: '' }); + + if (addSuccess) { + groupListRefetch(); + onCloseModal(); + } + }; + + return ( + <> + handleAlertModalClose(), buttonName: 'Close' }}> + {alertModal.txt} + +
    + Add Group +
    +
    + + + + + + + +
    Group Name + setAddGroupRequest((prevState) => ({ ...prevState, groupName: e.target.value }))} + placeholder="Group Name" + /> +
    +
    +
    + + +
    + + ); +}; + +export default GroupAddModal; diff --git a/src/pages/manage/group/components/GroupDetailModal.tsx b/src/pages/manage/group/components/GroupDetailModal.tsx new file mode 100644 index 0000000..dbe1d84 --- /dev/null +++ b/src/pages/manage/group/components/GroupDetailModal.tsx @@ -0,0 +1,122 @@ +import React, { useRef, useState } from 'react'; +import { QueryObserverResult, useQueryClient } from '@tanstack/react-query'; + +import { toast } from 'react-toastify'; +import { + AdminGroupListResponse, + UpdateAdminGroupRequest, + useAdminGroupInfoQuery, + useUpdateAdminGroupMutation +} from '@api/adminGroupAPI'; +import { Page } from 'src/services/commonResponse/PageResponse'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Button from '@components/ui/button/Button'; + +interface Props { + groupCd: string; + onCloseModal: () => void; + groupListRefetch: () => Promise, Error>>; +} + +const GroupDetailModal = ({ groupCd, onCloseModal, groupListRefetch }: Props) => { + const [addSuccess, setAddSuccess] = useState(false); + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '' + }); + const [updateGroupRequest, setUpdateGroupRequest] = useState({ + groupCd: '', + groupName: '' + }); + + // Ref + const groupNameRef = useRef(null); + + // API + const queryClient = useQueryClient(); + const { data: groupInfo } = useAdminGroupInfoQuery(groupCd); + const { mutate: updateGroup, isPending: isUpdatingGroup } = useUpdateAdminGroupMutation(); + + const handleConfirmClick = () => { + if (updateGroupRequest.groupName === '') { + toast.error('Please enter group name.'); + groupNameRef.current?.focus(); + return; + } + + updateGroup(updateGroupRequest, { + onSuccess: () => { + toast.success('Admin group has been updated.'); + onCloseModal(); + setAddSuccess(true); + groupListRefetch(); + }, + onError: () => { + setAddSuccess(false); + } + }); + }; + + const handleAlertModalClose = () => { + setAlertModal({ isOpen: false, txt: '' }); + + if (addSuccess) { + groupListRefetch(); + onCloseModal(); + } + }; + + return ( + <> + handleAlertModalClose(), buttonName: 'Close' }}> + {alertModal.txt} + +
    + Edit Group +
    +
    + + + + + + + + + + + + + + + +
    Group Name + + setUpdateGroupRequest((prevState) => ({ + ...prevState, + groupCd: e.target.value, + groupName: 'bbbbbbbbb' + })) + } + placeholder="Group Name" + /> +
    Members{groupInfo?.members}
    Create Date{groupInfo?.createDt}
    +
    +
    + + +
    + + ); +}; + +export default GroupDetailModal; diff --git a/src/pages/manage/menu/Menu.tsx b/src/pages/manage/menu/Menu.tsx new file mode 100644 index 0000000..68cca95 --- /dev/null +++ b/src/pages/manage/menu/Menu.tsx @@ -0,0 +1,51 @@ +import React, { useEffect, useState } from 'react'; +import { useLocation } from 'react-router-dom'; +import { Col, Row } from 'react-bootstrap'; + +import TopMenu from './components/TopMenu'; +import SubMenu from './components/SubMenu'; + +export interface TopMenuInfo { + id: number; + name: string; +} + +const Menu: React.FC = () => { + const [topMenuInfo, setTopMenuInfo] = useState({ id: 0, name: '' }); + const location = useLocation(); + + useEffect(() => { + const searchParams = new URLSearchParams(location.search); + const newId = searchParams.get('id'); + const newName = searchParams.get('name'); + setTopMenuInfo((prevState) => ({ + ...prevState, + id: newId ? parseInt(newId, 10) : 0, + name: newName || '' + })); + }, [location.search]); + + return ( +
    +

    Menu

    c + + {topMenuInfo.id === 0 && ( +
    + + + +
    + )} + {topMenuInfo.id !== 0 && ( +
    + + + +
    + )} +
    +
    + ); +}; + +export default Menu; diff --git a/src/pages/manage/menu/components/MenuAddModal.tsx b/src/pages/manage/menu/components/MenuAddModal.tsx new file mode 100644 index 0000000..cdfacea --- /dev/null +++ b/src/pages/manage/menu/components/MenuAddModal.tsx @@ -0,0 +1,212 @@ +import React, { useState } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; + +import { toast } from 'react-toastify'; +import { AddMenuRequest, useAddMenuMutation } from '@api/menuAPI'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import Radio, { RadioOption } from '@components/ui/radio/Radio'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Button from '@components/ui/button/Button'; + +interface Props { + id?: number; + onClose: () => void; + isTopMenu: boolean; +} + +const MenuAddModal = ({ id, onClose, isTopMenu }: Props) => { + const [addSuccess, setAddSuccess] = useState(false); + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '' + }); + + const [addMenuRequest, setAddMenuRequest] = useState({ + topId: id ?? 0, + menuName: '', + menuLink: '', + menuFolder: '', + menuFile: '', + menuIcon: '', + levels: [] + }); + + const code = process.env.REACT_APP_CODE as string; + + // API + const queryClient = useQueryClient(); + const { data: authCodeList, isLoading: isAuthCodeLoading } = useSimpleCodeListQuery('008'); + const { mutate: addMenu, isPending: isPostingMenu } = useAddMenuMutation(); + + // Func + const handleConfirmClick = () => { + addMenu(addMenuRequest, { + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['menuTopList'] }); + queryClient.invalidateQueries({ queryKey: ['menuSubList'] }); + toast.success('A new menu has been created.'); + onClose(); + setAddSuccess(true); + }, + onError: () => { + setAddSuccess(false); + } + }); + }; + + const handleAlertModalClose = () => { + setAlertModal({ isOpen: false, txt: '' }); + + if (addSuccess) { + queryClient.invalidateQueries({ queryKey: ['menuSubList'] }); + queryClient.invalidateQueries({ queryKey: ['menuTopList'] }); + onClose(); + } + }; + + const handleRadioCheck = (option: RadioOption, code: string) => { + if (option.id.includes('Y')) { + setAddMenuRequest((prevState) => ({ ...prevState, levels: [...prevState.levels, code] })); + } else { + setAddMenuRequest((prevState) => ({ ...prevState, levels: prevState.levels.filter((item) => item !== code) })); + } + }; + + const handleInsertImg = (e: React.ChangeEvent) => { + const file = e.target.files ? e.target.files[0] : null; + + if (!file) { + return; + } + + const fileReader = new FileReader(); + + fileReader.readAsDataURL(file); + fileReader.onloadend = () => { + const menuIconUrl = fileReader.result?.toString(); + + if (menuIconUrl) { + setAddMenuRequest((prevState) => ({ ...prevState, menuIcon: menuIconUrl })); + e.target.value = ''; + } + fileReader.onloadend = null; + }; + }; + + if (isAuthCodeLoading) { + return null; + } + + return ( + <> + handleAlertModalClose(), + buttonName: 'Close' + }} + > + {alertModal.txt} + +
    + Manage Menu Add +
    +
    + + + + + + + + + + + + + + + + + + + {isTopMenu && ( + + + + + )} + {authCodeList?.map((item, index) => ( + + + + + ))} + +
    Menu Name + setAddMenuRequest((prevState) => ({ ...prevState, menuName: e.target.value }))} + placeholder="Enter a menu name" + /> +
    Menu Link + setAddMenuRequest((prevState) => ({ ...prevState, menuLink: e.target.value }))} + placeholder="Enter a menu link" + /> +
    Menu Folder + setAddMenuRequest((prevState) => ({ ...prevState, menuFolder: e.target.value }))} + placeholder="Enter a menu folder" + /> +
    Menu File + setAddMenuRequest((prevState) => ({ ...prevState, menuFile: e.target.value }))} + placeholder="Enter a menu file" + /> +
    Menu Icon + setAddMenuRequest((prevState) => ({ ...prevState, menuIcon: e.target.value }))} + placeholder="Enter a menu icon" + /> +
    + + handleInsertImg(e)} /> +
    +
    {item.codeName} +
    + handleRadioCheck(option, item.code)} + /> +
    +
    +
    +
    + + +
    + + ); +}; + +export default MenuAddModal; diff --git a/src/pages/manage/menu/components/MenuDetailModal.tsx b/src/pages/manage/menu/components/MenuDetailModal.tsx new file mode 100644 index 0000000..ea6975b --- /dev/null +++ b/src/pages/manage/menu/components/MenuDetailModal.tsx @@ -0,0 +1,282 @@ +import React, { useState, useEffect } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; + +import { toast } from 'react-toastify'; +import { UpdateMenuRequest, useMenuDetailQuery, useUpdateMenuMutation } from '@api/menuAPI'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import Radio, { RadioOption } from '@components/ui/radio/Radio'; +import AlertModal from '@components/ui/modal/AlertModal'; +import { isEmpty } from '@utils/objectUtils'; +import Button from '@components/ui/button/Button'; + +interface Props { + id: number; + onClose: () => void; + isTopMenu: boolean; +} + +const MenuDetailModal = ({ id, onClose, isTopMenu }: Props) => { + const [updateSuccess, setUpdateSuccess] = useState(false); + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '' + }); + const [updateMenuRequest, setUpdateMenuRequest] = useState({ + data: { + menuName: '', + menuLink: '', + menuFolder: '', + menuFile: '', + menuIcon: '', + levels: [] + }, + path: id + }); + + const code = process.env.REACT_APP_CODE as string; + + const queryClient = useQueryClient(); + + const { mutate: updateMenu, isPending: isUpdateingMenu } = useUpdateMenuMutation(); + const { data: menuDetail } = useMenuDetailQuery(id); + const { data: authCodeList } = useSimpleCodeListQuery('008'); + + useEffect(() => { + if (menuDetail) { + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { + menuName: menuDetail.menuName, + menuLink: menuDetail.menuLink, + menuFolder: menuDetail.menuFolder, + menuFile: menuDetail.menuFile, + menuIcon: menuDetail.menuIcon, + levels: menuDetail.levels + } + })); + } + }, [menuDetail]); + + const handleProcessClick = () => { + updateMenu(updateMenuRequest, { + onSuccess: () => { + toast.success('A menu has been updated.'); + onClose(); + setUpdateSuccess(true); + queryClient.invalidateQueries({ queryKey: ['menuTopList'] }); + queryClient.invalidateQueries({ queryKey: ['menuSubList'] }); + }, + onError: (error) => { + setAlertModal({ isOpen: true, txt: error.response?.data.errorMessage as string }); + setUpdateSuccess(false); + } + }); + }; + + const handleAlertModalClose = () => { + setAlertModal({ isOpen: false, txt: '' }); + + if (updateSuccess) { + queryClient.invalidateQueries({ queryKey: ['menuPrivacy'] }); + queryClient.invalidateQueries({ queryKey: ['menuDetail'] }); + + if (isTopMenu) { + queryClient.invalidateQueries({ queryKey: ['menuTopList'] }); + } else { + queryClient.invalidateQueries({ queryKey: ['menuSubList'] }); + } + onClose(); + } + }; + + const handleRadioCheck = (option: RadioOption, code: string) => { + if (option.id.includes('Y')) { + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, levels: [...prevState.data.levels, code] } + })); + } else { + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, levels: prevState.data.levels.filter((item) => item !== code) } + })); + } + }; + + const handleInsertImg = (e: React.ChangeEvent) => { + const file = e.target.files ? e.target.files[0] : null; + + if (!file) { + return; + } + + const fileReader = new FileReader(); + + fileReader.readAsDataURL(file); + fileReader.onloadend = () => { + const menuIconUrl = fileReader.result?.toString(); + + if (menuIconUrl) { + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, menuIcon: menuIconUrl } + })); + } + fileReader.onloadend = null; + }; + }; + + return ( + <> + handleAlertModalClose(), + buttonName: 'Close' + }} + > + {alertModal.txt} + +
    + Menu Info +
    +
    + + + + + + + + + + + + + + + + + + + {isTopMenu && ( + + + + + )} + {authCodeList?.map((item, index) => ( + + + + + ))} + +
    Menu Name + + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, menuName: e.target.value } + })) + } + readOnly={isEmpty(updateMenuRequest.data)} + /> +
    Menu Link + + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, menuLink: e.target.value } + })) + } + readOnly={isEmpty(updateMenuRequest.data)} + /> +
    Menu Folder + + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, menuFolder: e.target.value } + })) + } + readOnly={isEmpty(updateMenuRequest.data)} + /> +
    Menu File + + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, menuFile: e.target.value } + })) + } + readOnly={isEmpty(updateMenuRequest.data)} + /> +
    Menu Icon + + setUpdateMenuRequest((prevState) => ({ + ...prevState, + data: { ...prevState.data, menuIcon: e.target.value } + })) + } + readOnly={isEmpty(updateMenuRequest.data)} + placeholder="Enter a menu icon" + /> +
    + + +
    +
    {item.codeName} +
    +
    + handleRadioCheck(option, item.code)} + disabled={isEmpty(updateMenuRequest.data)} + /> +
    +
    +
    +
    +
    + + +
    + + ); +}; + +MenuDetailModal.displayName = 'MenuDisplayModal'; + +export default MenuDetailModal; diff --git a/src/pages/manage/menu/components/SubMenu.tsx b/src/pages/manage/menu/components/SubMenu.tsx new file mode 100644 index 0000000..4e3cf66 --- /dev/null +++ b/src/pages/manage/menu/components/SubMenu.tsx @@ -0,0 +1,392 @@ +import { Dispatch, SetStateAction, useEffect, useRef, useState } from 'react'; +import { Card } from 'react-bootstrap'; +import { useQueryClient } from '@tanstack/react-query'; +import { useNavigate } from 'react-router-dom'; + +import MenuDetailModal from './MenuDetailModal'; +import MenuAddModal from './MenuAddModal'; +import { TopMenuInfo } from '../Menu'; + +import prevImg from '@icons/chevron-left.svg'; +import plusImg from '@icons/ic-plus.svg'; +import deleteImg from '@icons/ic-bin.svg'; +import { toast } from 'react-toastify'; +import { + MenuListResponse, + ReorderMenuRequest, + useDeleteMenuMutation, + useMenuSubListQuery, + useReorderMenuMutation +} from '@api/menuAPI'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Modal from '@components/ui/modal/Modal'; +import Button from '@components/ui/button/Button'; + +interface Props { + topMenuInfo: TopMenuInfo; + setTopMenuInfo: Dispatch>; +} + +const SubMenu = ({ topMenuInfo, setTopMenuInfo }: Props) => { + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + const [isModalOpen, setIsModalOpen] = useState(false); + const [displayOrderChange, setDisplayOrderChange] = useState(false); + const [menuId, setMenuId] = useState(0); + const [menuList, setMenuList] = useState([]); + const [checkItems, setCheckItems] = useState([]); + const [originalMenuList, setOriginalMenuList] = useState([]); + + const code = process.env.REACT_APP_CODE as string; + + const navigate = useNavigate(); + + // Ref + const draggingMenuIndex = useRef(0); + + // API + const queryClient = useQueryClient(); + const { mutate: deleteMenu, isPending: isDeletingMenu } = useDeleteMenuMutation(); + const { mutate: reorderMenu } = useReorderMenuMutation(); + const { data: subMenuList = [], isLoading: subMenuListLoading } = useMenuSubListQuery(topMenuInfo.id); + const { data: authCodeList = [], isLoading: authCodeLoading } = useSimpleCodeListQuery('008'); + + useEffect(() => { + setMenuList(subMenuList); + }, [subMenuList]); + + // 드래그 시작 시 원래 상태 저장 + useEffect(() => { + setOriginalMenuList([...menuList]); + }, [displayOrderChange]); + + // Prev + const handlePrevClick = () => { + navigate(-1); + setMenuList([]); + setTopMenuInfo({ id: 0, name: '' }); + }; + + // Modal + const handleModalBtnClick = (modalName: string, id: number) => { + if (modalName === 'add') { + setMenuId(0); + setIsModalOpen(true); + } else if (modalName === 'detail') { + setMenuId(id); + setIsModalOpen(true); + } + }; + + // CheckBox Check Event + const handleAllCheckClick = (checked: HTMLInputElement['checked']) => { + if (checked) { + setCheckItems(subMenuList.map((item) => item.id)); + } else { + setCheckItems([]); + } + }; + + const handleSingleCheckClick = (checked: HTMLInputElement['checked'], id: number) => { + if (checked) { + setCheckItems((prevState) => [...prevState, id]); + } else { + setCheckItems(checkItems.filter((item) => item !== id)); + } + }; + + // Drag Event + const handleDragEnter = (idx: number) => { + draggingMenuIndex.current = idx; + }; + + const handleDragEnd = (idx: number) => { + setMenuList((prevState) => { + const newArr = [...prevState]; + + [newArr[idx], newArr[draggingMenuIndex.current]] = [prevState[draggingMenuIndex.current], prevState[idx]]; + + return newArr; + }); + }; + + // Delete Event + const handleDeleteClick = () => { + deleteMenu(checkItems, { + onSuccess: () => { + toast.success('Menu has been deleted'); + setAlertModal({ + isOpen: false, + txt: 'Menu has been deleted', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + queryClient.invalidateQueries({ queryKey: ['menuPrivacy'] }); + queryClient.invalidateQueries({ queryKey: ['menuSubList'] }); + }, + onError: (error) => { + setAlertModal({ + isOpen: false, + txt: error.response?.data.errorMessage as string, + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + } + }); + }; + + // Display Order Event + const handleDisplayOrderChangeProcess = () => { + const displayOrderList: ReorderMenuRequest[] = menuList.map((item, index) => ({ + id: item.id, + displayOrder: index + })); + + reorderMenu(displayOrderList, { + onSuccess: () => { + setAlertModal({ + isOpen: true, + txt: 'The displayOrder has been changed', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + setDisplayOrderChange(false); + queryClient.invalidateQueries({ queryKey: ['menuPrivacy'] }); + queryClient.invalidateQueries({ queryKey: ['menuSubList'] }); + }, + onError: (error) => { + setAlertModal({ + isOpen: true, + txt: error.response?.data.errorMessage as string, + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + } + }); + }; + + // ChangeDisplayOrder 변경 후 cancel 버튼 클릭 시 롤백 + const handleCancel = () => { + setMenuList(originalMenuList); + setDisplayOrderChange(false); + }; + + if (subMenuListLoading && authCodeLoading) { + return null; + } + + return ( + <> + + setAlertModal({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }), + buttonName: 'Close' + }} + {...(alertModal.confirmBtn.isConfirm + ? { confirmBtn: { onClose: () => alertModal.confirmBtn.onConfirmClick(), buttonName: 'Confirm' } } + : {})} + > + {alertModal.txt} + + setIsModalOpen(false)}> + {menuId > 0 ? ( + setIsModalOpen(false)} isTopMenu={false} /> + ) : ( + setIsModalOpen(false)} isTopMenu={false} /> + )} + + + +
    + + + Top Menu ({topMenuInfo.name}) + > + Sub Menu + +
    +
    + +
    +
    +
    +
    + +
    + + + + + + + + + + {authCodeList.map((item, index) => ( + + ))} + + + + {menuList.length !== 0 && + menuList?.map((item, idx) => ( + { + handleDragEnter(idx); + }, + onDragOver: (e) => { + e.preventDefault(); + }, + onDragEnd: () => { + handleDragEnd(idx); + }, + draggable: true + } + : null)} + > + + + + + + + {authCodeList.map((authItem, authIndex) => ( + + ))} + + + ))} + +
    +
    + handleAllCheckClick(e.target.checked)} + checked={ + checkItems.length === subMenuList.length ? (subMenuList.length === 0 ? false : true) : false + } + /> +
    +
    Menu NameMenu LinkMenu FolderMenu FileDisplay Order + {item.codeName} + + +
    +
    + handleSingleCheckClick(e.target.checked, item.id)} + checked={checkItems.includes(item.id) ? true : false} + /> +
    +
    {item.menuName}{item.menuLink}{item.menuFolder}{item.menuFile}{item.displayOrder} + {item.levels[authIndex] === authItem.code ? 'Y' : 'N'} + + +
    +
    +
    + +
    +
    +
    + {displayOrderChange ? ( + <> + + + + ) : ( + + )} +
    +
    +
    +
    +
    +
    + + ); +}; + +export default SubMenu; diff --git a/src/pages/manage/menu/components/TopMenu.tsx b/src/pages/manage/menu/components/TopMenu.tsx new file mode 100644 index 0000000..66e5089 --- /dev/null +++ b/src/pages/manage/menu/components/TopMenu.tsx @@ -0,0 +1,375 @@ +import React, { Dispatch, SetStateAction, useEffect, useRef, useState } from 'react'; +import { Card } from 'react-bootstrap'; +import { useLocation, useNavigate } from 'react-router-dom'; + +import { TopMenuInfo } from '../Menu'; + +import plusImg from '@icons/ic-plus.svg'; +import deleteImg from '@icons/ic-bin.svg'; +import { useQueryClient } from '@tanstack/react-query'; +import { toast } from 'react-toastify'; +import { + MenuListResponse, + ReorderMenuRequest, + useDeleteMenuMutation, + useMenuTopListQuery, + useReorderMenuMutation +} from '@api/menuAPI'; +import { useSimpleCodeListQuery } from '@api/codeAPI'; +import AlertModal from '@components/ui/modal/AlertModal'; +import Modal from '@components/ui/modal/Modal'; +import MenuDetailModal from './MenuDetailModal'; +import MenuAddModal from './MenuAddModal'; +import Button from '@components/ui/button/Button'; + +interface Props { + setTopId: Dispatch>; +} + +const TopMenu = ({ setTopId }: Props) => { + const [alertModal, setAlertModal] = useState({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + + const [isModalOpen, setIsModalOpen] = useState(false); + const [menuId, setMenuId] = useState(0); + const [displayOrderChange, setDisplayOrderChange] = useState(false); + const [menuList, setMenuList] = useState([]); + const [checkItems, setCheckItems] = useState([]); + + const code = process.env.REACT_APP_CODE as string; + + const draggingMenuIndex = useRef(0); + + const queryClient = useQueryClient(); + + const { data: topMenuList = [], isLoading: topMenuListLoading } = useMenuTopListQuery(); + const { data: authCodeList = [], isLoading: authCodeLoading } = useSimpleCodeListQuery('008'); + const { mutate: reorderMenu } = useReorderMenuMutation(); + const { mutate: deleteMenu, isPending: isDeletingMenu } = useDeleteMenuMutation(); + + const navigate = useNavigate(); + const location = useLocation(); + + useEffect(() => { + if (topMenuList.length > 0) { + setMenuList(topMenuList); + } + }, [topMenuList]); + + // Modal event + const handleModalBtnClick = (modalName: string, id?: number) => { + if (modalName === 'add') { + setMenuId(0); + setIsModalOpen(true); + } else if (modalName === 'detail' && id) { + setMenuId(id); + setIsModalOpen(true); + } + }; + + // CheckBox Check Event + const handleAllCheckClick = (checked: HTMLInputElement['checked']) => { + if (checked) { + setCheckItems(topMenuList.map((item) => item.id)); + } else { + setCheckItems([]); + } + }; + + const handleSingleCheckClick = (checked: HTMLInputElement['checked'], id: number) => { + if (checked) { + setCheckItems((prevState) => [...prevState, id]); + } else { + setCheckItems(checkItems.filter((item) => item !== id)); + } + }; + + // Drag Event + const handleDragEnter = (idx: number) => { + draggingMenuIndex.current = idx; + }; + + const handleDragEnd = (idx: number) => { + setMenuList((prevState) => { + const newArr = [...prevState]; + + [newArr[idx], newArr[draggingMenuIndex.current]] = [prevState[draggingMenuIndex.current], prevState[idx]]; + + return newArr; + }); + }; + + // Sub Menu Event + const handleSubMenuClick = (e: React.MouseEvent) => { + const menuId: number = parseInt(e.currentTarget.value); + const menuName: string = menuList.find((item) => item.id === menuId)?.menuName ?? ''; + + const searchParams = new URLSearchParams(location.search); + searchParams.set('id', String(menuId)); + searchParams.set('name', String(menuName)); + + navigate({ + pathname: location.pathname, + search: `?${searchParams.toString()}` + }); + + setTopId({ id: menuId, name: menuName }); + }; + + // Delete Event + const handleDeleteClick = () => { + deleteMenu(checkItems, { + onSuccess: () => { + toast.success('Menu has been deleted'); + setAlertModal({ + isOpen: false, + txt: 'Menu has been deleted', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => null + } + }); + + queryClient.invalidateQueries({ queryKey: ['menuPrivacy'] }); + queryClient.invalidateQueries({ queryKey: ['menuTopList'] }); + } + }); + }; + + // Display Order Event + const handleDisplayOrderChangeProcess = () => { + const displayOrderList: ReorderMenuRequest[] = menuList.map((item, index) => ({ + id: item.id, + displayOrder: index + })); + + reorderMenu(displayOrderList, { + onSuccess: () => { + setAlertModal({ + isOpen: true, + txt: 'The displayOrder has been changed', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + setDisplayOrderChange(false); + queryClient.invalidateQueries({ queryKey: ['menuPrivacy'] }); + queryClient.invalidateQueries({ queryKey: ['menuTopList'] }); + }, + onError: (error) => { + setAlertModal({ + isOpen: true, + txt: error.response?.data.errorMessage as string, + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }); + } + }); + }; + + // ChangeDisplayOrder 변경 후 cancel 버튼 클릭 시 롤백 + const handleCancel = () => { + setMenuList(topMenuList); + setDisplayOrderChange(false); + }; + + if (topMenuListLoading && authCodeLoading) { + return null; + } + + return ( + <> + + setAlertModal({ + isOpen: false, + txt: '', + confirmBtn: { + isConfirm: false, + onConfirmClick: () => { + return; + } + } + }), + buttonName: 'Close' + }} + {...(alertModal.confirmBtn.isConfirm + ? { confirmBtn: { onClose: () => alertModal.confirmBtn.onConfirmClick(), buttonName: 'Confirm' } } + : {})} + > + {alertModal.txt} + + setIsModalOpen(false)}> + {menuId > 0 ? ( + setIsModalOpen(false)} isTopMenu={true} /> + ) : ( + setIsModalOpen(false)} isTopMenu={true} /> + )} + + + +
    + + Menu List + > + Top Menu + +
    + +
    +
    +
    + +
    + + + + + + + + + + {authCodeList.map((item, index) => ( + + ))} + + + + {menuList.length === 0 + ? null + : menuList.map((item, idx) => ( + { + handleDragEnter(idx); + }, + onDragOver: (e) => { + e.preventDefault(); + }, + onDragEnd: () => { + handleDragEnd(idx); + }, + draggable: true + } + : null)} + > + + + + + + + {authCodeList.map((authItem, authIndex) => ( + + ))} + + + ))} + +
    +
    + handleAllCheckClick(e.target.checked)} + checked={checkItems.length === topMenuList.length ? true : false} + /> +
    +
    Menu NameMenu LinkMenu FolderMenu FileDisplay Order + {item.codeName} + + +
    +
    + handleSingleCheckClick(e.target.checked, item.id)} + checked={checkItems.includes(item.id) ? true : false} + /> +
    +
    {item.menuName}{item.menuLink}{item.menuFolder}{item.menuFile}{item.displayOrder} + {item.levels[authIndex] === authItem.code ? 'Y' : 'N'} + + + +
    +
    +
    + +
    +
    +
    + {displayOrderChange ? ( + <> + + + + ) : ( + + )} +
    +
    +
    +
    +
    +
    + + ); +}; + +export default TopMenu; diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/redux/auth.ts b/src/redux/auth.ts new file mode 100644 index 0000000..ff55de3 --- /dev/null +++ b/src/redux/auth.ts @@ -0,0 +1,55 @@ +import { createSlice } from '@reduxjs/toolkit'; +import type { PayloadAction } from '@reduxjs/toolkit'; + +interface UserData { + auth: string; + userNo: number; + userId: string; + userName: string; + angkorUserId: string | null; + accessToken: string; +} + +export interface AuthState { + isAuthenticated: boolean; + userData: UserData | null; +} + +const initialState: AuthState = { + isAuthenticated: false, + userData: null +}; + +export const authSlice = createSlice({ + name: 'auth', + initialState, + reducers: { + loginSuccess: (state, action: PayloadAction) => { + state.userData = action.payload; + }, + integrationSuccess: (state, action: PayloadAction) => { + if (state.userData) { + state.userData.angkorUserId = action.payload; + } + }, + loginAuthenticate: (state, action: PayloadAction) => { + state.isAuthenticated = true; + if (state.userData) { + state.userData.accessToken = action.payload; + } + }, + tokenRefresh: (state, action: PayloadAction) => { + if (state.userData) { + state.userData.accessToken = action.payload; + } + }, + logoutSuccess: (state) => { + state.userData = null; + state.isAuthenticated = false; + } + } +}); + +export const { loginSuccess, integrationSuccess, loginAuthenticate, tokenRefresh, logoutSuccess } = authSlice.actions; + +export default authSlice.reducer; diff --git a/src/redux/index.ts b/src/redux/index.ts new file mode 100644 index 0000000..e4a3d03 --- /dev/null +++ b/src/redux/index.ts @@ -0,0 +1,31 @@ +import { combineReducers, configureStore } from '@reduxjs/toolkit'; +import { persistStore, persistReducer, FLUSH, REHYDRATE, PAUSE, PURGE, REGISTER, PERSIST } from 'redux-persist'; +import storageSession from 'redux-persist/lib/storage/session'; + +import authReducer from './auth'; + +const persistConfig = { + key: 'root', + storage: storageSession, + whitelist: ['auth'] +}; + +const rootReducer = combineReducers({ + auth: authReducer +}); + +const persistedReducer = persistReducer(persistConfig, rootReducer); + +export const store = configureStore({ + reducer: persistedReducer, + middleware: (getDefaultMiddleware) => + getDefaultMiddleware({ + serializableCheck: { + ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER] + } + }) +}); + +export type RootState = ReturnType; + +export const persistor = persistStore(store); diff --git a/src/reportWebVitals.ts b/src/reportWebVitals.ts new file mode 100644 index 0000000..49a2a16 --- /dev/null +++ b/src/reportWebVitals.ts @@ -0,0 +1,15 @@ +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/src/services/api/adminAPI.ts b/src/services/api/adminAPI.ts new file mode 100644 index 0000000..0ad3510 --- /dev/null +++ b/src/services/api/adminAPI.ts @@ -0,0 +1,196 @@ +import { UseMutationResult, UseQueryResult, useMutation, useQuery, keepPreviousData } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; +import { Page } from '../commonResponse/PageResponse'; +import { customAxios, ErrorResponse } from '@lib/customAxios'; + +// ------------------------------ GET /admin/list ------------------------------ + +export interface AdminListRequest { + page: number; + size: number; + sort: string[]; + searchKeyword: string; +} + +export interface AdminListResponse { + id: number; + userId: string; + name: string; + auth: string; + phone: string; + email: string; + grp: string; + groupName: string; +} + +const adminList = (request: AdminListRequest): Promise> => { + return customAxios.get>('admin/list', { params: request }).then((res) => res.data); +}; + +export const useAdminListQuery = (request: AdminListRequest): UseQueryResult, Error> => { + return useQuery, Error>({ + queryKey: ['adminList', request], + queryFn: () => adminList(request), + staleTime: Infinity, + gcTime: 1000 * 60 * 60, + refetchOnWindowFocus: false, + refetchOnMount: false, + placeholderData: keepPreviousData + }); +}; +// ------------------------------ GET /admin/list ------------------------------ + +// ------------------------------ GET /admin/{id} ------------------------------ + +export interface AdminInfoResponse { + id: number; + email: string; + name: string; + phone: string; + grp: string; + groupName: string; + auth: string; + mngrId: string; + userId: string; +} + +const adminInfo = (id: number): Promise => { + return customAxios.get(`admin/${id}`).then((res) => res.data); +}; + +export const useAdminInfoQuery = (id: number): UseQueryResult => { + return useQuery({ + queryKey: ['adminInfo', id], + queryFn: () => adminInfo(id), + staleTime: Infinity, + gcTime: 1000 * 60 * 60, + refetchOnWindowFocus: false, + refetchOnMount: false, + enabled: id !== 0 + }); +}; +// ------------------------------ GET /admin/{id} ------------------------------ + +// ------------------------------ POST /admin ------------------------------ +export interface AddAdminRequest { + email: string; + name: string; + phone: string; + grp: string; + auth: string; +} + +const addAdmin = (request: AddAdminRequest): Promise => { + return customAxios.post('admin', request); +}; + +export const useAddAdminMutation = (): UseMutationResult, AddAdminRequest, unknown> => { + return useMutation, AddAdminRequest, unknown>({ + mutationFn: addAdmin + }); +}; +// ------------------------------ POST /admin ------------------------------ + +// ------------------------------ PATCH /admin ------------------------------ +export interface UpdateAdminRequest { + email: string; + name: string; + phone: string; + grp: string; + auth: string; + id: number; +} + +const updateAdmin = (request: UpdateAdminRequest): Promise => { + return customAxios.patch('admin', request); +}; + +export const useUpdateAdminMutation = (): UseMutationResult< + void, + AxiosError, + UpdateAdminRequest, + unknown +> => { + return useMutation, UpdateAdminRequest, unknown>({ + mutationFn: updateAdmin + }); +}; +// ------------------------------ PATCH /admin/{id} ------------------------------ + +// ------------------------------ DELETE /admin ------------------------------ +interface deleteAdminRequest { + id: number[]; +} + +const deleteAdmin = (request: deleteAdminRequest): Promise => { + return customAxios.delete('admin', { data: request }); +}; + +export const useDeleteAdminMutation = (): UseMutationResult< + void, + AxiosError, + deleteAdminRequest, + unknown +> => { + return useMutation, deleteAdminRequest, unknown>({ + mutationFn: deleteAdmin + }); +}; +// ------------------------------ DELETE /admin ------------------------------ + +// ------------------------------ POST /admin/check/password ------------------------------ +interface PasswordRequest { + userId: string; + password?: string; + email?: string; +} + +const checkPassword = (request: PasswordRequest): Promise => { + return customAxios.post('admin/check/password', request); +}; + +export const useCheckPasswordMutation = (): UseMutationResult< + void, + AxiosError, + PasswordRequest, + unknown +> => { + return useMutation, PasswordRequest, unknown>({ + mutationFn: checkPassword + }); +}; +// ------------------------------ POST /admin/check/password ------------------------------ + +// ------------------------------ PATCH /admin/update/password ------------------------------ +const updatePassword = (request: PasswordRequest): Promise => { + return customAxios.patch('admin/update/password', request); +}; + +export const useUpdatePasswordMutation = (): UseMutationResult< + void, + AxiosError, + PasswordRequest, + unknown +> => { + return useMutation, PasswordRequest, unknown>({ + mutationFn: updatePassword + }); +}; +// ------------------------------ PATCH /admin/update/password ------------------------------ + +// ------------------------------ PATCH /admin/reset/password ------------------------------ +const resetPassword = (request: PasswordRequest): Promise => { + return customAxios.patch('admin/reset/password', request); +}; + +export const useResetPasswordMutation = (): UseMutationResult< + void, + AxiosError, + PasswordRequest, + unknown +> => { + return useMutation, PasswordRequest, unknown>({ + mutationFn: resetPassword + }); +}; +// ------------------------------ PATCH /admin/reset/password ------------------------------ diff --git a/src/services/api/adminGroupAPI.ts b/src/services/api/adminGroupAPI.ts new file mode 100644 index 0000000..e8957ac --- /dev/null +++ b/src/services/api/adminGroupAPI.ts @@ -0,0 +1,142 @@ +import { UseMutationResult, UseQueryResult, useMutation, useQuery } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; +import { Page } from '../commonResponse/PageResponse'; +import { customAxios, ErrorResponse } from '@lib/customAxios'; + +// ------------------------------ GET /admin/group/list ------------------------------ +export interface AdminGroupListRequest { + page: number; + size: number; + sort: string[]; + searchKeyword: string; +} + +export interface AdminGroupListResponse { + groupCd: string; + groupName: string; + members: number; +} + +const adminGroupList = (request: AdminGroupListRequest): Promise> => { + return customAxios.get>('admin/group/list', { params: request }).then((res) => res.data); +}; + +export const useAdminGroupListQuery = ( + request: AdminGroupListRequest +): UseQueryResult, Error> => { + return useQuery, Error>({ + queryKey: ['adminGroupList', request], + queryFn: () => adminGroupList(request), + refetchOnMount: true, + refetchOnWindowFocus: true + }); +}; +// ------------------------------ GET /admin/group/list ------------------------------ + +// ------------------------------ GET /admin/group/{id} ------------------------------ +interface AdminGroupInfoResponse { + groupCd: string; + groupName: string; + members: number; + createDt: string; +} + +const adminGroupInfo = (id: string): Promise => { + return customAxios.get(`admin/group/${id}`).then((res) => res.data); +}; + +export const useAdminGroupInfoQuery = (id: string): UseQueryResult => { + return useQuery({ + queryKey: ['adminGroupInfo', id], + queryFn: () => adminGroupInfo(id), + refetchOnMount: false, + refetchOnWindowFocus: false, + staleTime: 1000 * 60 * 5, + enabled: id !== '' + }); +}; +// ------------------------------ GET /admin/group/{id} ------------------------------ + +// ------------------------------ GET /admin/group/code ------------------------------ +interface AdminGroupCodeResponse { + groupCd: string; + groupName: string; +} + +const adminGroupCode = (): Promise => { + return customAxios.get('admin/group/code').then((res) => res.data); +}; + +export const useAdminGroupCodeQuery = (): UseQueryResult => { + return useQuery({ + queryKey: ['adminGroupCode'], + queryFn: adminGroupCode, + refetchOnMount: false, + refetchOnWindowFocus: false + }); +}; +// ------------------------------ GET /admin/group/code ------------------------------ + +// ------------------------------ POST /admin/group ------------------------------ +export interface AddAdminGroupRequest { + groupName: string; +} + +const addAdminGroup = (request: AddAdminGroupRequest): Promise => { + return customAxios.post('admin/group', request); +}; + +export const useAddAdminGroupMutation = (): UseMutationResult< + void, + AxiosError, + AddAdminGroupRequest, + unknown +> => { + return useMutation, AddAdminGroupRequest, unknown>({ + mutationFn: addAdminGroup + }); +}; +// ------------------------------ POST /admin/group ------------------------------ + +// ------------------------------ PATCH /admin/group ------------------------------ +export interface UpdateAdminGroupRequest { + groupName: string; + groupCd: string; +} + +const updateAdminGroup = (request: UpdateAdminGroupRequest): Promise => { + return customAxios.patch('admin/group', request); +}; + +export const useUpdateAdminGroupMutation = (): UseMutationResult< + void, + AxiosError, + UpdateAdminGroupRequest, + unknown +> => { + return useMutation, UpdateAdminGroupRequest, unknown>({ + mutationFn: updateAdminGroup + }); +}; +// ------------------------------ PATCH /admin/group ------------------------------ + +// ------------------------------ DELETE /admin/group ------------------------------ +interface DeleteAdminGroupRequest { + groupCd: string[]; +} + +const deleteAdminGroup = (request: DeleteAdminGroupRequest): Promise => { + return customAxios.delete('admin/group', { data: request }); +}; + +export const useDeleteAdminGroupMutation = (): UseMutationResult< + void, + AxiosError, + DeleteAdminGroupRequest, + unknown +> => { + return useMutation, DeleteAdminGroupRequest, unknown>({ + mutationFn: deleteAdminGroup + }); +}; +// ------------------------------ DELETE /admin/group ------------------------------ diff --git a/src/services/api/authAPI.ts b/src/services/api/authAPI.ts new file mode 100644 index 0000000..a8d213d --- /dev/null +++ b/src/services/api/authAPI.ts @@ -0,0 +1,126 @@ +import { customAxios, ErrorResponse } from '@lib/customAxios'; +import { UseMutationResult, UseQueryResult, useMutation, useQuery } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; + +// ------------------------------ POST /login ------------------------------ +interface LoginRequest { + id: string; + password: string; +} + +interface LoginResponse { + userNo: number; + userId: string; + userName: string; + angkorUserId: string; + auth: string; + accessToken: string; +} + +const login = (request: LoginRequest): Promise => { + return customAxios.post('login', request).then((res) => res.data); +}; + +export const useLoginMutation = (): UseMutationResult< + LoginResponse, + AxiosError, + LoginRequest, + unknown +> => { + return useMutation, LoginRequest, unknown>({ + mutationFn: login + }); +}; +// ------------------------------ POST /login ------------------------------ + +// ------------------------------ GET /check/{id} ------------------------------ +interface CheckIdRequest { + angkorId: string; +} + +const checkId = (request: CheckIdRequest): Promise => { + return customAxios.get(`check/${request.angkorId}`); +}; + +export const useCheckIdMutation = (): UseMutationResult, CheckIdRequest, unknown> => { + return useMutation, CheckIdRequest, unknown>({ + mutationFn: checkId + }); +}; +// ------------------------------ GET /check/{id} ------------------------------ + +// ------------------------------ POST /auth/code ------------------------------ +interface AuthCodeRequest { + id: string; +} + +interface AuthCodeResponse { + userId: string; + tokenType: string; + authKey: string; +} + +const authCode = (request: AuthCodeRequest): Promise => { + return customAxios.post('auth/code', null, { params: request }).then((res) => res.data); +}; + +export const useAuthCodeMutation = (): UseMutationResult< + AuthCodeResponse, + AxiosError, + AuthCodeRequest, + unknown +> => { + return useMutation, AuthCodeRequest, unknown>({ + mutationFn: authCode + }); +}; +// ------------------------------ POST /auth/code ------------------------------ + +// ------------------------------ GET /auth/check ------------------------------ +interface AuthCheckRequest { + authKey: string; + authNumber: string; + userId: string; +} + +const authCheck = (request: AuthCheckRequest): Promise => { + return customAxios.get('auth/check', { params: request }).then((res) => res.data); +}; + +export const useAuthCheckMutation = (): UseMutationResult< + LoginResponse, + AxiosError, + AuthCheckRequest, + unknown +> => { + return useMutation, AuthCheckRequest, unknown>({ + mutationFn: authCheck + }); +}; +// ------------------------------ GET /auth/check ------------------------------ + +// ------------------------------ GET /info ------------------------------ +export interface InfoResponse { + adminId: string; + name: string; + email: string; + phone: string; + grp: string; + groupName: string; + auth: string; + angkorUserId: string; +} + +const info = (): Promise => { + return customAxios.get('info').then((res) => res.data); +}; + +export const useInfoQuery = (): UseQueryResult => { + return useQuery({ + queryKey: ['info'], + queryFn: () => info(), + refetchOnMount: false, + refetchOnWindowFocus: false + }); +}; +// ------------------------------ GET /info ------------------------------ diff --git a/src/services/api/codeAPI.ts b/src/services/api/codeAPI.ts new file mode 100644 index 0000000..8035833 --- /dev/null +++ b/src/services/api/codeAPI.ts @@ -0,0 +1,176 @@ +import { UseMutationResult, UseQueryResult, keepPreviousData, useMutation, useQuery } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; +import { Page } from '../commonResponse/PageResponse'; +import { customAxios, ErrorResponse } from '@lib/customAxios'; + +// ------------------------------ GET /code/major/list ------------------------------ +export interface MajorCodeListRequest { + page: number; + size: number; + sort: string[]; + searchKeyword: string; +} + +export interface MajorCodeListResponse { + major: string; + majorName: string; +} + +const majorCodeList = (request: MajorCodeListRequest): Promise> => { + return customAxios.get(`code/major/list`, { params: request }).then((res) => res.data); +}; + +export const useMajorCodeListQuery = ( + request: MajorCodeListRequest +): UseQueryResult, Error> => { + return useQuery, Error>({ + queryKey: ['majorCodeList', request], + queryFn: () => majorCodeList(request), + refetchOnMount: false, + refetchOnWindowFocus: false, + placeholderData: keepPreviousData + }); +}; +// ------------------------------ GET /code/major/list ------------------------------ + +// ------------------------------ GET /code/{major}/list ------------------------------ + +interface CodeListParams { + page: number; + size: number; + sort: string[]; + searchKeyword: string; +} +export interface CodeListRequest { + path: string; + params: CodeListParams; +} + +export interface CodeListResponse { + code: string; + codeEn: string; + codeKr: string; + etc: string; +} + +const codeList = (request: CodeListRequest): Promise> => { + return customAxios.get(`code/${request.path}/list`, { params: request.params }).then((res) => res.data); +}; + +export const useCodeListQuery = (request: CodeListRequest): UseQueryResult, Error> => { + return useQuery, Error>({ + queryKey: ['codeList', request], + queryFn: () => codeList(request), + refetchOnMount: false, + refetchOnWindowFocus: false, + placeholderData: keepPreviousData, + enabled: request.path !== '' + }); +}; +// ------------------------------ GET /code/{major}/list ------------------------------ + +// ------------------------------ GET /code/{major}/list/simple ------------------------------ +interface SimpleCodeListResponse { + code: string; + codeName: string; +} + +const simpleCodeList = (request: string): Promise => { + return customAxios.get('code/' + request + '/list/simple').then((res) => res.data); +}; + +export const useSimpleCodeListQuery = (request: string): UseQueryResult => { + return useQuery({ + queryKey: ['simpleCodeList', request], + queryFn: () => simpleCodeList(request), + refetchOnMount: false, + refetchOnWindowFocus: false + }); +}; +// ------------------------------ GET /code/{major}/list/simple ------------------------------ + +// ------------------------------ POST /code ------------------------------ +export interface AddCodeRequest { + major?: string; + majorName?: string; + codeEn: string; + codeKr: string; + etc: string; +} + +const addCode = (request: AddCodeRequest): Promise => { + return customAxios.post('code', request); +}; + +export const useAddCodeMutation = (): UseMutationResult, AddCodeRequest, unknown> => { + return useMutation, AddCodeRequest, unknown>({ + mutationFn: addCode + }); +}; +// ------------------------------ POST /code ------------------------------ + +// ------------------------------ PATCH /code/{code} ------------------------------ +interface UpdateCodeData { + codeEn: string; + codeKr: string; + etc: string; +} + +export interface UpdateCodeRequest { + data: UpdateCodeData; + path: string; +} + +const updateCode = (request: UpdateCodeRequest): Promise => { + return customAxios.patch(`code/${request.path}`, request.data); +}; + +export const useUpdateCodeMutation = (): UseMutationResult< + void, + AxiosError, + UpdateCodeRequest, + unknown +> => { + return useMutation, UpdateCodeRequest, unknown>({ + mutationFn: updateCode + }); +}; +// ------------------------------ PATCH /code/{code} ------------------------------ + +// ------------------------------ PATCH /code/{major}/name ------------------------------ +interface UpdateMajorNameData { + codeValue: string; +} + +export interface UpdateMajorNameRequest { + data: UpdateMajorNameData; + path: string; +} + +const updateMajorName = (request: UpdateMajorNameRequest): Promise => { + return customAxios.patch(`code/${request.path}/name`, request.data); +}; + +export const useUpdateMajorNameMutation = (): UseMutationResult< + void, + AxiosError, + UpdateMajorNameRequest, + unknown +> => { + return useMutation, UpdateMajorNameRequest, unknown>({ + mutationFn: updateMajorName + }); +}; +// ------------------------------ PATCH /code/{major}/name ------------------------------ + +// ------------------------------ DELETE /code/{code} ------------------------------ +const deleteCode = (path: string): Promise => { + return customAxios.delete(`code/${path}`); +}; + +export const useDeleteCodeMutation = (): UseMutationResult, string, unknown> => { + return useMutation, string, unknown>({ + mutationFn: deleteCode + }); +}; +// ------------------------------ DELETE /code/{code} ------------------------------ diff --git a/src/services/api/emoticonAPI.ts b/src/services/api/emoticonAPI.ts new file mode 100644 index 0000000..b30b06d --- /dev/null +++ b/src/services/api/emoticonAPI.ts @@ -0,0 +1,319 @@ +import { AxiosError } from 'axios'; +import { useMutation, UseMutationResult, useQuery, UseQueryResult } from '@tanstack/react-query'; +import { Page } from '../commonResponse/PageResponse'; +import { customAxios } from '@lib/customAxios'; +import { ErrorResponse } from 'react-router-dom'; + +// ------------------------------ GET /emoticon/list ------------------------------ + +export interface EmoticonListRequest { + page: number; + size: number; + sort: string[]; + emotiType: string; +} + +export interface EmoticonListResponse { + guid: number; + emotiName: string; + likesCnt: string; + price: string; + regDt: string; + status: string; + absFilePath: string; + isDefault: string; +} + +const emoticonList = async (params: EmoticonListRequest): Promise> => { + const res = await customAxios.get>('emoticon/list', { params }); + return res.data; +}; + +export const useEmoticonListQuery = ( + params: EmoticonListRequest +): UseQueryResult, AxiosError> => { + return useQuery, AxiosError>({ + queryKey: ['emoticonList', params], + queryFn: () => emoticonList(params), + refetchOnMount: false, + refetchOnWindowFocus: false, + staleTime: 1000 * 60 * 5 + }); +}; + +// ------------------------------ GET /emoticon/list ------------------------------ + +// ------------------------------ GET /emoticon/{guid} ------------------------------ + +export interface FileDetail { + id?: number; + guid?: number; + dispOrd: number; + absFilePath: string; + fileSize?: string; + updateDt?: string; +} + +interface EmoticonDetailsResponse { + emoticonName: string; + status: number; + detailFile: FileDetail[]; + shortCutFile: FileDetail[]; + isDefault: string; +} + +const emoticonDetails = (request: number): Promise => { + return customAxios.get(`emoticon/${request}`).then((res) => { + return res.data; + }); +}; + +export const useEmoticonDetailsQuery = ( + request: number +): UseQueryResult> => { + return useQuery>({ + queryKey: ['emoticonDetails', request], + queryFn: () => emoticonDetails(request), + refetchOnMount: false, + refetchOnWindowFocus: false, + staleTime: 1000 * 60 * 5 + }); +}; + +// ------------------------------ GET /emoticon/{guid} ------------------------------ + +// ------------------------------ GET /emoticon/{guid}/owner ------------------------------ + +export interface EmoticonOwnerListRequest { + page: number; + size: number; + sort: string[]; + searchKeyword: string; + status: string; +} + +interface EmoticonOwnerListResponse { + userNo: number; + angkorId: string; + userId: string; + expiredDate: number; + saveDt: string; + status: string; +} + +const emoticonOwnerList = ( + guid: number, + params: EmoticonOwnerListRequest +): Promise> => { + return customAxios.get>(`emoticon/${guid}/owner`, { params }).then((res) => { + return res.data; + }); +}; + +export const useEmoticonOwnerListQuery = ( + guid: number, + params: EmoticonOwnerListRequest +): UseQueryResult, AxiosError> => { + return useQuery, AxiosError>({ + queryKey: ['emoticonOwnerList', guid, params], + queryFn: () => emoticonOwnerList(guid, params), + refetchOnMount: false, + refetchOnWindowFocus: false, + staleTime: 1000 * 60 * 5 + }); +}; + +// ------------------------------ GET /emoticon/{guid}/owner ------------------------------ + +// ------------------------------ GET /emoticon/{guid}/non-owner ------------------------------ + +export interface EmoticonNonOwnerListRequest { + page: number; + size: number; + sort: string[]; + searchKeyword: string; +} + +interface EmoticonOwnerListResponse { + userNo: number; + angkorId: string; + userId: string; +} + +const emoticonNonOwnerList = ( + guid: number, + params: EmoticonNonOwnerListRequest +): Promise> => { + return customAxios.get>(`emoticon/${guid}/non-owner`, { params }).then((res) => { + return res.data; + }); +}; + +export const useEmoticonNonOwnerListQuery = ( + guid: number, + params: EmoticonNonOwnerListRequest +): UseQueryResult, AxiosError> => { + return useQuery, AxiosError>({ + queryKey: ['emoticonNonOwnerList', guid, params], + queryFn: () => emoticonNonOwnerList(guid, params), + refetchOnMount: false, + refetchOnWindowFocus: false, + staleTime: 1000 * 60 * 5 + }); +}; + +// ------------------------------ GET /emoticon/{guid}/non-owner ------------------------------ + +// ------------------------------ POST /emoticon ------------------------------ +export interface EmoticonPostJsonData { + emotiName: string; + status: string; + isDefault: string; +} +export interface EmoticonPostFormData { + files: (File | null)[]; + shortCutFiles: (File | null)[]; +} + +const postEmoticon = (request: FormData): Promise => { + return customAxios.post('emoticon', request, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }); +}; + +export const usePostEmoticonMutation = (): UseMutationResult, FormData, unknown> => { + return useMutation, FormData, unknown>({ + mutationFn: postEmoticon + }); +}; + +// ------------------------------ POST /emoticon ------------------------------ + +// ------------------------------ POST /emoticon/admin/gift ------------------------------ +interface AdminGiftEmoticonRequest { + guid: number; + angkorId: string[]; + expiredDate: number; + status: string; +} + +const postAdminGiftEmoticon = (request: AdminGiftEmoticonRequest): Promise => { + return customAxios.post('emoticon/admin/gift', request); +}; + +export const usePostAdminGiftEmoticonMutation = (): UseMutationResult< + void, + AxiosError, + AdminGiftEmoticonRequest, + unknown +> => { + return useMutation, AdminGiftEmoticonRequest, unknown>({ + mutationFn: postAdminGiftEmoticon + }); +}; + +// ------------------------------ POST /emoticon/admin/gift ------------------------------ + +// ------------------------------ PATCH /emoticon ------------------------------ +export interface ReorderFile { + id: number; + dispOrd: number; +} + +interface EmoticonRequest { + guid: number; + emotiName: string; + status: string; + isDefault: string; + reorderFiles: ReorderFile[]; +} + +const updateEmoticon = (request: EmoticonRequest): Promise => { + return customAxios.patch('emoticon', request); +}; + +export const useUpdateEmoticonMutation = (): UseMutationResult< + void, + AxiosError, + EmoticonRequest, + unknown +> => { + return useMutation, EmoticonRequest, unknown>({ + mutationFn: updateEmoticon + }); +}; +// ------------------------------ PATCH /emoticon ------------------------------ + +// ------------------------------ PATCH /emoticon/{guid}/{angkorId} ------------------------------ +interface ExpiredDateRequest { + guid: number; + angkorId: string; + expiredDate: number; +} + +const updateExpiredDate = (request: ExpiredDateRequest): Promise => { + return customAxios.patch(`emoticon/${request.guid}/${request.angkorId}`, { expiredDate: request.expiredDate }); +}; + +export const useUpdateExpiredDateMutation = (): UseMutationResult< + void, + AxiosError, + ExpiredDateRequest, + unknown +> => { + return useMutation, ExpiredDateRequest, unknown>({ + mutationFn: updateExpiredDate + }); +}; +// ------------------------------ PATCH /emoticon/{guid}/{angkorId} ------------------------------ + +// ------------------------------ PATCH /emoticon/file ------------------------------ + +export interface EmoticonPatchJsonData { + guid: number; + dispOrd: number; +} + +const updateEmoticonFile = (request: FormData): Promise => { + return customAxios.patch('emoticon/file', request, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }); +}; + +export const useUpdateEmoticonFileMutation = (): UseMutationResult< + void, + AxiosError, + FormData, + unknown +> => { + return useMutation, FormData, unknown>({ + mutationFn: updateEmoticonFile + }); +}; +// ------------------------------ PATCH /emoticon/file ------------------------------ + +// ------------------------------ DELETE /emoticon/{guid}/{angkorId} ------------------------------ +interface DeleteEmoticonOwnershipRequest { + guid: number; + angkorId: string; +} + +const deleteEmoticonOwnership = (request: DeleteEmoticonOwnershipRequest): Promise => { + return customAxios.delete(`emoticon/${request.guid}/${request.angkorId}`); +}; + +export const useDeleteEmoticonOwnershipMutation = (): UseMutationResult< + void, + AxiosError, + DeleteEmoticonOwnershipRequest, + unknown +> => { + return useMutation, DeleteEmoticonOwnershipRequest, unknown>({ + mutationFn: deleteEmoticonOwnership + }); +}; +// ------------------------------ DELETE /emoticon/{guid}/{angkorId} ------------------------------ diff --git a/src/services/api/menuAPI.ts b/src/services/api/menuAPI.ts new file mode 100644 index 0000000..a886e05 --- /dev/null +++ b/src/services/api/menuAPI.ts @@ -0,0 +1,184 @@ +import { customAxios, ErrorResponse } from '@lib/customAxios'; +import { UseMutationResult, UseQueryResult, useMutation, useQuery } from '@tanstack/react-query'; +import { AxiosError } from 'axios'; +// ------------------------------ GET /menu/privacy ------------------------------ +interface MenuPrivacyRequest { + level: string; +} + +export interface MenuPrivacyResponse { + id: number; + parentId: number; + menuName: string; + menuLink: string; + menuFolder: string; + menuFile: string; + menuIcon: string; + displayOrder: 0; + depth: 0; + children: MenuPrivacyResponse[]; +} + +const menuPrivacy = (request: MenuPrivacyRequest): Promise> => { + return customAxios.get(`menu/privacy`, { params: request }).then((res) => res.data); +}; + +export const useMenuPrivacyQuery = ( + request: MenuPrivacyRequest +): UseQueryResult, AxiosError> => { + return useQuery, AxiosError>({ + queryKey: ['menuPrivacy', request], + queryFn: () => menuPrivacy(request), + staleTime: Infinity, + gcTime: 1000 * 60 * 60, + refetchOnWindowFocus: false, + refetchOnMount: false + }); +}; +// ------------------------------ GET /menu/privacy ------------------------------ + +// ------------------------------ GET /menu/top/list ------------------------------ +export interface MenuListResponse { + id: number; + menuName: string; + menuLink: string; + menuFolder: string; + menuFile: string; + displayOrder: number; + levels: string[]; +} + +const menuTopList = (): Promise> => { + return customAxios.get(`menu/top/list`).then((res) => res.data); +}; + +export const useMenuTopListQuery = (): UseQueryResult, AxiosError> => { + return useQuery, AxiosError>({ + queryKey: ['menuTopList'], + queryFn: () => menuTopList(), + refetchOnMount: false, + refetchOnWindowFocus: false + }); +}; +// ------------------------------ GET /menu/top/list ------------------------------ + +// ------------------------------ GET /menu/{topId}/list ------------------------------ +const menuSubList = (path: number): Promise> => { + return customAxios.get(`menu/${path.toString()}/list`).then((res) => res.data); +}; + +export const useMenuSubListQuery = ( + path: number +): UseQueryResult, AxiosError> => { + return useQuery, AxiosError>({ + queryKey: ['menuSubList', path], + queryFn: () => menuSubList(path), + refetchOnMount: false, + refetchOnWindowFocus: false, + enabled: path > 0, + staleTime: 1000 * 60 * 5 + }); +}; + +// ------------------------------ GET /menu/{topId}/list ------------------------------ + +// ------------------------------ GET /menu/{id} ------------------------------ +interface MenuDetailResponse extends MenuListResponse { + menuIcon: string; +} + +const menuDetail = (path: number): Promise => { + return customAxios.get(`menu/${path.toString()}`).then((res) => res.data); +}; + +export const useMenuDetailQuery = (path: number): UseQueryResult> => { + return useQuery>({ + queryKey: ['menuDetail', path], + queryFn: () => menuDetail(path), + refetchOnMount: true, + refetchOnWindowFocus: true + }); +}; +// ------------------------------ GET /menu/{id} ------------------------------ + +// ------------------------------ POST /menu ------------------------------ +export interface AddMenuRequest { + topId: number; + menuName: string; + menuLink: string; + menuFolder: string; + menuFile: string; + menuIcon: string; + levels: string[]; +} + +const addMenu = (request: AddMenuRequest): Promise => { + return customAxios.post('menu', request); +}; + +export const useAddMenuMutation = (): UseMutationResult, AddMenuRequest, unknown> => { + return useMutation, AddMenuRequest, unknown>({ + mutationFn: addMenu + }); +}; +// ------------------------------ POST /menu ------------------------------ + +// ------------------------------ PATCH /menu/{id} ------------------------------ +interface UpdateMenuData { + menuName: string; + menuLink: string; + menuFolder: string; + menuFile: string; + menuIcon: string; + levels: string[]; +} + +export interface UpdateMenuRequest { + data: UpdateMenuData; + path: number; +} + +const updateMenu = ({ data, path }: UpdateMenuRequest): Promise => { + return customAxios.patch(`menu/${path.toString()}`, data); +}; + +export const useUpdateMenuMutation = (): UseMutationResult, UpdateMenuRequest> => { + return useMutation, UpdateMenuRequest>({ + mutationFn: updateMenu + }); +}; +// ------------------------------ PATCH /menu/{id} ------------------------------ + +// ------------------------------ PATCH /menu/reorder ------------------------------ +export interface ReorderMenuRequest { + id: number; + displayOrder: number; +} + +const reorderMenu = (request: ReorderMenuRequest[]): Promise => { + return customAxios.patch('menu/reorder', request); +}; + +export const useReorderMenuMutation = (): UseMutationResult< + void, + AxiosError, + ReorderMenuRequest[], + unknown +> => { + return useMutation, ReorderMenuRequest[], unknown>({ + mutationFn: reorderMenu + }); +}; +// ------------------------------ PATCH /menu/reorder ------------------------------ + +// ------------------------------ DELETE /menu/{id} ------------------------------ +const deleteMenu = (request: number[]): Promise => { + return customAxios.delete('menu', { data: request }); +}; + +export const useDeleteMenuMutation = (): UseMutationResult, number[], unknown> => { + return useMutation, number[], unknown>({ + mutationFn: deleteMenu + }); +}; +// ------------------------------ DELETE /menu/{id} ------------------------------ diff --git a/src/services/commonResponse/PageResponse.ts b/src/services/commonResponse/PageResponse.ts new file mode 100644 index 0000000..3b7bf3c --- /dev/null +++ b/src/services/commonResponse/PageResponse.ts @@ -0,0 +1,27 @@ +interface Sort { + sorted: boolean; + unsorted: boolean; + empty: boolean; +} + +interface Pageable { + pageNumber: number; + pageSize: number; + sort: Sort; + unpaged: boolean; + paged: boolean; + offset: number; +} + +export interface Page { + totalPages: number; + totalElements: number; + pageable: Pageable; + first: boolean; + last: boolean; + number: number; + numberOfElements: number; + size: number; + content: T[]; + empty: boolean; +} diff --git a/src/setupTests.ts b/src/setupTests.ts new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/src/share/constants/constants.ts b/src/share/constants/constants.ts new file mode 100644 index 0000000..e6c01f0 --- /dev/null +++ b/src/share/constants/constants.ts @@ -0,0 +1,191 @@ +import { RadioOption } from '@components/ui/radio/Radio'; + +export interface SearchFilterOption { + label: string; + value: string; +} +// -------------------------------- EMOTICONS ------------------------------------- // + +export const DEFAULT_TYPE: RadioOption[] = [ + { id: 'D', label: 'Defaults' }, + { id: 'B', label: 'Sale' }, + { id: 'G', label: 'Gift' } +]; + +export const IMAGE_UPLOAD_GUIDELINES = ` + + +1. PNG format, 96X96 pixel format. +2. The file name must not be a Korean file name. + + + +Please select the number of emoticons and the image type of emoticon. + +1. The image size is 96X96 pixels. +2. The image file size must not be larger than 2 MB. +3. The file name must not be a Korean file name. +`; + +export const EXPIRE_DATE_OPTIONS_EMOTICONS: SearchFilterOption[] = [ + { label: 'Direct Input', value: '0' }, + { label: 'One Month', value: '1' }, + { label: 'Two Month', value: '2' }, + { label: 'Three Month', value: '3' }, + { label: 'Indefinitely', value: '9999-01-01' } +]; + +export const SEARCH_FILTER_OPTIONS_EMOTICONS: SearchFilterOption[] = [ + { label: 'All', value: '' }, + { label: 'Default', value: 'D' }, + { label: 'Sale', value: 'B' }, + { label: 'Gift', value: 'G' } +]; + +// -------------------------------- EMOTICONS ------------------------------------- // + +// -------------------------------- MANAGE USER ------------------------------------- // + +export const SEARCH_FILTER_OPTIONS_MANAGEUSER: SearchFilterOption[] = [ + { label: 'User ID', value: 'userId' }, + { label: 'Angkor ID', value: 'angkorId' }, + { label: 'Phone Number', value: 'phone' }, + { label: 'Name', value: 'name' } +]; + +export const SEARCH_FILTER_OPTIONS_MANAGEUSER_POST: SearchFilterOption[] = [ + { label: 'Post Id', value: 'postId' }, + { label: 'Content', value: 'content' } +]; + +export const SEARCH_FILTER_OPTIONS_MANAGEUSER_REPLY: SearchFilterOption[] = [ + { label: 'Post Id', value: 'postId' }, + { label: 'User ID', value: 'userId' }, + { label: 'Name', value: 'name' }, + { label: 'Content', value: 'content' } +]; + +export const SEARCH_FILTER_OPTIONS_MANAGE_REPORT: SearchFilterOption[] = [ + { label: 'User ID', value: 'userId' }, + { label: 'Report Type', value: 'reportType' } +]; + +export const SEARCH_FILTER_OPTIONS_MANAGE_BLOCK: SearchFilterOption[] = [ + { label: 'User ID', value: 'userId' }, + { label: 'Angkor ID', value: 'angkorId' }, + { label: 'Phone Number', value: 'phone' } +]; + +export const SEARCH_FILTER_OPTIONS_MANAGE_ABUSING: SearchFilterOption[] = [ + { label: 'Spam Code', value: 'spamCode' }, + { label: 'Spam Type', value: 'spamType' } +]; + +// -------------------------------- MANAGE USER ------------------------------------- // + +// -------------------------------- MANAGE CONTENTS ------------------------------------- // + +export const SEARCH_FILTER_OPTIONS_POST: SearchFilterOption[] = [ + { label: 'User Id', value: 'userId' }, + { label: 'Post Id', value: 'postId' }, + { label: 'Name', value: 'name' }, + { label: 'Content', value: 'content' } +]; + +export const SEARCH_FILTER_OPTIONS_GALLERY: SearchFilterOption[] = [ + { label: 'Post Id', value: 'postId' }, + { label: 'User ID', value: 'userId' }, + { label: 'Name', value: 'name' } +]; + +export const SEARCH_FILTER_OPTIONS_REPLY: SearchFilterOption[] = [ + { label: 'Post Id', value: 'postId' }, + { label: 'Content', value: 'content' } +]; + +// -------------------------------- MANAGE CONTENTS ------------------------------------- // + +// -------------------------------- MANAGE REPORT ------------------------------------- // + +export const SEARCH_FILTER_OPTIONS_REPORT: SearchFilterOption[] = [ + { label: 'Reported by User', value: '1' }, + { label: 'User Reported', value: '2' } +]; + +export const STATUS_FILTER_REPORT: SearchFilterOption[] = [ + { value: '0', label: 'Unread' }, + { value: '1', label: 'Processed' }, + { value: '2', label: 'Under Review' } +]; + +// -------------------------------- MANAGE REPORT ------------------------------------- // + +// -------------------------------- CUSTOMER SUPPORT ------------------------------------- // + +export const LANGUAGE_TYPE: RadioOption[] = [ + { id: 'D001', label: 'English' }, + { id: 'D002', label: 'Khmer' } +]; + +export const SET_TYPE: RadioOption[] = [ + { id: 'P', label: 'Post' }, + { id: 'C', label: 'Closed' }, + { id: 'S', label: 'Scheduled' } +]; + +export const NOTICHAT_SEND_TYPE: RadioOption[] = [ + { id: '0', label: 'Direct' }, + { id: '1', label: 'Scheduled' } +]; + +// -------------------------------- CUSTOMER SUPPORT ------------------------------------- // + +// -------------------------------- TERMS / PRIVACY ------------------------------------- // + +export const TERMS_TYPE: SearchFilterOption[] = [ + { label: 'AngkorLife', value: 'C' }, + { label: 'AngkorFeed', value: 'F' } +]; + +// -------------------------------- TERMS / PRIVACY ------------------------------------- // + +// -------------------------------- PUSH NOTIFICATIONS ------------------------------------- // + +export const SEND_TYPE: RadioOption[] = [ + { id: 'R', label: 'Real-Time' }, + { id: 'S', label: 'Scheduled' } +]; + +export const MEMBER_TYPE: RadioOption[] = [ + { id: 'V', label: 'VIP' }, + { id: 'N', label: 'Normal' }, + { id: 'A', label: 'All' } +]; + +export const PLATFORM_TYPE: RadioOption[] = [ + { id: '0', label: 'IOS' }, + { id: '1', label: 'Android' }, + { id: '2', label: 'All' } +]; + +// -------------------------------- PUSH NOTIFICATIONS------------------------------------- // + +// -------------------------------- MANAGE / BATCH ------------------------------------- // + +export const BATCH_RADIO_TYPE = [ + { id: 'H', label: 'Hours', type: 'yyyyMMddHH' }, + { id: 'D', label: 'Days', type: 'yyyyMMdd' }, + { id: 'M', label: 'Months', type: 'yyyyMM' } +]; + +// -------------------------------- MANAGE / BATCH ------------------------------------- // + +// -------------------------------- USER STATUS ------------------------------------- // + +export const USER_STATUS: RadioOption[] = [ + { id: '1', label: 'Normal' }, + { id: '2', label: 'Block' }, + { id: '3', label: 'Report' }, + { id: '4', label: 'Withdraw' } +]; +// -------------------------------- USER STATUS ------------------------------------- // diff --git a/src/share/lib/customAxios.ts b/src/share/lib/customAxios.ts new file mode 100644 index 0000000..f12c348 --- /dev/null +++ b/src/share/lib/customAxios.ts @@ -0,0 +1,125 @@ +import axios, { AxiosError } from 'axios'; +import { store } from '@redux/index'; +import { logoutSuccess, tokenRefresh } from '@redux/auth'; + +// paramsSerializer +const customParamsSerializer = (params: Record): string => { + const serachParams = new URLSearchParams(); + + Object.keys(params).forEach((key) => { + const value = params[key]; + + if (Array.isArray(value)) { + value.forEach((item) => serachParams.append(key, item)); + } else { + serachParams.append(key, value); + } + }); + + return serachParams.toString(); +}; + +export const customAxios = axios.create({ + baseURL: process.env.REACT_APP_API_URL, + timeout: 7000, + headers: { + Accept: '*/*', + 'Content-Type': 'application/json' + }, + paramsSerializer: customParamsSerializer +}); + +export interface ErrorResponse { + errorCode: number; + errorMessage: string; + data: object; + message: string; +} + +// 토큰 디코딩 +const decodeJwtPayload = (jwt: string): number => { + const base64UrlPayload: string = jwt.replace('Bearer ', '').split('.')[1]; + const base64: string = base64UrlPayload.replace(/-/g, '+').replace(/_/g, '/'); + const jsonPayload: string = decodeURIComponent( + atob(base64) + .split('') + .map((c) => { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }) + .join('') + ); + + return JSON.parse(jsonPayload).exp; +}; + +// 토큰 만료 여부 확인 +const tokenExpired = (): boolean => { + const token: string | undefined = store.getState().auth.userData?.accessToken; + + if (token === undefined) { + return false; + } + + const tokenExpirationDate: number = decodeJwtPayload(JSON.stringify(token)); + const curreuntTime: number = Math.floor(Date.now() / 1000); + + if (curreuntTime >= tokenExpirationDate) { + return true; + } else { + return false; + } +}; + +// 로그아웃 처리 +const logoutProcess = () => { + store.dispatch(logoutSuccess()); + + window.dispatchEvent(new CustomEvent('logout')); +}; + +// Axios 요청 전 인터셉터 설정 +customAxios.interceptors.request.use( + (config) => { + const token = store.getState().auth.userData?.accessToken; + + if (token) { + config.headers.Authorization = token; + } + + // 토큰 만료 및 유효성 검사 + if (!config.url?.includes('login')) { + if (tokenExpired()) { + // 토큰이 만료되었을 경우 로그아웃 로직 처리 + logoutProcess(); + + return Promise.reject(new Error('Token Expired')); + } + } + + return config; + }, + (error: AxiosError) => { + return Promise.reject(error); + } +); + +// Axios 요청 후 인터셉터 설정 +customAxios.interceptors.response.use((response) => { + if (response.request.responseURL.includes('login')) { + const token: string = response.data['accessToken']; + + if (token) { + store.dispatch(tokenRefresh(token)); + customAxios.defaults.headers.authorization = token; + } + } else { + const token: string = response.headers.authorization; + + if (token) { + store.dispatch(tokenRefresh(token)); + customAxios.defaults.headers.authorization = token; + } + } + + return response; +}); diff --git a/src/share/utils/cryption.ts b/src/share/utils/cryption.ts new file mode 100644 index 0000000..0a96ff8 --- /dev/null +++ b/src/share/utils/cryption.ts @@ -0,0 +1,34 @@ +import cryptoJs from 'crypto-js'; + +const secretKey = process.env.REACT_APP_AES_SECRETKEY; +const iv = process.env.REACT_APP_AES_IV; + +export const aesEncrypt = (text: string): string => { + const cipher: cryptoJs.lib.CipherParams = cryptoJs.AES.encrypt(text, cryptoJs.enc.Utf8.parse(secretKey as string), { + iv: cryptoJs.enc.Utf8.parse(iv as string), + padding: cryptoJs.pad.Pkcs7, + mode: cryptoJs.mode.CBC + }); + + return cipher.toString(); +}; + +export const aesDecrypt = (encryptedText: string): string => { + const decipher: cryptoJs.lib.WordArray = cryptoJs.AES.decrypt( + encryptedText, + cryptoJs.enc.Utf8.parse(secretKey as string), + { + iv: cryptoJs.enc.Utf8.parse(iv as string), + padding: cryptoJs.pad.Pkcs7, + mode: cryptoJs.mode.CBC + } + ); + + return decipher.toString(cryptoJs.enc.Utf8); +}; + +export const sha256Encrypt = (text: string): string => { + const hash: cryptoJs.lib.WordArray = cryptoJs.SHA256(text); + + return hash.toString(cryptoJs.enc.Hex); +}; diff --git a/src/share/utils/fileUtils.ts b/src/share/utils/fileUtils.ts new file mode 100644 index 0000000..61cc3c0 --- /dev/null +++ b/src/share/utils/fileUtils.ts @@ -0,0 +1,40 @@ +export interface ValidateImageResponse { + isValid: boolean; + message?: string; +} + +// 1. image 파일 유효한지 검사하는 함수 ( 용량, 너비와 높이 - 사이즈 ) +export const validateImageFileProperties = ( + file: File, + maxSize: number, + width: number, + height: number +): ValidateImageResponse | Promise => { + if (file.size > maxSize) { + return { + isValid: false, + message: `The file must be no more than ${maxSize / 1024}KB.` + }; + } + + return new Promise((resolve) => { + const image = new Image(); + image.src = URL.createObjectURL(file); + image.onload = () => { + if (image.width !== width || image.height !== height) { + resolve({ + isValid: false, + message: `The image dimensions must be ${width}x${height} pixels.` + }); + } else { + resolve({ isValid: true }); + } + }; + image.onerror = () => { + resolve({ + isValid: false, + message: 'Image failed to load.' + }); + }; + }); +}; diff --git a/src/share/utils/objectUtils.ts b/src/share/utils/objectUtils.ts new file mode 100644 index 0000000..03b83cc --- /dev/null +++ b/src/share/utils/objectUtils.ts @@ -0,0 +1,5 @@ +export const isEmpty = (object: object): boolean => { + return Object.values(object).every( + (item) => item === null || item === undefined || (Array.isArray(item) && item.length === 0) || item === '' + ); +}; diff --git a/src/share/utils/searchBoxUtils.ts b/src/share/utils/searchBoxUtils.ts new file mode 100644 index 0000000..8894b7b --- /dev/null +++ b/src/share/utils/searchBoxUtils.ts @@ -0,0 +1,29 @@ +import { Dispatch, SetStateAction } from 'react'; + +// 검색함수 > 검색어 추출 및 setState 함수를 통해 상태 업데이트 +export const handleSearchSubmit = ( + event: React.MouseEvent | React.KeyboardEvent, + searchRef: React.RefObject, + setState: Dispatch> // setState 함수는 어떤 상태를 받더라도 동작하도록 설정 +) => { + if ( + event.type === 'click' || + (event.type === 'keydown' && (event as React.KeyboardEvent).key === 'Enter') + ) { + event.preventDefault(); + const searchKeyword = searchRef.current?.value.trim() || ''; + setState((prevState: { searchKeyword: string; page: number }) => updateSearchRequest(prevState, searchKeyword)); + } +}; + +// 상태 업데이트 시 검색어와 페이지 값 갱신 +export const updateSearchRequest = ( + prevState: T, + searchKeyword: string +): T => { + return { + ...prevState, + searchKeyword, + page: 1 + }; +}; diff --git a/src/share/utils/sortUtils.ts b/src/share/utils/sortUtils.ts new file mode 100644 index 0000000..90f9321 --- /dev/null +++ b/src/share/utils/sortUtils.ts @@ -0,0 +1,14 @@ +export const setNewSortType = (column: string, sort: string[]): string[] => { + const [currentColumn = '', currentDirection = ''] = (sort[0] || '').split(','); + + const newSortDirection = + currentColumn === column + ? currentDirection === 'desc' + ? 'asc' + : currentDirection === 'asc' + ? null + : 'desc' + : 'desc'; + + return newSortDirection ? [`${column},${newSortDirection}`] : []; +}; diff --git a/src/styles/common.css b/src/styles/common.css new file mode 100644 index 0000000..c321105 --- /dev/null +++ b/src/styles/common.css @@ -0,0 +1,191 @@ +@import 'ui-treetable.css'; + +/* 공통 width 모음 */ + +.width-5 { + width: 5%; +} +.width-8 { + width: 8%; +} +.width-10 { + width: 10%; +} +.width-12 { + width: 12%; +} +.width-14 { + width: 14%; +} +.width-15 { + width: 15%; +} +.width-17 { + width: 17%; +} +.width-18 { + width: 18%; +} +.width-20 { + width: 20%; +} +.width-25 { + width: 25%; +} +.width-30 { + width: 30%; +} +.width-40 { + width: 40%; +} +.width-45 { + width: 45%; +} +.width-50 { + width: 50%; +} + +.border_left { + border-left: 1px solid #e6e9f4; +} + +.border_right { + border-right: 1px solid #e6e9f4; +} + +.border_top { + border-top: 1px solid #e6e9f4; +} + +.main-body .page-wrapper .page-header { + margin-bottom: 20px; + padding: 10px 30px 18px 30px; +} + +.input-group { + margin-bottom: 0.25em !important; +} +.form-group { + margin-bottom: 0.5em !important; +} + +.card-body { + padding: 0.8rem 1.25rem; +} + +.table-header-box { + padding: 10px 14px; + color: #fff !important; + background-color: #4a68ab; +} +.text-overflow { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.table.table-xs th { + padding: 6px 4px; + font-size: 12px; +} +.table.table-xs td { + padding: 6px 4px 4px 4px; + font-size: 12px; +} + +.table.table-ss th { + padding: 6px 4px; + font-size: 12px; +} +.table.table-ss td { + padding: 2px 4px 0 4px; + font-size: 12px; +} + +.table thead th { + background-color: #525a77; + color: #fff; + border: 1px solid #777; + font-size: 12px; +} +.table thead th a { + font-size: 12px; +} +.table-striped tbody tr:nth-of-type(odd) { + background-color: #f5f5ff; +} + +ul, +li { + padding-left: 0; + list-style-type: none; + margin-bottom: 0; +} + +.btn-sm { + padding: 6px 7px; + line-height: 16px; + font-size: 14px; +} + +.code-modal-center { + position: fixed !important; + top: 0 !important; + right: 0 !important; + bottom: 0 !important; + left: 0 !important; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: -webkit-inline-box; + + align-items: center; + justify-content: center; + -webkit-align-items: center; + -webkit-justify-content: center; + + -webkit-box-pack: center; + -webkit-box-align: center; + -moz-box-pack: center; + -moz-box-align: center; + -ms-box-pack: center; + -ms-box-align: center; +} + +.bs-datepicker { + z-index: 99999 !important; +} + +select-dropdown > div { + z-index: 1001 !important; +} + +.md-tabs3 .nav-link.active { + color: #0070c0; + font-weight: 600; +} + +.md-tabs3 .nav-link { + transition: all 0.4s ease-in-out; + color: #7f7f7f; + border: 1px solid rgba(211, 211, 211, 1); + border-top: 8px solid #00b0f0; + margin-right: 5px; + background: white; + text-align: center; + font-weight: bold; + height: 45px; +} + +.md-tabs3 .nav-link.active, +.md-tabs3 .nav-link.active:focus, +.md-tabs3 .nav-link.active:hover { + border: 1px solid rgba(211, 211, 211, 1); + border-top: 8px solid #0070c0; + color: #0070c0; +} + +.md-tabs3 .nav-item { + min-width: 110px; +} diff --git a/src/styles/custom/custom.scss b/src/styles/custom/custom.scss new file mode 100644 index 0000000..03a3e89 --- /dev/null +++ b/src/styles/custom/custom.scss @@ -0,0 +1,1609 @@ +@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css'); + +// Sign in +.secondcertification_content { + .second_certification { + display: flex; + + .form-control { + caret-color: transparent; + border: 0; + border-bottom: 2px solid #ffc11a; + border-radius: 0; + margin: 0 2px; + text-align: center; + + &:focus, + &:active { + outline: none; + } + } + } +} + +//////////////////////////////////////////////////////////// +// alert modal +//////////////////////////////////////////////////////////// +.chartjs-tooltip { + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5); +} + +.alert_modal { + display: flex; + flex-direction: column; + width: 494px; + background: #fff; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 1001; + padding: 36px 40px 30px; + border-radius: 8px; + box-shadow: 0 1px 4px 0 rgba(21, 34, 50, 0.08); + border: solid 1px #eaeaea; + + .modal_txt { + font-family: Pretendard; + font-size: 14px; + font-weight: 400; + color: #505050; + white-space: pre-line; + } + .btn_alert { + display: flex; + justify-content: end; + gap: 0.5rem; + } +} + +//////////////////////////////////////////////////////////// +// modal +//////////////////////////////////////////////////////////// +.modal_wrapper { + position: fixed; + overflow-y: scroll; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: block; + z-index: 1000; + + .modal_content { + min-width: 758px; + position: fixed; + overflow-y: auto; + top: 50%; + left: 50%; + max-height: calc(100% - 20px); + min-height: 0; + margin: 0 auto; + border-radius: 0.5rem; + padding: 40px; + transform: translate(-50%, -50%); + background: #fff; + font-family: pretendard; + + &--wide { + width: 1280px; + } + + &::-webkit-scrollbar { + display: none; + } + + .title { + padding-bottom: 20px; + font-size: 20px; + font-family: pretendard; + border-bottom: 1px solid #e6e9f4; + margin: 0; + + .modal_title { + font-size: 20px; + font-weight: 700; + line-height: 1.5; + margin-bottom: 0; + margin-top: 0; + color: #111; + } + + &--extra-padding { + padding-top: 40px; + } + + &--with-add { + padding-top: 40px; + display: flex; + justify-content: space-between; + align-items: center; + + button { + border: 1px solid #d5d7e3; + border-radius: 4px; + min-width: 74px; + height: 36px; + background-color: #fff; + font-size: 14px; + color: #131523; + display: flex; + align-items: center; + gap: 4px; + } + } + } + + .sub_title { + display: flex; + justify-content: space-between; + padding-bottom: 20px; + font-size: 20px; + font-family: pretendard; + + .modal_title { + font-size: 20px; + font-weight: 700; + line-height: 1.5; + margin-bottom: 0; + margin-top: 0; + color: #111; + } + + .add_btn { + border: 1px solid #d5d7e3; + border-radius: 4px; + min-width: 74px; + height: 36px; + background-color: #fff; + font-size: 14px; + color: #131523; + display: flex; + align-items: center; + gap: 4px; + } + } + + .body { + .table { + width: 100%; + font-size: 14px; + margin-bottom: 40px; + + tr { + display: flex; + border-bottom: 1px solid #e6e9f4; + + th { + width: 160px; + align-self: center; + font-weight: 500; + line-height: 1.5; + padding: 1.0625rem 0.5rem; + border-bottom: none; + background-color: rgba(0, 0, 0, 0); + } + + td { + width: 100%; + line-height: 1.5; + border-left: 1px solid #e6e9f4; + padding: 15px 0.5rem; + border-bottom: none; + background-color: rgba(0, 0, 0, 0); + + &.disabled { + cursor: default; + opacity: 0.5; + pointer-events: none; + } + + &.post_textarea { + width: 100%; + } + + &.radio_date_wrap { + display: flex; + align-items: center; + } + + .status_reason { + display: block; + width: 100%; + min-height: calc(1.5em + 1rem); + padding: 0.5rem 0.75rem; + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5; + color: #131523; + background-color: #f5f6fa; + background-clip: padding-box; + border: 0 solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0; + &::placeholder { + color: rgba(0, 0, 0, 0.175); + } + } + + .info-pw { + display: flex; + align-items: center; + gap: 20px; + } + + .info-pw-wrap { + display: flex; + flex-direction: column; + gap: 10px; + + .password_flex { + display: flex; + align-items: center; + gap: 10px; + } + + .new_password_form_control { + background-clip: padding-box; + background-color: #f5f6fa; + border: 0 solid #ced4da; + color: #131523; + display: block; + flex-shrink: 0; + font-family: Pretendard; + font-size: 0.875rem; + font-weight: 300; + height: 28px; + line-height: 1.5; + padding: 0.5rem 0.75rem; + width: 60%; + } + } + } + } + + & &.my_info { + th { + width: 200px; + } + } + } + + .table--wide { + width: 100%; + tr { + align-items: center; + border-bottom: 1px solid #e6e9f4; + color: #131523; + display: flex; + font-family: pretendard; + font-size: 14px; + + th { + display: block; + font-weight: 600; + padding: 1.0625rem 0.25rem 1.0625rem 0.6rem; + width: 140px; + } + + th:nth-of-type(2) { + border-left: 1px solid #e6e9f4; + } + + td { + border-left: 1px solid #e6e9f4; + display: block; + padding: 15px 0.75rem; + width: 430px; + + .text-input { + appearance: none; + background-clip: padding-box; + background-color: #f5f6fa; + border: 0 solid #ced4da; + border-radius: 0; + color: #131523; + display: block; + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5; + padding: 0.5rem 0.75rem; + width: 100%; + } + + .file-wrap { + display: flex; + flex-direction: column; + gap: 15px; + + &--extra-padding { + padding-bottom: 15px; + } + + .file-input-wrap { + display: flex; + align-items: center; + gap: 15px; + + &.delete { + margin-bottom: 15px; + + button { + width: 15%; + height: 35px; + border: 1px solid rgb(213, 215, 227); + border-radius: 4px; + background-color: #fff; + } + } + + .file-input { + width: 85%; + appearance: none; + background-clip: padding-box; + background-color: #f5f6fa; + border: 0 solid #ced4da; + border-radius: 0; + color: #131523; + display: block; + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5; + padding: 0.5rem 0.75rem; + } + + .file-label { + width: 15%; + height: 35px; + border: 1px solid rgb(213, 215, 227); + border-radius: 4px; + margin-bottom: 0px; + + span { + display: block; + cursor: pointer; + line-height: 35px; + text-align: center; + } + + input { + display: none; + } + } + } + + .file-view { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + background-color: #f5f6fa; + padding-bottom: 15px; + + .btn_wrap { + display: flex; + justify-content: center; + gap: 5px; + padding-top: 10px; + } + + span { + font-size: 14px; + font-weight: 600; + padding: 10px 0; + text-align: center; + } + + img { + width: 250px; + height: 250px; + } + } + } + .delete_btn { + outline: none; + background-color: #fff; + border: solid 1px #c2cad4; + border-radius: 4px; + width: 32px; + height: 32px; + padding: 4px; + &.disabled { + pointer-events: none; + opacity: 0.5; + } + } + + .toggle_btn { + outline: none; + background-color: #fff; + border: solid 1px #c2cad4; + border-radius: 4px; + width: 32px; + height: 32px; + padding: 4px; + + .normal { + transform: rotate(0deg); + transition: transform 0.3s ease-in-out; + } + + .rotated { + transform: rotate(180deg); + transition: transform 0.3s ease-in-out; + } + } + } + } + } + } + .file_box { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + margin-bottom: 5px; + &:last-of-type { + margin-bottom: 0; + } + } + + .footer { + display: flex; + justify-content: center; + width: 100%; + font-family: pretendard; + gap: 10px; + margin-top: 30px; + + .left { + display: flex; + justify-content: left; + width: 100%; + gap: 10px; + } + + .right { + display: flex; + justify-content: right; + width: 100%; + gap: 10px; + } + } + } + + .black_bg { + display: block !important; + overflow-y: auto; + width: 100%; + height: 100%; + z-index: 999; + background: rgba(0, 0, 0, 0.5); + } + .file_upload { + label { + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + width: 74px; + height: 36px; + line-height: 36px; + background-color: #fff; + color: #7e84a3; + border-radius: 4px; + border: 1px solid #d5d7e3; + } + input[type='file'] { + position: absolute; + width: 0; + height: 0; + padding: 0; + overflow: hidden; + border: 0; + } + } +} + +.scheduled_datepicker { + display: flex; + align-items: center; + + &.disabled { + opacity: 0.5; + cursor: default; + } + .date_picker { + display: flex; + width: 140px; + align-items: center; + color: #131523; + background-color: #f5f6fa; + outline: 0; + box-shadow: none; + border: 1px solid #c2cad4; + border-radius: 4px; + font-family: 'Poppins'; + letter-spacing: -0.65px; + padding: 7px 34px 7px 9px; + font-weight: 500; + + .react-datepicker-popper { + transform: translate(210px, 50px) !important; + } + .react-datepicker__input-container { + background: transparent; + border: 0; + outline: none; + .sendDate { + background: transparent; + border: 0; + outline: none; + cursor: pointer; + &.disabled { + pointer-events: none; + input { + background: transparent; + box-shadow: none; + border: none; + } + } + } + } + } +} + +//////////////////////////////////////////////////////////// +// Time Picker +//////////////////////////////////////////////////////////// +.time_picker { + width: 100px; + margin-left: 10px; + + &.disabled { + opacity: 0.3; + pointer-events: none; + input { + background: transparent; + box-shadow: none; + border: none; + } + } + + .time_picker_content { + position: relative; + display: flex; + align-items: center; + color: #131523; + background-color: #f5f6fa; + outline: 0; + box-shadow: none; + border: 1px solid #c2cad4; + border-radius: 4px; + font-family: 'Poppins'; + letter-spacing: -0.65px; + padding: 1.5px 0; + font-weight: 500; + + .time_picker_input { + background: transparent; + border: 0; + outline: none; + width: 100%; + padding: 7px 14px 7px 14px; + display: block; + } + } + .time_cotainer { + display: none; + position: absolute; + width: 240px; + background: #000; + color: #e3e3e3; + align-items: center; + justify-content: space-around; + padding: 10px; + border: 1px solid #e6e9f4; + border-radius: 3px; + text-align: center; + z-index: 99; + transform: translate(-350px, -120px); + &.show { + display: flex; + } + + button { + background: transparent; + border: none; + outline: none; + box-shadow: none; + color: #e3e3e3; + } + .time_clock { + display: flex; + align-items: center; + } + .time_container_clock { + .hidden { + display: none; + } + } + } + &.batch { + margin-left: 0; + .time_picker_content { + background-color: #fff; + border: 1px solid #d7dbec; + height: 36px; + } + .time_cotainer { + transform: translate(-75px, 0px); + } + } +} + +//////////////////////////////////////////////////////////// +// Radio +//////////////////////////////////////////////////////////// +.radio_wrap { + display: flex; + flex-direction: column; + gap: 10px; + + .content { + display: flex; + align-items: center; + padding: 0; + font-size: 14px; + } + &.flex { + flex-direction: unset; + } +} + +.chartRadio_box { + border-radius: 5px; + border: 1px solid #d7dbec; + height: 36px; + margin-right: 10px; + &.batch { + margin-right: 0; + } +} + +//////////////////////////////////////////////////////////// +// pagination +//////////////////////////////////////////////////////////// +.pagination_jc { + display: flex; + justify-self: flex-end !important; + align-items: flex-end; + + button { + width: 36px; + height: 36px; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + border: 0; + border-radius: 4px; + font-weight: 400; + font-size: 16px; + font-family: 'Pretendard'; + color: #7e84a3; + background: #fff; + cursor: pointer; + + &:hover { + background: rgba(0, 0, 0, 0.05); + color: #0f111c; + } + + &:active, + &:focus { + outline: none; + } + + &.disabled { + cursor: default; + opacity: 0.5; + pointer-events: none; + } + + &.active { + background: #fec702; + border-radius: 0.25rem; + color: #fff; + } + + &.prev { + width: 36px; + height: 36px; + line-height: 36px; + display: flex; + justify-content: center; + align-items: center; + + &:hover { + background: #e9ecef; + border-radius: 0.25rem; + } + } + + &.next { + width: 36px; + height: 36px; + } + } +} + +//////////////////////////////////////////////////////////// +// Common +//////////////////////////////////////////////////////////// +.square_button { + display: block; + border-radius: 4px; + border: solid 1px #a1a7c4; + background: #fff; + color: #7e84a3; + font-size: 14px; + padding: 6px 16px; + height: 38px; + line-height: 15px; + cursor: pointer; + + &:focus, + &:active { + outline: none; + } + + &.disabled { + pointer-events: none; + opacity: 0.5; + } +} + +.none_button { + border: none; + background: none; + + &:focus, + &:active { + outline: none; + } +} + +.page-title { + font-family: 'Pretendard'; + font-size: 24px; + font-weight: 700; + margin: 0 0 41px 0; + letter-spacing: -0.48px; +} + +//////////////////////////////////////////////////////////// +// card +//////////////////////////////////////////////////////////// +.top-wrap { + animation: 0.4s ease-in-out topMenuEffect; +} +@keyframes topMenuEffect { + 0% { + opacity: 0; + transform: translateX(-100%); + } + + 100% { + opacity: 1; + transform: translateX(0%); + } +} + +.sub-wrap { + animation: 0.4s ease-in-out subMenuEffect; +} + +@keyframes subMenuEffect { + 0% { + opacity: 0; + transform: translateX(50%); + } + + 100% { + opacity: 1; + transform: translateX(0%); + } +} + +.card .card-header h5 { + font-size: 20px; + font-weight: 700; + letter-spacing: -0.4px; + font-family: Pretendard; +} + +//////////////////////////////////////////////////////////// +// list +//////////////////////////////////////////////////////////// +/// + +.list_header { + display: flex; + align-items: center; + justify-content: space-between; + + .header_box { + display: flex; + gap: 1rem; + + .modal_add_btn { + button { + border: 1px solid #d5d7e3; + border-radius: 4px; + min-width: 74px; + height: 36px; + background-color: #fff; + font-size: 14px; + color: #131523; + display: flex; + align-items: center; + gap: 4px; + + &:focus { + outline: none; + } + } + } + } + + .title-wrap { + display: flex; + align-items: center; + } +} + +.list_table { + width: 100%; + border-top: 1px solid #e6e9f4; + font-size: 12px; + color: #131523; + font-family: pretendard; + + table { + width: 100%; + display: flex; + flex-direction: column; + height: 100%; + + .form-check { + padding-left: 0; + margin-bottom: -0.2rem; + + input[type='checkbox'] { + display: none; + } + + input[type='checkbox'] + label { + height: 23px; + cursor: pointer; + padding-left: 23px; + background-repeat: no-repeat; + background-image: url('../images/icons/btn-check-box-default.svg'); + background-position: left; + } + + input[type='checkbox']:checked + label { + background-image: url('../images/icons/btn-check-box-active.svg'); + } + } + + thead { + display: block; + border-bottom: 1px solid #e6e9f4; + + tr { + width: 100%; + display: flex; + align-items: center; + height: 50px; + + th { + display: flex; + justify-content: center; + text-align: center; + font-weight: 500; + padding: 1.0625rem 0.5rem; + + button { + background: none; + border: none; + + &:focus { + outline: none; + } + } + + &.status { + position: relative; + + .status_img, + .open { + img { + transition: transform 0.2s ease-in-out; + width: 20px; + height: 20px; + } + } + .open img { + transform: rotate(180deg); + } + + ul { + &.status_dropdown_menu { + position: absolute; + top: 40px; + left: 50%; + transform: translateX(-50%); + margin: 0px; + box-shadow: 0 1px 4px 0 rgba(21, 34, 50, 0.1); + background: #fff; + border-radius: 0.25rem; + z-index: 10; + + li { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: 400; + color: #131523; + text-align: initial; + white-space: nowrap; + background-color: transparent; + border: 0; + + button { + color: #131523; + + i { + width: 10px; + height: 10px; + border-radius: 50%; + display: inline-block; + vertical-align: middle; + margin-right: 10px; + transform: translateY(-1px); + background: #fec702; + + &.all { + background: linear-gradient(126deg, red, orange, yellow, green, blue, navy, purple); + opacity: 0.7; + } + + &.normal, + &.my_status_1 { + background: #21d59b; + } + + &.block, + &.my_status_0 { + background: #f0142f; + } + &.report, + &.my_status_2 { + background: #fec702; + } + + &.withdraw { + background: #c2cad4; + } + } + } + } + } + } + } + } + } + } + + tbody { + width: 100%; + + &::-webkit-scrollbar { + width: 6px; + height: 6px; + background-color: transparent; + } + + &::-webkit-scrollbar-track { + border-radius: 0; + background-color: transparent; + } + + &::-webkit-scrollbar-thumb { + border-radius: 9px; + background-color: #a5a7ab; + } + + tr { + width: 100%; + display: flex; + border-bottom: 1px solid #e6e9f4; + + .terms { + width: 100%; + } + + th, + td { + display: flex; + align-items: center; + vertical-align: middle; + justify-content: center; + padding: 15px 0.5rem; + text-align: center; + + .img_box { + position: relative; + display: flex; + justify-content: center; + align-items: center; + width: 80px; + height: 80px; + border-radius: 5px; + overflow: hidden; + cursor: pointer; + img { + width: 80px; + height: 80px; + object-fit: cover; + } + .ico_play { + width: 35px; + height: 35px; + position: absolute; + transform: translate(-50%, -50%); + top: 50%; + left: 50%; + opacity: 0.8; + } + } + + i { + width: 10px; + height: 10px; + border-radius: 50%; + display: inline-block; + vertical-align: middle; + margin-right: 10px; + transform: translateY(-1px); + + &.my_status_1, + &.my_status_P, + &.normal { + background: #21d59b; + } + + &.my_status_2, + &.my_status_C { + background: #fec702; + } + + &.my_status_3, + &.my_status_S, + &.block { + background: #f0142f; + } + + &.my_status_4, + &.withdraw { + background: #c2cad4; + } + } + + .list_edit_button { + border-radius: 4px; + border: solid 1px #a1a7c4; + background: #fff; + color: #7e84a3; + font-size: 14px; + padding: 6px 16px; + height: 30px; + line-height: 15px; + cursor: pointer; + + &:hover { + background: #6c757d; + color: #fff; + } + + &:focus { + border: solid 1px #a1a7c4; + outline: none; + } + } + &.term { + width: 10vw; + font-size: 14px; + font-weight: 500; + } + } + } + .status_wrap { + .my_status_0 { + background: #f0142f; + } + .my_status_1 { + background: #21d59b; + } + + .my_status_2 { + background: #fec702; + } + } + } + } +} +.list_item { + position: relative; +} +.button_wrap { + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.text_area { + width: 80%; + max-width: 80vw; + justify-content: center; + display: inline-block; + border: 1px solid #e6e9f4; + border-bottom: none; +} +.tooltip_cont { + width: 40vw; + position: relative; + display: inline-block; + cursor: default; + .tooltip_txt { + visibility: hidden; + width: 100%; + max-width: 1000px; + background-color: #ffffff; + border: 1px solid #aaa; + color: #111; + text-align: center; + padding: 5px; + position: absolute; + bottom: 70%; + z-index: 1; + opacity: 0; + font-size: 14px; + transition: opacity 0.3s; + box-sizing: border-box; + &.center { + transform: translateX(-50%); + width: 100%; + } + } + &.bottom .tooltip_txt { + bottom: auto; + } +} + +.tooltip_cont:hover .tooltip_txt { + visibility: visible; + opacity: 1; +} + +.content_wrap { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.list_footer { + display: flex; + justify-content: flex-end; + margin-top: 40px; + + .left { + display: flex; + justify-content: left; + width: 100%; + gap: 10px; + } + + .right { + display: flex; + justify-content: right; + width: 100%; + gap: 10px; + } + + .delete_btn { + outline: none; + background-color: #fff; + border: solid 1px #c2cad4; + border-radius: 4px; + width: 32px; + height: 32px; + padding: 4px; + } +} + +//////////////////////////////////////////////////////////// +// chart radio +//////////////////////////////////////////////////////////// + +.chart_radio_label { + font-family: 'Poppins'; + padding: 0 12px; + display: inline-block; + line-height: 36px; + color: #131523; + cursor: pointer; + font-size: 12px; + background: none; + margin: 0; + width: 70px; + text-align: center; +} +input[type='radio']:checked + label { + background: #fec702; + color: #fff; + border-radius: 5px; +} + +////////////////// +/// Datepicker +///////////////// + +.datepicker-group-right { + margin: 0 0 30px auto; + background-color: white; + font-size: 20px; +} + +.datepicker-group { + width: 270px; + padding: 0 1rem; + height: 36px; + border-radius: 18px; + display: flex; + justify-content: center; + align-items: center; + border: 1px solid #d7dbec; + text-align: center; + + &.batch { + width: fit-content; + } + + .startDate { + cursor: pointer; + &::placeholder { + font-size: 13px; + font-family: Pretendard; + } + } + .endDate { + cursor: pointer; + &::placeholder { + font-size: 13px; + font-family: Pretendard; + } + } + + &.Days.none { + display: none; + } + &.Months.none { + display: none; + } + &.Years.none { + display: none; + } + + .calendar_img { + img { + padding: 0 3px; + } + } + + span { + padding-right: 10px; + } + + input[type='text'] { + background: none; + padding-left: 14px; + padding-right: 14px; + width: 95px; + border: 0; + padding: 0; + text-align: center; + font-weight: 500; + border-radius: 4px; + font-family: 'Poppins'; + letter-spacing: -0.65px; + font-size: 0.875rem; + font-weight: 500; + &.selected_date { + width: 100%; + } + } +} + +///////////// +//react-datepicker +///////////// +.react-datepicker__year--container { + font-family: Pretendard; + padding: 25px; + border: none; + border-radius: 3px; + box-shadow: none; + background: #1b1b1b; + color: #e3e3e3; + .react-datepicker-year-header { + background: #1b1b1b; + color: #e3e3e3; + } + + .react-datepicker__year-wrapper { + justify-content: space-between; + .react-datepicker__year-text { + padding: 10px 10px; + &:hover { + background-color: #f0f0f02e; + } + &.react-datepicker__year-text--selected { + background-color: #4db2ff; + } + &.react-datepicker__year-text--disabled { + color: rgba(232, 230, 227, 0.38); + } + } + } +} + +.react-datepicker__month { + .react-datepicker__month-text { + padding: 10px 10px; + &:hover { + background-color: #f0f0f02e; + } + &.react-datepicker__month-text--keyboard-selected { + background-color: #4db2ff; + } + &.react-datepicker__month--disabled { + color: rgba(232, 230, 227, 0.38); + } + } +} +.react-datepicker__month-container { + font-family: Pretendard; + .react-datepicker__header { + padding: 0; + .react-datepicker__current-month { + font-size: 12px; + } + } + .react-datepicker__day-names { + font-size: 12px; + display: flex; + margin-bottom: -8px; + justify-content: space-between; + margin: 10px -6px; + .react-datepicker__day-name { + margin: 0; + } + } + .react-datepicker__month { + margin: 0; + } + .react-datepicker__week { + margin: 10px -11px; + &:last-child { + margin: 0px -11px; + } + .react-datepicker__day { + font-size: 12px; + &:hover { + background-color: #f0f0f02e; + } + &.react-datepicker__day--disabled { + color: rgba(232, 230, 227, 0.38); + } + } + } +} +.react-datepicker__navigation { + top: 20px; + &:focus, + &:active { + outline: none; + } + + &.react-datepicker__navigation--previous { + left: 25px; + right: 0; + } + &.react-datepicker__navigation--next { + right: 25px; + } + + .react-datepicker__navigation-icon { + top: 4px; + &.react-datepicker__navigation-icon--previous { + left: -12px; + &::before { + right: -10px; + width: 7px; + height: 7px; + position: absolute; + top: 6px; + border-color: #fff; + border-style: solid; + border-width: 2px 2px 0 0; + } + } + &.react-datepicker__navigation-icon--next { + left: 12px; + &::before { + left: -10px; + width: 7px; + height: 7px; + position: absolute; + top: 6px; + border-color: #fff; + border-style: solid; + border-width: 2px 2px 0 0; + } + } + } +} +.react-datepicker__month-container { + color: #e3e3e3; + background-color: #1b1b1b; + width: 340px !important; + padding: 25px; + border: none; + border-radius: 3px; + box-shadow: none; + .react-datepicker__header { + background-color: #1b1b1b; + border: none; + color: #e3e3e3; + .react-datepicker__current-month { + color: #e3e3e3; + } + .react-datepicker__day-name { + color: rgba(232, 230, 227, 0.5); + } + } + .react-datepicker__week { + display: grid; + grid-template-areas: 'a a a a a a a'; + grid-auto-rows: 40px; + grid-auto-columns: 14.2857142857%; + } + .react-datepicker__day { + color: #e3e3e3; + width: 80%; + height: 85%; + line-height: 1.5; + border-radius: 999px; + align-items: center; + justify-content: center; + box-sizing: border-box; + display: flex; + &.react-datepicker__day--today { + position: relative; + &::before { + content: ''; + display: inline-block; + border: solid transparent; + position: absolute; + bottom: 4px; + right: 0px; + transform: rotate(-225deg); + width: 0; + height: 0; + border-bottom: 5px solid #4db2ff; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + } + } + } + .react-datepicker__day--selected { + border-radius: 50px; + background-color: #4db2ff; + color: #fff; + text-shadow: 0 -1px 0 rgba(232, 230, 227, 0.25); + &.react-datepicker__day--today { + position: relative; + &::before { + border-bottom: 5px solid #000000; + } + } + } +} + +//////////////////////////////////////////////////////////// +// textarea, text input 스타일 +//////////////////////////////////////////////////////////// +.form_control { + display: block; + width: 100%; + padding: 0.5rem 0.75rem; + font-size: 0.875rem; + font-weight: 400; + line-height: 1.5; + color: #131523; + background-color: #f5f6fa; + background-clip: padding-box; + border: 0 solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0; + &.readonly { + cursor: default; + } +} + +.content_textbox { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-weight: 400; + font-size: 14px; + line-height: 1.5; + color: #212529; + min-height: 80px; + appearance: none; + background-color: #f5f6fa; + background-clip: padding-box; + border: none; + &.readonly { + cursor: default; + } +} + +//////////////////////////////////////////////////////////// +// react-select : selectbox 최소 너비 설정 +//////////////////////////////////////////////////////////// +.css-13cymwt-control, +.css-t3ipsp-control { + min-width: 10vw; +} + +// Terms/Privacy Select custom +.term_type { + .css-13cymwt-control, + .css-t3ipsp-control { + min-width: 5vw; + } +} +.term_opt { + .css-13cymwt-control, + .css-t3ipsp-control { + width: 50vw; + } +} + +//////////////////////////////////////////////////////////// +// Gallery Modal Swiper 세팅 +//////////////////////////////////////////////////////////// +.swiper-wrapper { + width: calc(100vw - 120px); + gap: 10px; +} diff --git a/src/styles/images/btn-check-box-active.svg b/src/styles/images/btn-check-box-active.svg new file mode 100644 index 0000000..2d56777 --- /dev/null +++ b/src/styles/images/btn-check-box-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/styles/images/btn-check-box-default.svg b/src/styles/images/btn-check-box-default.svg new file mode 100644 index 0000000..c809459 --- /dev/null +++ b/src/styles/images/btn-check-box-default.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/styles/images/icons/btn-check-box-active.svg b/src/styles/images/icons/btn-check-box-active.svg new file mode 100644 index 0000000..2d56777 --- /dev/null +++ b/src/styles/images/icons/btn-check-box-active.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/styles/images/icons/btn-check-box-default.svg b/src/styles/images/icons/btn-check-box-default.svg new file mode 100644 index 0000000..c809459 --- /dev/null +++ b/src/styles/images/icons/btn-check-box-default.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/styles/images/icons/btn-radio-active.svg b/src/styles/images/icons/btn-radio-active.svg new file mode 100644 index 0000000..8a34035 --- /dev/null +++ b/src/styles/images/icons/btn-radio-active.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/styles/images/icons/btn-radio-default.svg b/src/styles/images/icons/btn-radio-default.svg new file mode 100644 index 0000000..287e129 --- /dev/null +++ b/src/styles/images/icons/btn-radio-default.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/styles/images/icons/chevron-left.svg b/src/styles/images/icons/chevron-left.svg new file mode 100644 index 0000000..8decb93 --- /dev/null +++ b/src/styles/images/icons/chevron-left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/chevron-right.svg b/src/styles/images/icons/chevron-right.svg new file mode 100644 index 0000000..a9899dd --- /dev/null +++ b/src/styles/images/icons/chevron-right.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-admin-profile-default.svg b/src/styles/images/icons/ic-admin-profile-default.svg new file mode 100644 index 0000000..b4e79ce --- /dev/null +++ b/src/styles/images/icons/ic-admin-profile-default.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/styles/images/icons/ic-affiliate-dafault.svg b/src/styles/images/icons/ic-affiliate-dafault.svg new file mode 100644 index 0000000..1e17fdb --- /dev/null +++ b/src/styles/images/icons/ic-affiliate-dafault.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-arrow-down.svg b/src/styles/images/icons/ic-arrow-down.svg new file mode 100644 index 0000000..ee1482a --- /dev/null +++ b/src/styles/images/icons/ic-arrow-down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-arrow-up.svg b/src/styles/images/icons/ic-arrow-up.svg new file mode 100644 index 0000000..97a5255 --- /dev/null +++ b/src/styles/images/icons/ic-arrow-up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-bell.png b/src/styles/images/icons/ic-bell.png new file mode 100644 index 0000000000000000000000000000000000000000..4238bd79b6edaf8e33406fc1bc7bdceea6ae34cb GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w#Q>iWSN8&+y5_~TEsJZK7dJG_ zuLZK37d5ml1B%qPE~;x;yg00L8X&;1iESn`%WAG0 y;s^ImxEi;S=iJ7qtyzY14$s+ghN1od1A~Z`+EN>vEmMK6VeoYIb6Mw<&;$Uu{9EJz literal 0 HcmV?d00001 diff --git a/src/styles/images/icons/ic-bell.svg b/src/styles/images/icons/ic-bell.svg new file mode 100644 index 0000000..29961da --- /dev/null +++ b/src/styles/images/icons/ic-bell.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/styles/images/icons/ic-bin.svg b/src/styles/images/icons/ic-bin.svg new file mode 100644 index 0000000..8c266a7 --- /dev/null +++ b/src/styles/images/icons/ic-bin.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/styles/images/icons/ic-calendar.svg b/src/styles/images/icons/ic-calendar.svg new file mode 100644 index 0000000..24a01b2 --- /dev/null +++ b/src/styles/images/icons/ic-calendar.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/styles/images/icons/ic-chevron-down.svg b/src/styles/images/icons/ic-chevron-down.svg new file mode 100644 index 0000000..78d40b2 --- /dev/null +++ b/src/styles/images/icons/ic-chevron-down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-chevron-up.svg b/src/styles/images/icons/ic-chevron-up.svg new file mode 100644 index 0000000..7c61b91 --- /dev/null +++ b/src/styles/images/icons/ic-chevron-up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-clock-active.svg b/src/styles/images/icons/ic-clock-active.svg new file mode 100644 index 0000000..e94d990 --- /dev/null +++ b/src/styles/images/icons/ic-clock-active.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/styles/images/icons/ic-dollar-default.svg b/src/styles/images/icons/ic-dollar-default.svg new file mode 100644 index 0000000..8148f33 --- /dev/null +++ b/src/styles/images/icons/ic-dollar-default.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-emiticon-default.svg b/src/styles/images/icons/ic-emiticon-default.svg new file mode 100644 index 0000000..1562f4a --- /dev/null +++ b/src/styles/images/icons/ic-emiticon-default.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/styles/images/icons/ic-help-y.svg b/src/styles/images/icons/ic-help-y.svg new file mode 100644 index 0000000..2b86b57 --- /dev/null +++ b/src/styles/images/icons/ic-help-y.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/styles/images/icons/ic-help.svg b/src/styles/images/icons/ic-help.svg new file mode 100644 index 0000000..ab3b584 --- /dev/null +++ b/src/styles/images/icons/ic-help.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/styles/images/icons/ic-home.svg b/src/styles/images/icons/ic-home.svg new file mode 100644 index 0000000..a3984d5 --- /dev/null +++ b/src/styles/images/icons/ic-home.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/styles/images/icons/ic-invoice.svg b/src/styles/images/icons/ic-invoice.svg new file mode 100644 index 0000000..93d0ba6 --- /dev/null +++ b/src/styles/images/icons/ic-invoice.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/styles/images/icons/ic-logout.svg b/src/styles/images/icons/ic-logout.svg new file mode 100644 index 0000000..db0ca92 --- /dev/null +++ b/src/styles/images/icons/ic-logout.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/styles/images/icons/ic-manage-payments-default.svg b/src/styles/images/icons/ic-manage-payments-default.svg new file mode 100644 index 0000000..93d0ba6 --- /dev/null +++ b/src/styles/images/icons/ic-manage-payments-default.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/styles/images/icons/ic-manage-points-default.svg b/src/styles/images/icons/ic-manage-points-default.svg new file mode 100644 index 0000000..d17ccd6 --- /dev/null +++ b/src/styles/images/icons/ic-manage-points-default.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-plus.svg b/src/styles/images/icons/ic-plus.svg new file mode 100644 index 0000000..f9c2330 --- /dev/null +++ b/src/styles/images/icons/ic-plus.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/styles/images/icons/ic-search.svg b/src/styles/images/icons/ic-search.svg new file mode 100644 index 0000000..e7250f7 --- /dev/null +++ b/src/styles/images/icons/ic-search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/styles/images/icons/ic-setting.svg b/src/styles/images/icons/ic-setting.svg new file mode 100644 index 0000000..00fb138 --- /dev/null +++ b/src/styles/images/icons/ic-setting.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/styles/images/icons/ic-user.svg b/src/styles/images/icons/ic-user.svg new file mode 100644 index 0000000..cae2e5f --- /dev/null +++ b/src/styles/images/icons/ic-user.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/styles/images/icons/ic-users.svg b/src/styles/images/icons/ic-users.svg new file mode 100644 index 0000000..946d6c0 --- /dev/null +++ b/src/styles/images/icons/ic-users.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/styles/images/logo/login-logo.png b/src/styles/images/logo/login-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e5b8906833b5d2c8cdb24afac7514fa53b7e27 GIT binary patch literal 1537 zcmV+c2LAbpP)0{{R3e&WM;0001NP)t-sM{rCL z6Cn^2ArTWH5)>j56e1B5ArcfK5fUN|5*`v1A`%lK|G^nsN*NLqA`%oL5E39XF983+ z8UMi<|HBpk!5RO-82`Z;|G^pm!59-2Bmcn~|NsC0(Nh26kN^Ab|Hv}`@yh?|u>ae3 zwCR_t0000QbW%=J07Fq^z?ydFIT+c5feQ7lCiysGmYTAPT6xQR=iljo@-f5AFrcPMWVeZPO7@$bwr1I- zNiL8iT`l%5&ZV+Ht`Iodrum@k*Qe`Eu9S4UE+xnL2uapt;D;n1C!5tEr}=1!qg4>2 zIG-RfTEkkNguD*uG@mH(zYwFinDtcvI`ly}smC#&A%}O4+0`3y=JgJ;yI_BUYuzSu znDcigCopTop5=_pwl^H#NAADM>us4O{Sq^1J7?H^-Lk85QJfaB?w6RYCv&Ecjm&b( zE{meL3}m6(?_f4NX7IYtRxrOY30+pt18UB159VqKH@570KFIx7(a8B!eSAeP>$mq3 z_jM_HIm^8F{wtU@w}BoTpLY@^p9@N^66oDmFhBAzYkVHI8A3i^u9wRo^yW*LC&^wG zm+!=7^GCC;PaiezC7HKEk_)ZbM(gD?&mF?Rv$1EwhshbOkbV{Emg!;Jv<$>Dhi&tF z_U*!ZBhU05x|bIi#BNq^+t=2Oh?lwGK8Sl`;Hq-4k~QWUT5R2t;+WIt30dH3n9CWE zkGlr8!7x7quBm~pm01G;yX)ok`w_4G$*&z+7pxJ)#4CoE^TU|WT%azh(OXK?X9@KS zLylRusTRJ384_)#v-2$A0Lx~XiAf2duESu6*)j~DT9_u#p~)y(%6xx5ARdoI;rUdkM9Cboo|1Ip zHFGxzTj!iO%UtWx^@urmc%sOs+e?@+ptoJkR+H6prDRsxb~haVx$EhFs+keyc7Coc zVGh`N#E4$Ojp`)KkaaM=Xgw=JBp~WX2na(UCPj-pF>}Nk4`4A2IkVM0-loikkIz+IE4Y@7)IO|I$7h#S z5j8?UC6x}SD6o= zT+g4;v-T=8TM&z|%5Ot~-$wR=dKNjcDa?s9^(1P|bbNN$SWC>qGI~C|#+*tkTf};` zs64E*1l$!W`;FEjdfvXq%-4EDvL@6Y4vX?_+(r`vXN&4t5Upg)=W$h%9?=e<0RwJd z6%v~y-vGWT-B*1`&w?u8qtaUnN};E5XE*Bob1-)Q{3$()($AY9$-D__y@~MlkgsBP z?PZxcJ`S8=o+6?4h|Ez5K{ru#|l`OpkxazOyCPwB}d>K1sIqx^?_)>B^(zug& nMc;gHj~j&?j=SBOK85`Qt$(Bka}0jI00000NkvXXu0mjfRjl=H literal 0 HcmV?d00001 diff --git a/src/styles/images/logo/logo-main.png b/src/styles/images/logo/logo-main.png new file mode 100644 index 0000000000000000000000000000000000000000..fbafa0e853433ca6a3ff9de263e6e131e7620ead GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^=|C*Q!3-q5s{&5~sg?kr5LfpCAAbiCK@lY(2ohF+ zGQeC8en}wr|3M(BEFh%7FQ5oy3koX&)dNY8)L{{z2m}GSd_s!<4*(T|l>I*_0U{5H z35zQKKPdGd2rdNwf6(*){h|NI^#A{Q@&C(}|97hYKVSS!__;99J&Gkke!&cE8As1* zw7;D5nRofuUnY{1gWO`Si#I1c-KM;<@|bRclm1(F4h9CM1Wy;o5Rc-_t3Y7PG0oD5FaO@ZU&5{1Gsk#wzn!}M8ctPxPdl*|w%c-LrV%At<}YfuO%+JJ z_$qeE*_HDmw$ySzOAfE!{z-Pmigoc^hh_?&bMgN==kJYOtjP!eOl;Wr$S&&Eo$I$V z+-5JgEND?Jmy#%5`*3knn18X>F^zw6F*A=$pZEFQX|b01PnXmcg!36i?f$qf)9T(C zKaOhQS9Ws>4(+{HV*k%1^!4(UZQpZax0~l_SHg1VEcPV2&mVW6-#dVHU?#HYrn(s&aTF2*{ z>Fv=c5L$geX7#r0+h3i3>xJ`5t(y3Jb@4TgrAnq#=RKNHQxw@}Vddhi%zUqbWr^vY z=hHdc9q##D-#G2)Pl?LbhZj_)i2k-{*X=fZ-eDs??M{J|-KKrA#Tz^n|H-JbpHn{M z&BLz6;o7@UWy6&s7meUv?X^65m-7DH^7}Py1$R*WHK(+FSGO*|9j~!#hsgONEk%pc znQrXO3--6IyE^evN65^l0cQ_>oWUHrYlB7bIiZz74_o^87jIb?>ZEIZb30RZsm%ey z?=NkiuPIeftK@N3pC)s0R%%!AFNJi8fb~~vUf#;*ztj>Ly?8>@d%<&RtDc{=bC)eu z4=SDijLSuSHow#J$}>OqP6(MI>gdEFc*wiC>7rICr{yBsBP||GPDgl*3%;Mw=V}OR z>G-4ABJT)yY!HNF2B YEqC>oo^ze#2TYg@p00i_>zopr071!m_y7O^ literal 0 HcmV?d00001 diff --git a/src/styles/partials/_general.scss b/src/styles/partials/_general.scss new file mode 100644 index 0000000..ad9a0a9 --- /dev/null +++ b/src/styles/partials/_general.scss @@ -0,0 +1,919 @@ +/** ===================== + Custom css start +========================== **/ +body { + font-family: $theme-font-family; + font-size: $theme-font-size; + color: $theme-font-color; + font-weight: 400; + background: $theme-background; + position: relative; +} + +* { + &:focus { + outline: none; + } +} + +a { + &:hover { + outline: none; + text-decoration: none; + } +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: $theme-heading-color; + font-weight: 400; +} + +h1 { + font-size: 48px; +} + +h2 { + font-size: 44px; +} + +h3 { + font-size: 26px; +} + +h4 { + font-size: 20px; +} + +h5 { + font-size: 18px; +} + +h6 { + font-size: 14px; +} + +p { + font-size: 14px; +} + +strong { + font-weight: 400; +} + +.img-radius { + border-radius: 50%; +} + +.page-header-title + .breadcrumb { + background: transparent; + padding: 0; + + > .breadcrumb-item { + a { + color: #888; + } + + &:last-child a { + color: #111; + font-weight: 600; + } + } +} + +.theme-bg { + background: $theme-color; +} + +.theme-bg2 { + background: $theme-color2; +} +/* ========== card css start =========== */ + +.anim-rotate { + animation: anim-rotate 1s linear infinite; +} +@keyframes anim-rotate { + 100% { + transform: rotate(360deg); + } +} + +.anim-close-card { + animation: anim-close-card 1.4s linear; +} +@keyframes anim-close-card { + 100% { + opacity: 0.3; + transform: scale3d(0.3, 0.3, 0.3); + } +} + +p.text-muted { + font-size: 13px; +} + +.card { + /* junny */ + border-radius: 10px; + /*border-radius: 0;*/ + box-shadow: 0 1px 20px 0 rgba(69, 90, 100, 0.08); + border: none; + margin-bottom: 30px; + transition: all 0.5s ease-in-out; + padding: 40px 30px; + + .card-header { + background-color: transparent; + // border-bottom: 1px solid #f1f1f1; + border: none; + padding: 0px; + position: relative; + margin-bottom: 20px; + + + .card-block, + + .card-body { + } + + h5 { + margin-bottom: 0; + color: #000; + font-size: 17px; + font-weight: 400; + display: inline-block; + margin-right: 10px; + line-height: 1.1; + position: relative; + + /* junny */ + /*&:after { + content: ""; + background-color: $primary-color; + position: absolute; + left: -25px; + top: 0; + width: 4px; + height: 20px; + }*/ + } + + &.borderless { + border-bottom: none; + + h5:after { + display: none; + } + } + + .card-header-right { + right: 10px; + top: 10px; + display: inline-block; + float: right; + padding: 0; + position: absolute; + @media only screen and (max-width: 575px) { + display: none; + } + + .dropdown-menu { + margin-top: 0; + + li { + a { + font-size: 14px; + text-transform: capitalize; + } + } + } + + .btn.dropdown-toggle { + border: none; + background: transparent; + box-shadow: none; + color: #888; + + i { + margin-right: 0; + } + + &:after { + display: none; + } + + &:focus { + box-shadow: none; + outline: none; + } + } + } + } + + .card-footer { + border-top: 1px solid #f1f1f1; + background: transparent; + padding: 25px; + } + + .card-block, + .card-body { + padding: 0; + } + + &.card-load { + position: relative; + overflow: hidden; + + .card-loader { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + background-color: rgba(256, 256, 256, 0.7); + z-index: 999; + + i { + margin: 0 auto; + color: $primary-color; + font-size: 24px; + align-items: center; + display: flex; + } + } + } + + &.full-card { + z-index: 99999; + border-radius: 0; + } +} +/* ========== scrollbar End =========== */ + +.scroll-y { + z-index: 1027; +} +/* ========== scrollbar End =========== + ========== card css End =========== + ================================ Dropdown Start ===================== */ + +.dropdown-menu { + padding: 20px 0; + margin-top: 15px; + box-shadow: 0 1px 10px 0 rgba(69, 90, 100, 0.2); + border: none; + + &.show { + &:before { + content: '\63'; + font-family: 'pct'; + position: absolute; + left: 15px; + top: -5px; + z-index: 1001; + font-size: 40px; + line-height: 0; + color: #fff; + text-shadow: 0 -2px 2px rgba(69, 90, 100, 0.12); + } + + &.dropdown-menu-right { + &:before { + left: auto; + right: 5px; + } + } + } + + &[x-placement='top-start'] { + margin-bottom: 15px; + margin-top: 0; + + &.show { + &:before { + content: '\64'; + bottom: -5px; + top: auto; + text-shadow: 0 2px 2px rgba(69, 90, 100, 0.12); + } + } + } + + > li { + padding-left: 15px; + padding-right: 15px; + + > a { + padding: 5px; + color: $theme-font-color; + + i { + font-size: 15px; + display: inline-flex; + align-items: center; + justify-content: center; + margin-right: 10px; + } + } + + &.active, + &:active, + &:focus, + &:hover { + background: transparentize($primary-color, 0.9); + + > a { + background: transparent; + } + } + } +} +/* ================================ Dropdown End ===================== */ +@media (min-width: 1600px) { + .container { + max-width: 1540px; + } +} +@media (max-width: 992px) { + .container { + max-width: 100%; + } +} +/* ======================================================== + =============== document ====================== + ======================================================== + + Grid examples +*/ + +.bd-example-row { + background: $theme-background; + padding: 15px; + margin-bottom: 15px; + + .row { + > [class^='col-'], + > .col { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + background-color: rgba(86, 61, 124, 0.15); + border: 1px solid rgba(86, 61, 124, 0.2); + } + } + + .row + .row { + margin-top: 1rem; + } + + .flex-items-bottom, + .flex-items-middle, + .flex-items-top { + min-height: 6rem; + background-color: rgba(255, 0, 0, 0.1); + } +} + +.bd-example-row-flex-cols .row { + min-height: 10rem; + background-color: rgba(255, 0, 0, 0.1); +} + +/* Docs examples */ + +.bd-example { + position: relative; + padding: 1rem; + margin: 1rem; + border: solid #ddd; + border-width: 0.2rem 0 0; + @media only screen and (max-height: 575px) { + padding: 1.5rem; + margin-right: 0; + margin-left: 0; + border-width: 0.2rem; + } +} +/* Example modals */ + +.modal { + z-index: 1072; + + .popover, + .tooltip { + z-index: 1073; + } +} + +.modal-backdrop { + z-index: 1071; +} + +.bd-example-modal { + background-color: #fafafa; + + .modal { + position: relative; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 1; + display: block; + } + + .modal-dialog { + left: auto; + margin-right: auto; + margin-left: auto; + } +} +/* Example tabbable tabs */ + +.bd-example-tabs .nav-tabs { + margin-bottom: 1rem; +} + +/* Code snippets */ + +.highlight { + padding: 1rem; + margin-top: 1rem; + margin-bottom: 1rem; + background-color: #f3f2fb; + -ms-overflow-style: -ms-autohiding-scrollbar; + @media only screen and (max-height: 575px) { + padding: 1.5rem; + } +} + +.bd-content .highlight { + margin-right: 15px; + margin-left: 15px; + @media only screen and (max-height: 575px) { + margin-right: 0; + margin-left: 0; + } +} + +.highlight { + pre { + padding: 0; + margin-top: 0; + margin-bottom: 0; + background-color: transparent; + border: 0; + } + + pre code { + font-size: inherit; + color: #333; + } +} + +/* ======================================================================= + =============== Ui kit copy model style ====================== */ + +/* Code examples */ +.datta-example { + position: relative; + + .datta-example-btns { + position: absolute; + right: 30px; + top: -10px; + opacity: 0; + transform: rotateX(-90deg); + transition: all 0.3s ease-in-out; + + .datta-example-btn { + display: inline-block; + line-height: 1; + font-weight: 600; + background: $primary-color; + color: #fff; + padding: 0.1875rem 0.3125rem; + border-radius: 2px; + white-space: nowrap; + font-size: 11px; + margin: 0 4px; + + &.copy::before { + content: 'COPY'; + } + + &.copied { + background: $success-color !important; + color: #fff !important; + + &::before { + content: 'COPIED!'; + } + } + } + } + + &:hover .datta-example-btns { + top: -21px; + transform: rotateX(0deg); + opacity: 1; + } +} +/* Modal */ + +.datta-example-modal { + position: fixed; + z-index: 1099; + top: 0; + right: 0; + width: 100%; + height: 100%; + overflow: hidden; + background: #282c34; + transform-origin: 50% 0; + transform: scale(0); + transition: all 0.3s ease-in-out; +} + +.datta-example-modal-opened { + overflow: hidden !important; + + .datta-example-modal { + transform: scale(1); + } +} + +.datta-example-modal-content { + max-width: 100vw; + margin: auto; + padding: 50px; + height: 100vh; + overflow: auto; + > pre { + overflow: hidden; + width: fit-content; + + > code { + padding: 0; + background: none; + font-size: 16px; + } + } +} + +.md-datta-example-modal-copy { + display: block; + position: fixed; + top: 90px; + right: 30px; + margin-right: 8px; + font-size: 1.5rem; + border-radius: 50%; + padding: 10px 15px; + background: $primary-color; + color: #fff; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2); + z-index: 1; + white-space: nowrap; + + &:hover { + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2); + color: #fff; + } + + &.copied::before { + content: 'Copied to Clipboard Successfully ! . . .'; + position: absolute; + display: block; + right: 100%; + margin-right: 10px; + font-size: 14px; + background: $success-color; + line-height: 24px; + height: 24px; + border-radius: 3px; + padding: 0 6px; + top: 50%; + margin-top: -12px; + } +} + +.datta-example-modal-close { + display: block; + position: fixed; + top: 10px; + right: 52px; + color: #fff; + opacity: 0.2; + font-size: 3rem; + font-weight: 100; + transition: all 0.3s ease-in-out; + z-index: 1; + + &:hover { + color: #fff; + opacity: 0.9; + } +} +/* Code */ +.cui-bottom-spacer { + height: 12rem; +} +/* editor style for model */ +.hljs { + padding: 0.5em; + color: #abb2bf; + background: #282c34; +} + +.hljs-comment, +.hljs-quote { + color: #5c6370; + font-style: italic; +} + +.hljs-doctag, +.hljs-formula, +.hljs-keyword { + color: #c678dd; +} + +.hljs-deletion, +.hljs-name, +.hljs-section, +.hljs-selector-tag, +.hljs-subst { + color: #e06c75; +} + +.hljs-literal { + color: #56b6c2; +} + +.hljs-addition, +.hljs-attribute, +.hljs-meta-string, +.hljs-regexp, +.hljs-string { + color: #98c379; +} + +.hljs-built_in, +.hljs-class .hljs-title { + color: #e6c07b; +} + +.hljs-attr, +.hljs-number, +.hljs-selector-attr, +.hljs-selector-class, +.hljs-selector-pseudo, +.hljs-template-variable, +.hljs-type, +.hljs-variable { + color: #d19a66; +} + +.hljs-bullet, +.hljs-link, +.hljs-meta, +.hljs-selector-id, +.hljs-symbol, +.hljs-title { + color: #61aeee; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-link { + text-decoration: underline; +} +/* ================================ md animated mode start ===================== */ + +.md-show.md-effect-12 ~ .md-overlay { + background: $theme-color; +} +/* ================================ md animated mode End ===================== */ +/* ================================ range slider Start ===================== */ + +.tooltip { + &.in { + opacity: 0.9; + } + + .tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + } + + &.top { + padding: 5px 0; + margin-top: -3px; + + .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; + } + } +} +/* ================================ range slider End ===================== */ +/* ================================ owl-carousel slider Start ===================== */ + +.owl-carousel { + .owl-nav { + button { + &.owl-next, + &.owl-prev { + padding: 3px 9px; + } + } + } + + button.owl-dot { + } +} +/* ================================ owl-carousel slider End ===================== */ +/* ================================ Bootstrap tags input Start ===================== */ + +.bootstrap-tagsinput { + padding: 10px 15px; + box-shadow: none; + border-radius: 2px; + background: $form-bg; + + .tag { + padding: 5px 12px; + border-radius: 2px; + line-height: 37px; + margin-top: 5px; + margin-right: 5px; + + [data-role='remove'] { + margin-right: -5px; + + &:after { + content: '\e8f6'; + padding: 0 2px; + font-family: 'feather' !important; + } + } + } +} +/* ================================ Bootstrap tags input End ===================== */ +/* ================================ Multi-Select Start ===================== */ + +.ms-container { + width: 100%; +} +/* ================================ Multi-Select End ===================== */ +/* ================================ Blockquote Start ===================== */ + +.blockquote { + border-left: 0.25rem solid $theme-border; + padding: 0.5rem 1rem; + + &.text-right { + border-left: none; + border-right: 0.25rem solid $theme-border; + } +} +/* ================================ Blockquote End ===================== */ +/* ================================ animation start ===================== */ + +.card .animated { + animation-duration: 1s; + border: 5px solid #fff; + margin-bottom: 30px; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2); +} +/* ================================ animation End ===================== */ +/* ================================ browser warning Start ===================== */ + +.ie-warning { + position: fixed; + top: 0; + left: 0; + z-index: 999999; + background: #000000; + width: 100%; + height: 100%; + text-align: center; + color: #fff; + font-family: 'Courier New', Courier, monospace; + padding: 50px 0; + + p { + font-size: 17px; + } + + h1 { + color: #fff; + } + + .iew-container { + min-width: 1024px; + width: 100%; + height: 200px; + background: #fff; + margin: 50px 0; + } + + .iew-download { + list-style: none; + padding: 30px 0; + margin: 0 auto; + width: 720px; + + > li { + float: left; + vertical-align: top; + + > a { + display: block; + color: #000; + width: 140px; + font-size: 15px; + padding: 15px 0; + + > div { + margin-top: 10px; + } + + &:hover { + background-color: #eee; + } + } + } + } +} +/* ================================ browser warning End ===================== */ +/* material icon for material datetime picker */ +/* fallback */ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url('https://fonts.gstatic.com/s/materialicons/v41/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2') format('woff2'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-feature-settings: 'liga'; + -webkit-font-smoothing: antialiased; +} +/* material icon for material datetime picker */ + +/* angkorchat */ +.mobile-angkor-logo { + width: 60%; + + .on { + width: 100%; + padding-left: 2px; + } +} + +.text-align-left { + text-align: left; +} + +.logo-login { + display: none; +} +.logo-login.on { + display: block; +} + +.logo-icon { + display: none; +} +.logo-icon.on { + display: block; +} diff --git a/src/styles/partials/_generic.scss b/src/styles/partials/_generic.scss new file mode 100644 index 0000000..d1795a9 --- /dev/null +++ b/src/styles/partials/_generic.scss @@ -0,0 +1,101 @@ +/** ===================== + Generic-class css start +========================== **/ +/*====== Padding , Margin css starts ======*/ +$i: 0; +@while $i<=50 { + .p { + &-#{$i} { + padding: #{$i}px; + } + + &-t-#{$i} { + padding-top: #{$i}px; + } + + &-b-#{$i} { + padding-bottom: #{$i}px; + } + + &-l-#{$i} { + padding-left: #{$i}px; + } + + &-r-#{$i} { + padding-right: #{$i}px; + } + } + .m { + &-#{$i} { + margin: #{$i}px; + } + + &-t-#{$i} { + margin-top: #{$i}px; + } + + &-b-#{$i} { + margin-bottom: #{$i}px; + } + + &-l-#{$i} { + margin-left: #{$i}px; + } + + &-r-#{$i} { + margin-right: #{$i}px; + } + } + $i: $i + 5; +} +/*====== Padding , Margin css ends ======*/ + +/*====== text-color, background color css starts ======*/ +@each $value in $color-name { + $i: index($color-name, $value); + .bg-#{$value} { + background: nth($color-color, $i); + } + .text-#{$value} { + color: nth($color-color, $i); + } +} +/*====== text-color css ends ======*/ +/*====== Card top border css starts ======*/ +@each $value in $color-name { + $i: index($color-name, $value); + .card-border-#{$value} { + border-top: 4px solid nth($color-color, $i); + } +} +/*====== Card top border ends ======*/ +/*====== Font-size css starts ======*/ +$i: 10; +@while $i<=80 { + .f-#{$i} { + font-size: #{$i}px; + } + $i: $i + 2; +} +/*====== Font-size css ends ======*/ +/*====== Font-weight css starts ======*/ +$i: 100; +@while $i<=900 { + .f-w-#{$i} { + font-weight: #{$i}; + } + $i: $i + 100; +} +/*====== Font-weight css ends ======*/ +/*====== width, Height css starts ======*/ +$i: 20; +@while $i<=150 { + .wid-#{$i} { + width: #{$i}px; + } + .hei-#{$i} { + height: #{$i}px; + } + $i: $i + 5; +} +/*====== width, Height css ends ======*/ diff --git a/src/styles/partials/_mixins.scss b/src/styles/partials/_mixins.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/styles/partials/_variables.scss b/src/styles/partials/_variables.scss new file mode 100644 index 0000000..1072966 --- /dev/null +++ b/src/styles/partials/_variables.scss @@ -0,0 +1,124 @@ +// ======================================= +// List of variables for layout +// ======================================= +/* + description Of variables for build for theme layouts + 1) menu-caption-color + List of color for sidebar menu caption + + 2) brand-background + List of color for logo background + + 3) header-dark-background + List of color for Dark Header + + 4) header-light-background + List of color for light Header + + 5) menu-dark-background + List of color for Dark sidebar menu + + 6) menu-light-background + List of color for light sidebar menu + + 7) menu-active-color + List of color for Active item highliter + + 8) menu-icon-color + List of color for sidebar menu items icon colors +*/ +$header-height: 70px; +$Menu-width: 264px; +$Menu-collapsed-width: 80px; + +// color list for build layouts +// temp variables +$theme-color: linear-gradient(-135deg, #1de9b6 0%, #1dc4e9 100%); +$theme-color2: linear-gradient(-135deg, #899fd4 0%, #a389d4 100%); +$primary-color: #04a9f5; +$warning-color: #f4c22b; +$danger-color: #f44236; +$success-color: #1de9b6; +$purple-color: #a389d4; +$info-color: #3ebfea; +$secondary-color: #748892; +$default-color: #d6d6d6; +$light-color: #f2f2f2; +$dark-color: #37474f; +$inverse-color: $dark-color; +$theme-border: #eaeaea; + +// header +$brand-background: #3f4d67; +$header-dark-background: #3f4d67; +$header-dark-text-color: #fff; +$header-light-background: #fff; +$header-light-text-color: #3f4d67; + +// Menu +$menu-caption-color: #14171d; +$menu-dark-background: #3f4d67; +$menu-dark-text-color: #a9b7d0; +$menu-light-background: #fff; +// $menu-light-text-color: #3f4d67; +$menu-light-text-color: #7e84a3; + +$menu-active-color: #04a9f5; + +// dark layout colors +$dark-layout: #212224; +$dark-layout-font: #adb7be; + +// Menu icon +$menu-icon-color: $primary-color, #ff5252, #01a9ac, #9575cd, #23b7e5, $warning-color; +// Header background +$color-header-name: blue, red, purple, lightblue, dark; +$color-header-color: $primary-color, #ff5252, #9575cd, #23b7e5, lighten($dark-layout, 7%); +// Menu background +$color-menu-name: blue, red, purple, lightblue, dark; +$color-menu-color: $primary-color, #ff5252, #9575cd, #23b7e5, lighten($dark-layout, 7%); +// Active background color +$color-active-name: blue, red, purple, lightblue, dark; +$color-active-color: $primary-color, #ff5252, #9575cd, #23b7e5, lighten($dark-layout, 7%); +// Menu title color +$color-title-name: blue, red, purple, lightblue, dark; +$color-title-color: $primary-color, #ff5252, #9575cd, #23b7e5, lighten($dark-layout, 7%); + +// layout-6 background color +$layout-6-bg-color: #23b7e5; + +$theme-font-family: 'Open Sans', sans-serif; +$theme-font-size: 14px; +$theme-background: #f4f7fa; +$theme-font-color: #888; +$theme-heading-color: #111; + +$color-name: c-blue, c-red, c-green, c-yellow, c-purple; +$color-color: $primary-color, $danger-color, $success-color, $warning-color, $purple-color; +$color-bt-name: primary, danger, success, warning, info; +$color-bt-color: $primary-color, $danger-color, $success-color, $warning-color, $info-color; + +// form-control variables +$form-bg: #f0f3f6; + +$theme-colors: () !default; +$theme-colors: map-merge( + ( + 'primary': $primary-color, + 'secondary': $secondary-color, + 'success': $success-color, + 'info': $info-color, + 'warning': $warning-color, + 'danger': $danger-color, + 'light': $light-color, + 'dark': $dark-color + ), + $theme-colors +); // Color contrast +$yiq-contrasted-threshold: 200 !default; +$yiq-dark-color: #37474f; +$yiq-light-color: #fff; +$theme-color-interval: 8% !default; +$alert-bg-level: -10 !default; +$alert-border-level: -9 !default; +$alert-color-level: 6 !default; diff --git a/src/styles/partials/menu/_menu-lite.scss b/src/styles/partials/menu/_menu-lite.scss new file mode 100644 index 0000000..b7f1841 --- /dev/null +++ b/src/styles/partials/menu/_menu-lite.scss @@ -0,0 +1,4153 @@ +/* new logo start */ +@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css'); + +a { + white-space: pre-wrap; + text-decoration: none; + color: #a1a7c4; +} + +.b-brand { + display: flex; + align-items: center; + + .b-bg { + background: $theme-color; + border-radius: 10px; + width: 35px; + height: 35px; + display: inline-flex; + align-items: center; + justify-content: center; + + i { + color: #fff; + } + } + + .b-title { + margin-left: 10px; + font-weight: 100; + color: #fff; + font-size: 18px; + } +} + +.navbar-collapsed { + .b-brand .b-title { + transform: rotateY(-90deg); + transform-origin: 0 0; + opacity: 0; + transition: all 0.3s ease-in-out; + } + + .mobile-menu { + transform: rotateY(-90deg); + transform-origin: 0 0; + opacity: 0; + transition: all 0.3s ease-in-out; + } + + &:hover { + .b-brand .b-title { + transform: rotateY(0deg); + opacity: 1; + } + + .mobile-menu { + transition-delay: 0.3s; + transform: rotateY(0deg); + opacity: 1; + } + } +} +/* new logo End */ +/* Pre-loader css start */ +.loader-bg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 3px; + z-index: 1035; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); + + .loader-track { + position: relative; + height: 3px; + display: block; + width: 100%; + overflow: hidden; + + .loader-fill { + &:after, + &:before { + content: ''; + background: $theme-color; + position: absolute; + top: 0; + left: 0; + bottom: 0; + will-change: left, right; + } + + &:before { + animation: mbar 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; + } + + &:after { + animation: m_s 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + animation-delay: 1.15s; + } + } + } +} +@keyframes mbar { + 0% { + left: -35%; + right: 100%; + } + + 60% { + left: 100%; + right: -90%; + } + + 100% { + left: 100%; + right: -35%; + } +} +@keyframes m_s { + 0% { + left: -200%; + right: 100%; + } + + 60% { + left: 107%; + right: -8%; + } + + 100% { + left: 107%; + right: -8%; + } +} +/* Pre-loader css end */ +/* header css start */ +.pcoded-header { + z-index: 1000; + position: fixed; + display: flex; + justify-content: space-between; + min-height: $header-height; + padding: 0; + top: 0; + background: #ffffff; + color: $header-light-text-color; + width: 100%; + margin: 0; + transition: all 0.3s ease-in-out; + + .navbar-collapse { + width: calc(100% - 230px); + box-shadow: 6px 1px 4px 0 rgba(21, 34, 50, 0.08); + flex-grow: 1; + z-index: 97; + } + .header-logo { + padding-left: 40px; + background: #fff; + width: 235px; + margin: 0; + height: 70px; + align-items: center; + display: flex; + box-shadow: -7px 2px 8px 0 rgba(21, 34, 50, 0.08); + } + .m-header { + display: none; + + .logo-dark, + .logo-thumb { + display: none; + } + } + + .input-group { + background: transparent; + + .input-group-text { + margin-right: 0; + } + } + + .input-group { + background: transparent; + } + + .input-group .input-group-text, + a, + .btn, + &.dropdown-toggle { + color: $header-light-text-color; + + &:hover { + color: $primary-color; + } + } + + #mobile-header { + display: none; + } + + .navbar-nav { + padding-left: 0; + list-style: none; + margin-bottom: 0; + display: inline-block; + + > li { + line-height: $header-height; + display: inline-block; + padding: 0 0 0 37px; + + .nav-link { + padding: 0; + } + + &:first-child { + padding-left: 25px; + } + + &:last-child { + padding-right: 40px; + } + } + } + + .mr-auto { + .dropdown-menu { + margin-left: -20px; + } + } + + .ml-auto { + float: right; + + .dropdown-menu { + margin-right: -20px; + } + } + + .main-search { + .input-group { + border-radius: 20px; + padding: 0; + + .form-control, + .input-group-text { + background: transparent; + border: none; + border-radius: 0; + padding: 0; + } + + .search-close { + display: none; + } + + .search-btn { + border-radius: 50%; + padding: 0; + background: transparent; + border-color: transparent; + box-shadow: none; + } + + .form-control { + transition: all 0.3s ease-in-out; + width: 0; + font-size: 14px; + } + + .form-control, + .search-btn { + &:active, + &:focus, + &:hover { + outline: none; + box-shadow: none; + } + } + } + + &.open { + .input-group { + background: #fff; + border: 1px solid #f1f1f1; + box-shadow: 0 6px 12px -5px rgba(65, 76, 78, 0.08); + padding: 5px 5px 5px 20px; + + .search-close { + display: flex; + } + + .search-btn { + padding: 5px; + margin-left: 5px; + background: $primary-color; + border-color: $primary-color; + + .input-group-text { + color: #fff; + } + } + + .form-control { + transition: all 0.3s ease-in-out; + width: 0; + } + + .form-control, + .search-btn { + &:active, + &:focus, + &:hover { + outline: none; + box-shadow: none; + } + } + } + } + } + + .dropdown { + .dropdown-toggle { + line-height: $header-height; + display: flex; + align-items: center; + + &:after { + display: none; + } + } + .pcoded-micon { + position: relative; + display: block; + .alarm { + position: absolute; + left: 50%; + top: 30%; + width: 16px; + height: 16px; + border-radius: 50%; + vertical-align: middle; + margin-right: 10px; + transform: translateY(-1px); + background-color: #f0142f; + color: #fff; + font-family: 'Pretendard'; + font-size: 12px; + text-align: center; + line-height: 16px; + } + } + + .dropdown-menu { + position: absolute; + border: none; + margin-top: -6px; + + &.show { + &:before { + display: none; + } + } + + li { + line-height: 1.2; + + a { + padding: 10px; + font-size: 14px; + } + + &.active, + &:active, + &:focus, + &:hover { + a { + color: $theme-font-color; + } + } + } + } + + &.show { + &:before { + font-family: 'pct'; + position: absolute; + left: -5px; + top: $header-height - 10; + z-index: 1001; + font-size: 40px; + line-height: 0; + color: #fff; + text-shadow: 0 -2px 2px rgba(65, 76, 78, 0.12); + } + } + + .notification { + width: 185px; + padding: 10px 16px; + line-height: 1.4; + overflow: hidden; + border-radius: 8px; + font-family: Pretendard; + font-size: 12px; + letter-spacing: -0.24px; + color: #131523; + + .notification_box { + padding: 9px 0; + display: flex; + align-items: center; + &.new_inquiry .circle { + background: #21d59b; + cursor: pointer; + } + + .circle { + display: block; + width: 10px; + height: 10px; + border-radius: 10px; + background: #f0142f; + margin-right: 10px; + } + + a { + display: block; + } + } + + .noti-head { + border-bottom: 1px solid #f1f1f1; + padding: 15px 20px; + + a { + text-decoration: underline; + font-size: 13px; + } + } + + .noti-body { + padding: 0; + + img { + width: 40px; + margin-right: 20px; + } + + li { + padding: 15px 20px; + transition: all 0.3s ease-in-out; + + &.n-title { + padding-bottom: 0; + + p { + margin-bottom: 5px; + } + } + + &.notification:hover { + background: transparentize($primary-color, 0.9); + } + + p { + margin-bottom: 5px; + font-size: 13px; + + strong { + color: #222; + } + } + + .n-time { + font-size: 80%; + float: right; + } + } + } + + .noti-footer { + border-top: 1px solid #f1f1f1; + padding: 15px 20px; + text-align: center; + + a { + text-decoration: underline; + font-size: 13px; + } + } + + ul { + padding-left: 0; + margin-bottom: 0; + list-style: none; + + li { + padding: 20px 15px; + } + } + } + + .profile-notification { + width: 96px; + padding: 0; + line-height: 1.4; + overflow: hidden; + min-width: 96px !important; + border-radius: 8px; + + .pro-head { + color: #fff; + border-radius: 0.25rem 0.25rem 0 0; + padding: 15px; + position: relative; + background: $primary-color; + + img { + width: 40px; + margin-right: 10px; + } + + .dud-logout { + color: #fff; + padding-right: 0; + position: absolute; + right: 0; + top: 0; + height: 100%; + width: 40px; + display: flex; + align-items: center; + justify-content: center; + } + } + + .pro-body { + padding: 4px 4px 8px 4px; + margin-bottom: 0; + list-style: none; + + li { + a { + color: #131523; + font-size: 12px; + padding: 0; + font-family: pretendard; + display: flex; + align-items: center; + letter-spacing: -0.24px; + text-align: left; + cursor: pointer; + + img { + display: block; + } + + span { + display: block; + margin-left: 10px; + } + } + + &.active, + &:hover { + background: #e9ecef; + + > a { + background: transparent; + } + } + &:active, + &:focus { + background: #fec702; + + > a { + color: #fff; + } + } + } + } + } + } +} +/* header css end */ +/* menu[ vartical ] css start */ +.mobile-menu { + display: flex; + align-items: center; + justify-content: center; + width: 37px; + height: $header-height; + position: absolute; + right: 0; + top: 0; + padding: 0 10px; + + span { + position: relative; + display: block; + width: 100%; + height: 2.8px; + background-color: #fff; + transition: all 0.3s ease-in-out; + backface-visibility: hidden; + border-radius: 2px; + + &:after, + &:before { + content: ''; + position: absolute; + left: 0; + height: 2.8px; + background-color: #fff; + transition: all 0.3s; + backface-visibility: hidden; + border-radius: 2px; + } + + &:after { + top: 5px; + width: 70%; + } + + &:before { + top: -5px; + width: 40%; + } + } + + &.on { + span { + background-color: transparent; + + &:after, + &:before { + height: 2px; + width: 100%; + } + + &:before { + transform: rotate(45deg) translate(4px, 4px); + } + + &:after { + transform: rotate(-45deg) translate(3px, -3px); + } + } + } +} + +.navbar-brand { + background: $menu-dark-background; +} + +.pcoded-header, +.pcoded-main-container { + &:before { + content: ''; + transition: all 0.3s ease-in-out; + } +} + +.pcoded-navbar { + display: block; + z-index: 990; + position: fixed; + top: 70px !important; + transition: all 0.3s ease-in-out; + background: #fff !important; + width: 230px !important; + height: 100%; + + ul { + padding-left: 0; + list-style: none; + margin-bottom: 0; + + li a { + white-space: nowrap; + color: #7e84a3; + font-family: 'Pretendard'; + font-weight: 500; + font-size: 14px; + letter-spacing: -0.28px; + } + li a.active { + .pcoded-mtext { + font-weight: 700; + color: #131523; + font-family: Pretendard; + } + .pcoded-micon img { + filter: invert(81%) sepia(30%) saturate(5422%) hue-rotate(2deg) brightness(150%) contrast(106%); + } + } + } + + .datta-scroll.navbar-content { + height: calc(100vh - #{$header-height}); + } + + .header-logo { + position: relative; + align-items: center; + display: inline-flex; + float: left; + height: $header-height; + text-align: center; + width: $Menu-width; + margin-right: 0; + padding: 10px 40px; + transition: all 0.3s ease-in-out; + background: #fff !important; + + .logo-dark { + display: none; + } + + .logo-thumb { + transform: rotateY(-90deg); + opacity: 0; + position: absolute; + transition: unset; + } + + + .datta-scroll { + float: left; + } + } + + .mobile-menu { + display: flex; + align-items: center; + justify-content: center; + width: 37px; + height: $header-height; + position: absolute; + right: 10px; + top: 0; + padding: 0 10px; + transition: all 0.3s ease-in-out; + + span { + position: relative; + display: block; + width: 100%; + height: 2.8px; + background-color: $menu-dark-text-color; + transition: all 0.3s ease-in-out; + backface-visibility: hidden; + border-radius: 2px; + + &:after, + &:before { + content: ''; + position: absolute; + left: 0; + height: 2.8px; + background-color: $menu-dark-text-color; + transition: all 0.3s; + backface-visibility: hidden; + border-radius: 2px; + } + + &:after { + top: 5px; + width: 70%; + } + + &:before { + top: -5px; + width: 40%; + } + } + a &.on { + span { + background-color: transparent; + + &:after, + &:before { + height: 2px; + width: 100%; + } + + &:before { + transform: rotate(45deg) translate(4px, 4px); + } + + &:after { + transform: rotate(-45deg) translate(3px, -3px); + } + } + } + } + + .pcoded-badge { + font-size: 75%; + position: absolute; + right: 30px; + top: 12px; + padding: 2px 7px; + border-radius: 2px; + } + + .pcoded-inner-navbar { + flex-direction: column; + margin-top: 20px; + + li { + position: relative; + padding: 0; + + .pcoded-submenu { + display: none; + a { + margin-left: 60px; + font-weight: 400; + font-size: 12px; + font-family: 'Pretendard'; + height: 26px; + margin-bottom: 0.5rem; + white-space: normal; + width: 168px; + } + .active { + font-weight: 700; + } + } + + &.nav-link.active { + background: rgba(254, 199, 2, 0.05); + a { + background: rgba(254, 199, 2, 0); + img { + filter: invert(81%) sepia(30%) saturate(5422%) hue-rotate(2deg) brightness(150%) contrast(106%); + } + .pcoded-mtext { + font-weight: 700; + color: #131523; + font-family: Pretendard; + } + } + .pcoded-submenu { + display: block; + background: transparent; + } + } + + > a { + background: transparent; + text-align: left; + padding: 7px 0px; + display: block; + border-radius: 0; + position: relative; + display: flex; + justify-content: flex-start; + align-items: center; + white-space: nowrap; + height: 52px; + + .pcoded-mtext { + position: relative; + white-space: nowrap; + } + + > .pcoded-micon { + font-size: 1rem; + // padding: 4px 7px; + margin-right: 7px; + border-radius: 4px; + width: 30px; + display: inline-flex; + align-items: center; + height: 30px; + text-align: center; + margin: 0 10px 0 20px; + } + } + + &.pcoded-menu-caption { + font-size: 10px; + font-weight: 600; + padding: 25px 20px 5px; + text-transform: uppercase; + position: relative; + } + + &.disabled { + > a { + cursor: default; + opacity: 0.5; + } + } + } + } + width: $Menu-width; + // height: 100vh; + top: 0; + background: $menu-dark-background; + color: $menu-dark-text-color; + + .pcoded-submenu { + background: darken($header-dark-background, 3%); + // padding: 15px 0; + } + + a { + color: $menu-dark-text-color; + } + + .navbar-content, + .navbar-wrapper { + width: 100%; + height: 100%; + } + + &.navbar-collapsed { + width: $Menu-collapsed-width; + height: 100%; + transition: all 0.3s ease-in-out; + + .header-logo { + width: $Menu-collapsed-width; + + img { + /* junny */ + width: 100%; + /*transform: rotateY(-90deg); + transform-origin: 0 0; + opacity: 0; + transition: unset;*/ + } + + .logo-thumb { + transform: rotateY(0deg); + transform-origin: 0 0; + opacity: 1; + left: calc((#{$Menu-collapsed-width} / 2) - 20px); + } + + .mobile-menu { + transform: rotateY(-90deg); + transform-origin: 0 0; + opacity: 0; + } + } + + .navbar-content { + &.ps { + overflow: visible; + } + } + + .pcoded-menu-caption { + position: relative; + width: 100%; + height: auto; + white-space: nowrap; + overflow: hidden; + + > label { + transform: rotateY(-90deg); + transform-origin: 0 0; + opacity: 0; + transition: all 0.3s ease-in-out; + } + + &:after { + content: ''; + position: absolute; + top: 25px; + left: 15px; + width: calc(100% - 30px); + height: 1px; + background: rgba(0, 0, 0, 0.1); + } + } + + .pcoded-inner-navbar { + > li { + > a { + z-index: 1026; + padding: 7px 25px; + + > .pcoded-mtext { + transform: rotateY(-90deg); + transform-origin: 0 0; + opacity: 0; + transition: all 0.3s ease-in-out; + } + } + + &.pcoded-hasmenu { + > a { + &:after { + right: 12px; + } + } + } + } + + > li { + &.pcoded-trigger { + .pcoded-submenu { + &:after { + content: ''; + position: absolute; + top: 49px; + left: calc(calc(#{$Menu-collapsed-width} / 2) - 3px); + width: 1px; + height: calc(100% - 49px); + background: transparentize($menu-dark-text-color, 0.8); + } + + li { + a { + color: transparent; + white-space: nowrap; + } + } + + .pcoded-submenu { + li { + a:before { + opacity: 0; + } + } + } + } + } + } + } + + ~ .pcoded-header { + width: calc(100% - #{$Menu-collapsed-width}); + } + + ~ .pcoded-header, + ~ .pcoded-main-container { + margin-left: $Menu-collapsed-width; + } + + .pcoded-badge { + transform: rotateX(-90deg); + transform-origin: 50% 50%; + opacity: 0; + transition: all 0.15s ease-in-out; + } + + &:hover { + width: $Menu-width !important; + + .pcoded-badge { + transition-delay: 0.3s; + transform: rotateX(0deg); + opacity: 1; + } + + .header-logo { + width: $Menu-width; + + img { + transform: rotateY(0deg); + opacity: 1; + } + + .logo-thumb { + transform: rotateY(-90deg); + opacity: 0; + } + + .mobile-menu { + display: flex; + right: 10px; + } + } + + .pcoded-menu-caption { + > label { + transform: rotateY(0deg); + opacity: 1; + } + + &:after { + background: transparent; + } + } + + .mobile-menu { + transform: rotateY(0deg); + opacity: 1; + } + + .pcoded-inner-navbar { + > li { + > a { + > .pcoded-mtext { + transform: rotateY(0deg); + opacity: 1; + + &:after { + opacity: 1; + visibility: visible; + } + } + } + + &.pcoded-hasmenu { + > a { + &:after { + transform: rotateX(0deg); + } + } + + &.pcoded-trigger { + > a { + &:after { + transform: rotateX(0deg) rotate(90deg); + } + } + } + } + } + + > li { + &.pcoded-trigger { + .pcoded-submenu { + &:after { + display: none; + } + + li { + a { + color: inherit; + } + } + + .pcoded-submenu { + li { + a:before { + opacity: 1; + } + } + } + } + } + } + } + } + } + + .pcoded-menu-caption { + color: #e8edf7; + } + + .pcoded-inner-navbar { + li > a { + &.active, + &:focus, + &:hover { + /* junny */ + /* color: #1dc4e9; */ + color: #fec702; + } + + .pcoded-submenu > li { + &.active, + &:focus, + &:hover { + > a { + &:before { + /* junny */ + /* background: #1dc4e9; */ + background: #fec702; + } + } + } + } + } + + > li { + &.active, + &.pcoded-trigger { + // &:after { + // content: ""; + // /* junny */ + // /*background-color: #1dc4e9;*/ + // background-color: #fec702; + // z-index: 1027; + // position: absolute; + // left: 0; + // top: 5px; + // width: 4px; + // height: calc(100% - 5px); + // } + + > a { + background: darken($menu-dark-background, 6%); + color: #fff; + &:after { + content: ''; + /* junny */ + /*background-color: #1dc4e9;*/ + background-color: #fec702; + z-index: 1027; + position: absolute; + left: 0; + top: 5px; + width: 4px; + height: calc(100% - 5px); + } + } + } + } + + > .pcoded-menu-caption { + &.active, + &.pcoded-trigger { + &:after { + display: none; + } + } + } + } +} + +.pcoded-navbar { + &.mob-open, + &.navbar-collapsed:hover { + ~ .pcoded-header, + ~ .pcoded-main-container { + margin-left: $Menu-collapsed-width; + + &:before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.2); + z-index: 1; + } + } + } +} +/* menu [ vartical ] css end */ +/* menu[ horizontal ] css start */ +.pcoded-navbar { + &.theme-horizontal { + display: block; + height: $header-height; + width: 100%; + z-index: 1023; + box-shadow: none; + position: fixed; + top: $header-height; + + .pcoded-inner-navbar > li > a > .pcoded-badge { + position: relative; + top: 0; + right: -2px; + } + + &.top-nav-collapse { + top: -#{$header-height}; + } + + &.default, + &.default.top-nav-collapse { + top: $header-height; + } + + .header-logo { + display: none; + } + + .sidenav-horizontal-wrapper { + display: flex; + align-items: center; + } + + .pcoded-inner-navbar { + display: block; + list-style: none; + margin: 0; + padding: 0; + position: relative; + white-space: nowrap; + transition: all 0.5s ease-in-out; + + .pcoded-menu-caption { + display: none; + } + + > li { + display: inline-block; + list-style: outside none none; + margin: 0; + padding: 0; + position: relative; + + > a { + margin: 0; + padding: 8px 15px; + + > .pcoded-mtext { + position: relative; + top: 0; + margin-right: 5px; + } + + &:after { + position: relative; + top: 0; + right: 0; + } + } + + &:last-child { + > a { + margin-right: 70px; + } + } + + &.active, + &.pcoded-trigger, + &:hover { + a { + box-shadow: none; + color: #fff; + background: transparent; + } + } + + &.pcoded-hasmenu { + a.active { + color: $primary-color; + background: transparent; + } + &.active, + &.pcoded-trigger { + &:before { + content: '\6d'; + position: absolute; + bottom: -34px; + left: 0; + font-family: 'pct'; + z-index: 1001; + font-size: 50px; + line-height: 1; + padding-left: calc(50% - 25px); + color: $menu-dark-background; + text-shadow: 0 3px 4px rgba(69, 90, 100, 0.05); + width: 100%; + height: 40px; + transform: scaleX(1.2); + } + + > .pcoded-submenu { + margin-top: 30px; + } + } + } + + &.active, + &.pcoded-trigger { + &:after { + content: ''; + background-color: #fec702; + z-index: 1027; + position: absolute; + left: 19px; + top: auto; + bottom: 5px; + width: 23px; + height: 2px; + } + } + + &.pcoded-hasmenu.edge { + > .pcoded-submenu { + left: auto; + right: 0; + } + } + } + + .pcoded-hasmenu { + position: relative; + + .pcoded-submenu { + opacity: 0; + visibility: hidden; + transform-origin: 50% 50%; + transition: + transform 0.3s, + opacity 0.3s; + transform-style: preserve-3d; + transform: rotateX(-90deg); + position: absolute; + min-width: 250px; + display: block; + z-index: 1; + top: 100%; + list-style: outside none none; + margin: 0; + border-radius: 4px; + padding: 15px; + box-shadow: 0 4px 24px 0 rgba(62, 57, 107, 0.18); + background: #fff; + + a { + color: $menu-dark-background; + padding: 10px 20px 10px 30px; + + &:before { + left: 5px; + top: 19px; + } + } + + li { + &.active, + &.pcoded-trigger, + &:hover { + > a { + color: $primary-color; + } + } + } + + .pcoded-submenu { + position: absolute; + min-width: 250px; + z-index: 1; + left: calc(100% + 10px); + top: -10px; + margin: 0 0 0 20px; + border-radius: 4px; + + &:before { + content: '\6a'; + position: absolute; + top: 8px; + left: -31px; + font-family: 'pct'; + z-index: 1001; + font-size: 50px; + line-height: 1; + color: #fff; + width: 40px; + height: 100%; + text-shadow: -8px 0 13px rgba(62, 57, 107, 0.08); + } + + a { + color: $menu-dark-background; + padding: 10px 20px 10px 30px; + + &:before { + left: 5px; + top: 19px; + } + } + } + + .pcoded-hasmenu { + &.edge { + .pcoded-submenu { + left: auto; + margin: 0 20px 0 0; + right: calc(100% + 10px); + + &:before { + content: '\6b'; + left: auto; + right: -21px; + text-shadow: 8px 0 13px rgba(62, 57, 107, 0.08); + } + } + } + } + } + + &.pcoded-trigger { + > .pcoded-submenu { + opacity: 1; + visibility: visible; + transform: rotateX(0deg); + } + } + } + } + + .navbar-content { + display: flex; + } + + ~ .pcoded-header { + position: fixed; + top: 0; + margin-left: 0; + width: 100%; + + .b-title { + color: $header-light-text-color; + } + + &[class*='header-']:not(.header-default) { + .b-title { + color: #fff; + } + } + + .m-header { + display: inline-flex; + padding: 0 15px; + + .logo-main, + .logo-thumb { + display: none; + } + + .logo-dark { + display: inline-block; + } + } + + .mobile-menu { + display: none; + } + + &[class*='header-']:not(.header-default) { + .m-header { + display: inline-flex; + padding: 0 15px; + + .logo-dark, + .logo-thumb { + display: none; + } + + .logo-main { + display: inline-block; + } + } + color: rgba(256, 256, 256, 0.8); + + .dropdown-menu { + color: $theme-font-color; + + a { + color: $theme-font-color; + } + + > li { + > a { + color: $theme-font-color; + } + + &.active, + &:active, + &:focus, + &:hover { + background: transparentize($primary-color, 0.9); + + > a { + background: transparent; + } + } + } + } + // .input-group .input-group-text, + a, + dropdown-toggle { + color: rgba(256, 256, 256, 0.8); + + &:hover { + color: #fff; + } + } + .dropdown { + .notification { + .noti-body { + li { + &.notification:hover { + background: transparentize($primary-color, 0.9); + } + } + } + } + + .profile-notification { + .pro-head { + color: #fff; + background: $primary-color; + + .dud-logout { + color: #fff; + } + } + } + + &.drp-user.show { + &:before { + color: $primary-color; + } + } + } + } + } + + ~ .pcoded-main-container { + margin-top: $header-height * 2; + margin-left: 0; + } + } +} +/* menu [ horizontal ] css end */ +/* main content start */ + +.pcoded-wrapper { + width: 100%; +} +.pcoded-content { + position: relative; + display: block; + padding: 0 80px; + margin-top: 120px; +} + +.pcoded-main-container { + position: relative; + margin: 0 auto; + display: flex; + clear: both; + float: unset; + right: 0; + min-height: 885px !important; + transition: all 0.3s ease-in-out; + gap: 230px; +} +/* main content end*/ +/* ========================== Rsponsive Menu start ====================== */ +@media only screen and (max-width: 991px) { + .pcoded-header { + // background: $header-dark-background; + color: $header-dark-text-color; + + .input-group-text, + a, + dropdown-toggle { + color: $header-light-text-color; + + &:hover { + color: $primary-color; + } + } + + #mobile-header { + display: none; + right: 20px; + } + + > .collapse:not(.show) { + display: flex; + background: #fff; + box-shadow: 0 1px 20px 0 rgba(69, 90, 100, 0.08); + } + + .dropdown-menu, + .dropdown-menu a, + .search-close .input-group-text { + color: $header-dark-background; + } + + .m-header { + display: flex; + justify-content: flex-start; + align-items: center; + width: 100%; + height: $header-height; + + .b-brand { + margin-left: 20px; + } + + .mobile-menu { + right: 20px; + } + } + + .full-screen { + display: none; + } + + .navbar-nav { + > li { + &:last-child { + padding-right: 60px; + } + } + } + } +} +@media only screen and (max-width: 575px) { + .pcoded-header { + .navbar-nav { + > li:first-child { + padding-left: 0; + } + + > li:last-child { + padding-right: 20px; + } + } + + .navbar-nav.mr-auto { + li { + display: none; + + &.nav-item:not(.dropdown) { + display: block; + padding-right: 0; + + .search-close { + display: none; + } + } + } + } + + .dropdown { + &.show { + position: static; + + a:after { + display: none; + } + + &:before { + display: none; + } + } + + .notification { + width: 100%; + } + + .dropdown-menu { + width: 95%; + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + } + } + } + + .header-chat.open, + .header-user-list.open { + width: 280px; + } + + .pcoded-content { + padding: 30px 15px; + } + + .card { + margin-bottom: 15px; + } +} +@media only screen and (max-width: 1200px) and (min-width: 768px) { + .pcoded-navbar { + .header-logo { + transition: none; + } + + &.navbar-collapsed { + transition: none; + + .header-logo { + img { + transition: none; + } + } + + .pcoded-menu-caption { + > label { + transition: none; + } + } + + .pcoded-inner-navbar { + > li { + > a { + > .pcoded-mtext { + transition: none; + } + } + + &.pcoded-hasmenu { + > a { + &:after { + transition: none; + transition-delay: unset; + } + } + } + } + } + + .pcoded-badge { + transition: none; + } + + &:hover { + .pcoded-badge { + transition-delay: unset; + } + } + } + } +} +/* responsive horizontal menu */ +@media only screen and (max-width: 991px) { + .pcoded-navbar { + &.theme-horizontal { + margin-left: 0; + + ~ .pcoded-header { + > .collapse:not(.show) { + display: inline-flex; + background: #fff; + box-shadow: 0 1px 20px 0 rgba(69, 90, 100, 0.08); + } + + .b-title { + color: #fff; + } + } + + .pcoded-inner-navbar { + .pcoded-hasmenu { + &.pcoded-trigger { + > .pcoded-submenu { + .pcoded-trigger, + .pcoded-trigger.edge { + > .pcoded-submenu { + position: relative; + left: 0; + min-width: 100%; + margin: 0; + box-shadow: none; + + &:before { + display: none; + } + } + } + } + } + } + } + } + } +} +/* ========================== Rsponsive Menu end ====================== */ +/* * Horizontal */ + +.theme-horizontal { + .sidenav-horizontal-wrapper { + flex: 0 1 100%; + width: 0; + + .sidenav:not(.sidenav-no-animation) & .sidenav-inner { + transition: margin 0.2s; + } + } + + .sidenav-horizontal-next, + .sidenav-horizontal-prev { + position: relative; + display: block; + flex: 0 0 auto; + width: 2.25rem; + background-color: $menu-dark-background; + z-index: 9; + + &::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + display: block; + width: 0.8rem; + height: 0.8rem; + border: 2px solid; + border-top: 0; + } + + &.disabled { + cursor: default !important; + opacity: 0; + } + } + + .sidenav-horizontal-prev::after { + border-right: 0; + transform: translate(-50%, -50%) rotate(45deg); + } + + .sidenav-horizontal-next::after { + border-left: 0; + transform: translate(-50%, -50%) rotate(-45deg); + } +} +@keyframes sidenavDropdownShow { + 0% { + opacity: 0; + transform: translateY(-0.5rem); + } + + 100% { + opacity: 1; + transform: translateY(0); + } +} +// ========================== Menu Styler Start ====================== +$style-block-width: 400px; + +.menu-styler { + z-index: 1029; + position: relative; + color: $theme-font-color; + + h5, + h6 { + color: $theme-heading-color; + font-weight: 400; + } + + hr { + border-top: 1px solid rgba(0, 0, 0, 0.1); + } + + .style-toggler { + > a { + position: fixed; + right: 0; + top: 30vh; + transition: 0.3s ease-in-out; + + &:before { + content: '\62'; + top: 0; + font-size: 120px; + position: absolute; + right: -45px; + font-family: 'pct'; + z-index: 1001; + line-height: 0; + color: $primary-color; + transition: 0.3s ease-in-out; + text-shadow: + 1px 0 2px transparentize($primary-color, 0.1), + 3px 0 5px rgba(0, 0, 0, 0.1); + letter-spacing: -44px; + transform: rotate(180deg); + } + + &:after { + content: '\e8c3'; + top: -7px; + font-size: 18px; + position: absolute; + right: 4px; + font-family: 'feather'; + z-index: 1029; + line-height: 1; + color: #fff; + transition: 0.3s ease-in-out; + animation: anim-rotate 1.5s linear infinite; + @media all and (-ms-high-contrast: none) { + line-height: 0.5; + } + } + } + } + + &.open { + .style-toggler { + > a { + right: $style-block-width; + + &:after { + content: '\e847'; + top: -7px; + font-size: 18px; + animation: anim-rotate 0s linear infinite; + } + } + } + + .style-block { + right: 0; + box-shadow: 0 0 15px rgba(0, 0, 0, 0.2); + } + } + + .style-block { + position: fixed; + top: 0; + right: -#{$style-block-width}; + width: $style-block-width; + height: 100vh; + background: #fff; + z-index: 1030; + transition: 0.3s ease-in-out; + padding: 25px 20px 20px; + } + + .mst-scroll { + height: calc(100vh - 175px); + background-color: transparentize($primary-color, 0.97); + padding: 0 15px; + } + + label { + margin-bottom: 3px; + } + + .switch input[type='checkbox'] + .cr { + top: 8px; + } + + .radio { + input[type='radio'] { + + .cr { + margin-right: 10px; + + &:after, + &:before { + margin-right: 3px; + } + } + } + } + + h6 { + position: relative; + margin: 10px 0 15px; + + &:after { + content: ''; + background-color: $primary-color; + position: absolute; + left: 0; + bottom: -8px; + width: 40px; + height: 2px; + } + } + + .nav-pills { + padding: 0; + box-shadow: none; + + li { + width: calc(100% / 3); + } + } + + .tab-content { + padding: 15px; + box-shadow: none; + background-color: transparentize($primary-color, 0.97); + border-top: 2px solid $primary-color; + } + @media only screen and (max-width: 992px) { + display: none; + } + + .config-scroll { + height: calc(100vh - 430px); + } +} + +.lay-customizer .theme-color, +.theme-color { + display: block; + position: relative; + padding: 5px 5px 0; + margin-bottom: 10px; + + > a { + position: relative; + width: 45px; + height: 30px; + border-radius: 2px; + display: inline-block; + margin-right: 8px; + background: $theme-background; + overflow: hidden; + box-shadow: 0.4px 0.9px 3px 0 rgba(0, 0, 0, 0.33); + + span { + width: 100%; + position: absolute; + + &:after, + &:before { + content: ''; + height: 100%; + position: absolute; + } + + &:before { + width: 30%; + left: 0; + background: $menu-dark-background; + } + + &:after { + width: 70%; + right: 0; + background: $theme-background; + } + } + + > span:nth-child(1) { + height: 30%; + top: 0; + } + + > span:nth-child(2) { + height: 75%; + bottom: 0; + } + + &.active { + box-shadow: 0 0 0 3px $primary-color; + + &:before { + content: '\e8dc'; + top: -1px; + font-size: 20px; + position: absolute; + left: 12px; + font-family: 'feather'; + z-index: 1001; + color: $primary-color; + transition: 0.3s ease-in-out; + text-shadow: + 0 1px 3px transparentize($primary-color, 0.1), + 0 3px 8px rgba(0, 0, 0, 0.1); + } + + &:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(255, 255, 255, 0.4); + } + } + + &[data-value='menu-light'] { + span { + &:before { + background: $menu-light-background; + } + } + } + + &[data-value='dark'] { + span { + &:after { + background: darken($dark-layout, 7%); + } + } + } + + &[data-value='reset'] { + background: $danger-color; + color: #fff; + display: inline-flex; + align-items: center; + justify-content: center; + top: -10px; + width: 135px; + } + } + + &.small { + > a { + width: 25px; + height: 25px; + border-radius: 50%; + + &:before { + font-size: 15px; + left: 5px; + top: 1px; + } + + > span { + display: none; + } + } + } + + &.navbar-images { + > a { + height: 90px; + background-size: cover; + background-position: center center; + + span { + display: none; + } + + &.active:before { + top: 35px; + content: '\e87c'; + } + } + } + + &.bg-images { + > a { + border-radius: 2px; + background-size: cover; + background-position: center center; + + span { + display: none; + } + + &.active:before { + top: 35px; + content: '\e87c'; + } + } + } + // prebuild layout + &.prelayout-color { + > a { + margin-bottom: 5px; + &[data-value='l1'] { + > span { + &:nth-child(1) { + z-index: 1; + + &:before { + background: linear-gradient( + to bottom, + $primary-color 0%, + $primary-color 80%, + $menu-dark-text-color 80%, + $menu-dark-text-color 90%, + $primary-color 91%, + $primary-color 100% + ); + } + } + + &:nth-child(2) { + &:before { + background: linear-gradient( + to right, + $menu-dark-background 0%, + $menu-dark-background 20%, + $menu-dark-text-color 25%, + $menu-dark-text-color 30%, + $menu-dark-background 20%, + $menu-dark-background 100% + ); + } + } + } + } + &[data-value='l2'] { + > span { + &:nth-child(1) { + &:before { + background: $menu-dark-background; + } + } + + &:nth-child(2) { + &:before { + background: $theme-color; + } + } + } + } + + &[data-value='l2-2'] { + > span { + &:nth-child(1) { + &:before { + background: $menu-dark-background; + } + } + + &:nth-child(2) { + &:before { + background: $theme-color2; + } + } + } + } + + &[data-value='l3'] { + > span { + &:nth-child(1) { + &:before { + background: $menu-dark-background; + } + } + + &:nth-child(2) { + &:before { + background: $primary-color; + } + } + } + } + + &[data-value='l4'] { + > span { + &:nth-child(1) { + &:before { + background: $theme-color; + } + } + + &:nth-child(2) { + &:before { + background: $dark-layout; + } + } + } + } + + &[data-value='l4-2'] { + > span { + &:nth-child(1) { + &:before { + background: $theme-color2; + } + } + + &:nth-child(2) { + &:before { + background: $dark-layout; + } + } + } + } + + &[data-value='l5-h'] { + > span { + &:nth-child(1) { + height: 40%; + + &:after, + &:before { + background: linear-gradient($primary-color 50%, #fff 0%); + box-shadow: 7px 0 15px 0 rgba(69, 90, 100, 0.09); + z-index: 1; + } + } + + &:nth-child(2) { + height: 60%; + + &:after, + &:before { + background: $theme-background; + } + } + } + } + + &[data-value='l-lite'] { + > span { + &:nth-child(1) { + &:after, + &:before { + background: nth($color-header-color, 4); + } + } + + &:nth-child(2) { + &:before { + background: #fff; + } + } + } + } + + &[data-value='l6'] { + > span { + &:nth-child(1) { + height: 50%; + + &:after { + background: nth($color-header-color, 4); + } + + &:before { + background: linear-gradient(nth($color-header-color, 4) 50%, #fff 0%); + z-index: 1; + } + } + + &:nth-child(2) { + height: 50%; + + &:after { + background: $theme-background; + } + + &:before { + background: #fff; + } + } + } + } + + &[data-value='l8'] { + > span { + &:nth-child(1) { + &:after { + background: nth($color-header-color, 4); + } + + &:before { + background: nth($color-header-color, 4); + } + } + + &:nth-child(2) { + &:after { + background: $theme-background; + } + + &:before { + background: linear-gradient( + #fff 0px, + #fff 5px, + transparentize(nth($color-header-color, 4), 0.5) 5px, + transparentize(nth($color-header-color, 4), 0.5) 5px, + transparentize(nth($color-header-color, 4), 0.5) 8px, + #fff 8px, + #fff + ); + } + } + } + } + } + } +} +// ========================== Menu Styler end ====================== +/* =================================================================================== + ========================== Diffrent Layout Styles Start ==================== + =================================================================================== + ====== [ light menu style start ] ======== */ +.pcoded-navbar.menu-light { + background-color: $menu-light-background; + color: $menu-light-text-color; + box-shadow: 7px 0 15px 0 rgba(69, 90, 100, 0.09); + + .header-logo { + background-color: $menu-dark-background; + + .logo-dark { + display: none; + } + + .logo-main { + display: block; + } + } + + .sidenav-horizontal-next, + .sidenav-horizontal-prev { + background: #fff; + } + + .mobile-menu { + span { + background-color: $menu-dark-text-color; + + &:after, + &:before { + background-color: $menu-dark-text-color; + } + } + + &.on { + span { + background-color: transparent; + } + } + } + + .pcoded-submenu { + background: rgba(254, 199, 2, 0.05); + } + + a { + color: $menu-light-text-color; + } + + &.navbar-collapsed { + .pcoded-menu-caption { + &:after { + background: rgba(0, 0, 0, 0.1); + } + } + + &:hover { + .pcoded-menu-caption { + &:after { + background: transparent; + } + } + } + } + + .pcoded-menu-caption { + color: $menu-light-text-color; + } + + .pcoded-inner-navbar { + > li { + &.active, + &.pcoded-trigger { + > a { + background: transparent; + font-weight: 700; + color: #131523; + font-family: Pretendard; + img { + filter: invert(81%) sepia(30%) saturate(5422%) hue-rotate(2deg) brightness(150%) contrast(106%); + } + } + } + } + } + + &.theme-horizontal { + .pcoded-inner-navbar { + > li { + &.active, + &.pcoded-trigger, + &:hover { + a { + color: $menu-light-text-color; + background: transparent; + } + } + + &.pcoded-hasmenu { + &.active, + &.pcoded-trigger { + &:before { + color: $menu-light-background; + } + } + } + } + } + } +} + +body { + &.layout-1 { + .pcoded-navbar.menu-light { + .sidemenu { + box-shadow: inset -1px 0 0 0 rgba(169, 183, 208, 0.4); + + li { + a:after { + border-bottom: 1px solid rgba(181, 189, 202, 0.4); + } + } + } + + .toggle-sidemenu { + background: #f1f1f1; + color: $menu-light-text-color; + } + + .side-content { + .sidelink { + .pcoded-inner-navbar { + li.pcoded-menu-caption:after { + border-bottom: 1px solid rgba(181, 189, 202, 0.5); + } + } + } + } + } + } +} +/* ====== [ light menu style end ] ======== */ +/* ====== [ Menu icon start ] ======== */ +.pcoded-navbar.icon-colored { + .pcoded-inner-navbar { + $flg: 1; + @for $k from 1 through 8 { + @each $value in $menu-icon-color { + > li:nth-child(#{$flg}) > a > .pcoded-micon { + color: $value; + } + $flg: $flg + 1; + } + } + + > li.pcoded-trigger > a > .pcoded-micon, + > li.active > a > .pcoded-micon { + color: #fff; + } + } + + &.menu-light { + .pcoded-inner-navbar { + > li.pcoded-trigger > a > .pcoded-micon, + > li.active > a > .pcoded-micon { + color: $menu-light-text-color; + } + } + } +} + +body { + &.layout-1 { + .pcoded-navbar.icon-colored { + .sidemenu { + $flg: 1; + @for $k from 1 through 8 { + @each $value in $menu-icon-color { + > li:nth-child(#{$flg}) > a { + color: $value; + } + $flg: $flg + 1; + } + } + } + } + } +} +/* ====== [ Menu icon end ] ======== */ +/* ====== [ Header color start ] ======== */ +.theme-horizontal ~ .pcoded-header { + background: #fff; + box-shadow: 0 1px 20px 0 rgba(63, 77, 103, 0.15); + @media only screen and (max-width: 991px) { + background: $menu-dark-background; + + .horizontal-dasktop { + display: none; + } + + .horizontal-mobile { + display: inline-block; + } + } +} + +.theme-horizontal-dis ~ .pcoded-header { + @media only screen and (max-width: 992px) { + .horizontal-dasktop { + display: none; + } + + .horizontal-mobile { + display: inline-block; + } + } +} + +.pcoded-header { + &[class*='header-']:not(.header-default) { + box-shadow: 0 3px 10px 0 rgba(65, 72, 78, 0.02); + } + @each $value in $color-header-name { + $i: index($color-header-name, $value); + + &.header-#{'' + $value} { + background: nth($color-header-color, $i); + color: rgba(256, 256, 256, 0.8); + + .profile-notification { + li { + > a { + color: $theme-font-color; + } + + &.active, + &:active, + &:focus, + &:hover { + background: transparentize(nth($color-header-color, $i), 0.9); + + > a { + background: transparent; + } + } + } + } + + .dropdown-menu { + color: $theme-font-color; + + a { + color: $theme-font-color; + } + + > li { + > a { + color: $theme-font-color; + } + + &.active, + &:active, + &:focus, + &:hover { + background: transparentize(nth($color-header-color, $i), 0.9); + color: $theme-font-color; + + > a { + background: transparent; + } + } + } + } + + .input-group .input-group-text, + a, + .btn, + .dropdown-toggle { + color: rgba(256, 256, 256, 0.8); + + &:hover { + color: #fff; + } + @media only screen and (max-width: 991px) { + color: $menu-light-text-color; + + &:hover { + color: darken($menu-light-text-color, 10%); + } + } + } + + .main-search { + .search-close > .input-group-text { + color: nth($color-header-color, $i); + } + + &.open { + .input-group { + .search-btn { + background: nth($color-header-color, $i); + border-color: nth($color-header-color, $i); + + .input-group-text { + color: #fff; + } + } + } + } + } + + .dropdown { + .notification { + .noti-body { + li { + &.notification:hover { + background: transparentize(nth($color-header-color, $i), 0.9); + } + } + } + } + + .profile-notification { + .pro-head { + color: #fff; + background: nth($color-header-color, $i); + + .dud-logout { + color: #fff; + } + } + } + + &.drp-user.show { + &:before { + color: nth($color-header-color, $i); + } + } + } + + .b-bg { + background: #fff; + + i { + color: nth($color-header-color, $i); + background-image: nth($color-header-color, $i); + -webkit-background-clip: text; + -webkit-text-fill-color: unset; + } + } + } + } +} +/* ====== [ Header color end ] ======== */ +/* ====== [ Brand color start ] ======== */ +.pcoded-navbar { + &[class*='brand-']:not(.brand-default) { + .mobile-menu { + span, + span:after, + span:before { + background: #fff; + } + + &.on span { + background: transparent; + } + } + + .b-bg { + background: #fff; + + i { + color: $success-color; + background-image: $theme-color; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + } + } + @each $value in $color-header-name { + $i: index($color-header-name, $value); + + &.brand-#{'' + $value} .header-logo, + &[class*='navbar-'].brand-#{'' + $value} .header-logo { + background: nth($color-header-color, $i); + @if ($value== 'dark') { + .b-bg { + background: $theme-color; + + i { + color: #fff; + -webkit-text-fill-color: unset; + } + } + } @else { + .b-bg { + background: #fff; + + i { + color: nth($color-header-color, $i); + -webkit-text-fill-color: unset; + } + } + } + } + } + + &.brand-default .header-logo, + &[class*='navbar-'].brand-default .header-logo { + /* junny */ + background: $menu-light-background; + /* background: $menu-dark-background; */ + } +} +/* ====== [ Brand color end ] ======== */ +/* ====== [ Menu color start ] ======== */ +.pcoded-navbar { + @each $value in $color-menu-name { + $i: index($color-menu-name, $value); + + &.navbar-#{'' + $value} { + background: nth($color-menu-color, $i); + + .mobile-menu { + span { + background-color: #fff; + + &:after, + &:before { + background-color: #fff; + } + } + + &.on { + span { + background-color: transparent; + } + } + } + + .header-logo { + .b-bg { + background: nth($color-menu-color, $i); + + i { + color: #fff; + -webkit-text-fill-color: unset; + } + } + } + + .navbar-brand, + .pcoded-submenu { + background: transparent; + } + + .pcoded-menu-caption { + color: #fff; + } + + .pcoded-inner-navbar { + li { + a { + color: #fff; + } + + &.active, + &:focus, + &:hover { + > a { + color: #fff; + } + } + + .pcoded-submenu > li { + &.active, + &:focus, + &:hover { + > a { + &:before { + background: #fff; + } + } + } + } + } + + > li { + &.active, + &.pcoded-trigger { + > a { + // background: rgba(0, 0, 0, 0.08); + background: rgba(254, 199, 2, 0.05); + color: #fff; + box-shadow: none; + } + } + } + } + + &.theme-horizontal { + .sidenav-horizontal-next, + .sidenav-horizontal-prev { + background: nth($color-menu-color, $i); + color: rgba(256, 256, 256, 0.8); + + &:hover { + color: #fff; + } + } + + .pcoded-inner-navbar { + > li { + &.pcoded-hasmenu { + &.active, + &.pcoded-trigger { + &:before { + color: nth($color-menu-color, $i); + } + } + } + } + } + } + } + } +} + +body { + &.layout-1 { + .pcoded-navbar { + @each $value in $color-menu-name { + $i: index($color-menu-name, $value); + + &.navbar-#{'' + $value} { + .sidemenu { + box-shadow: inset -1px 0 0 0 rgba(255, 255, 255, 0.3); + li.active:after { + background: #fff; + } + li a { + color: #fff; + + &:after { + border-bottom: 1px solid rgba(255, 255, 255, 0.3); + } + } + } + } + } + } + } +} +/* ====== [ Menu color end ] ======== */ +/* ====== [ Active Color start ] ======== */ +.pcoded-navbar { + &.menu-item-icon-style1 { + .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:hover:before, + .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a.active:before { + background: #fec702; + display: none; + } + } + @each $value in $color-active-name { + $i: index($color-active-name, $value); + &[class*='menu-item-icon-style']:not(.menu-item-icon-style1) { + .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a.active:before { + color: #3ebfea; + } + } + + &.active-#{'' + $value} { + &.menu-item-icon-style1 { + .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:hover:before, + .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a.active:before { + background: nth($color-active-color, $i); + } + } + &[class*='menu-item-icon-style']:not(.menu-item-icon-style1) { + .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a.active:before { + color: nth($color-active-color, $i); + } + } + + .pcoded-inner-navbar { + li > a { + &.active, + &:focus, + &:hover { + color: nth($color-active-color, $i); + } + + .pcoded-submenu > li { + &.active, + &:focus, + &:hover { + > a { + &:before { + background: nth($color-active-color, $i); + } + } + } + } + } + + > li { + &.active, + &.pcoded-trigger { + &:after { + background-color: nth($color-active-color, $i); + } + + > a { + background: darken($header-dark-background, 6%); + color: #fff; + } + } + } + } + + &.menu-light { + .pcoded-inner-navbar { + > li { + &.active, + &.pcoded-trigger { + > a { + background: #f1f1f1; + color: #111; + } + } + } + } + } + + &.theme-horizontal { + .pcoded-inner-navbar { + > li { + &, + &.pcoded-hasmenu { + &.active, + &.pcoded-trigger, + &:hover { + > a { + background: transparent; + } + } + + .pcoded-submenu > li { + a.active { + color: nth($color-active-color, $i); + background: transparent; + } + &.pcoded-trigger, + &:hover { + > a { + color: nth($color-active-color, $i); + } + } + + .pcoded-submenu > li.active { + > a { + color: nth($color-active-color, $i); + } + } + } + } + } + } + } + } + } +} + +body { + &.layout-1 { + .pcoded-navbar { + @each $value in $color-active-name { + $i: index($color-active-name, $value); + + &.active-#{'' + $value} { + .sidemenu { + li { + &.active { + color: nth($color-active-color, $i); + + &:after { + background-color: nth($color-active-color, $i); + } + } + } + } + } + } + } + } +} +/* ====== [ Active Color end ] ======== */ +/* ====== [ menu static start ] ======== */ +.pcoded-navbar.menupos-static { + position: absolute; + height: 100%; + min-height: 100%; + .datta-scroll.navbar-content { + height: calc(100% - #{$header-height}); + min-height: 100vh; + } +} +/* ====== [ menu static end ] ======== */ +/* ====== [Boxc start ] ======== */ +body.box-layout { + position: static; + + .pcoded-header { + position: relative; + + &.headerpos-fixed { + ~ .pcoded-main-container { + padding-top: 0; + } + } + } + + .pcoded-navbar { + &.theme-horizontal { + ~ .pcoded-header { + position: relative; + } + } + } + @media only screen and (max-width: 992px) { + position: relative; + + &.container { + padding: 0; + } + } +} +/* ====== [ Box end ] ======== */ +/* ====== [ Header Fixed start ] ======== */ +.pcoded-header.headerpos-fixed { + position: fixed; + top: 0; + + ~ .pcoded-main-container { + padding-top: $header-height; + @media only screen and (max-width: 991px) { + padding-top: $header-height * 2; + } + } +} +/* ====== [Header Fixed end ] ======== */ +/* ====== [ Dropdown icon start ] ======== */ +.pcoded-navbar { + &.drp-icon-style2 { + .pcoded-inner-navbar { + li.pcoded-hasmenu { + > a { + &:after { + content: '\e847'; + } + } + } + } + } + + &.drp-icon-style3 { + .pcoded-inner-navbar { + li.pcoded-hasmenu { + > a { + &:after { + content: '\e8b1'; + } + } + + &.pcoded-trigger { + > a { + &:after { + transform: rotate(45deg); + } + } + } + } + } + } +} +/* ====== [ Dropdown icon end ] =================== */ +/* ====== [ Menu Item icon start ] ================ */ +.pcoded-navbar { + &[class*='menu-item-icon-style']:not(.menu-item-icon-style1) { + .pcoded-navbar.navbar-collapsed .pcoded-inner-navbar > li.pcoded-trigger .pcoded-submenu:after { + background: rgba(169, 183, 208, 0.05); + } + + .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:before { + font-family: 'feather'; + font-style: normal; + padding-right: 4px; + font-size: 13px; + position: absolute; + left: 35px; + top: 10px; + opacity: 1; + visibility: visible; + background: transparent; + } + + &.theme-horizontal { + .pcoded-inner-navbar { + > li.pcoded-hasmenu { + > .pcoded-submenu { + > li { + > a:before { + left: 5px; + } + + > .pcoded-submenu { + > li { + > a:before { + top: 12px; + } + } + } + } + } + } + } + } + } + + &.menu-item-icon-style2 .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:before { + content: '\e897'; + } + + &.menu-item-icon-style3 .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:before { + content: '\e83f'; + } + + &.menu-item-icon-style4 .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:before { + content: '\e856'; + } + + &.menu-item-icon-style5 .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:before { + content: '\e847'; + } + + &.menu-item-icon-style6 .pcoded-inner-navbar li.pcoded-hasmenu .pcoded-submenu li > a:before { + content: '\e844'; + } +} +/* ====== [ Menu Item icon end ] ================== */ +/* ====== [ Menu background images start ] ======== */ +.pcoded-navbar { + &[class*='navbar-image'] { + background-size: cover; + background-repeat: no-repeat; + background-position: center bottom; + + .navbar-brand, + .pcoded-submenu { + background: transparent; + } + + .pcoded-inner-navbar > li { + &.active > a, + &.pcoded-trigger > a { + // background: transparentize(darken($menu-dark-background, 6%), 0.6); + background: rgba(254, 199, 2, 0.05); + } + } + + &:before { + content: ''; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.7); + } + } +} + +body { + &.layout-1 { + .pcoded-navbar { + &[class*='navbar-image'] { + .header-logo { + background: transparent; + } + } + } + } +} +/* ====== [ Menu background images end ] ========== */ +/* ====== [ Menu title color start ] ============== */ +.pcoded-navbar { + @each $value in $color-title-name { + $i: index($color-title-name, $value); + + &.title-#{'' + $value} { + .pcoded-inner-navbar .pcoded-menu-caption { + color: nth($color-active-color, $i); + } + } + } +} +/* ====== [ Menu title color end ] ================ */ +/* ====== [ Hide Caption start ] ============== */ +.pcoded-navbar { + &.caption-hide { + .pcoded-menu-caption { + display: none; + } + } +} +/* ====== [ Hide Caption end ] ================ */ +/* ========================== Diffrent Layout Styles end ====================== */ +/* temp SCSS for document */ +.doc-img { + > a { + position: relative; + width: 130px; + height: 80px; + display: inline-block; + border: 3px solid #fff; + margin-right: 5px; + background: $theme-background; + overflow: hidden; + + span { + width: 100%; + position: absolute; + + &:after, + &:before { + content: ''; + height: 100%; + position: absolute; + } + + &:before { + width: 30%; + left: 0; + background: $menu-dark-background; + } + + &:after { + width: 70%; + right: 0; + background: $theme-background; + } + } + + > span:nth-child(1) { + height: 20%; + top: 0; + } + + > span:nth-child(2) { + height: 80%; + bottom: 0; + } + + &.active { + border-color: $primary-color; + + &:before { + content: '\e83f'; + top: -4px; + font-size: 20px; + position: absolute; + left: 10px; + font-family: 'feather'; + z-index: 1001; + color: $primary-color; + transition: 0.3s ease-in-out; + text-shadow: + 0 3px 8px transparentize($primary-color, 0.1), + 0 3px 8px rgba(0, 0, 0, 0.1); + } + + &:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(255, 255, 255, 0.65); + } + } + + &[data-value='menu-light'] { + span { + &:before { + background: $menu-light-background; + } + } + } + + &[data-value='dark'] { + span { + &:after { + background: darken($dark-layout, 7%); + } + } + } + } +} +@each $value in $color-menu-name { + $i: index($color-menu-name, $value); + + .nav-link { + &.active.h-#{'' + $value} { + background: rgba(254, 199, 2, 0.05); + } + } +} +@media all and (-ms-high-contrast: none) { + .pcoded-header .dropdown.show::before { + line-height: 0.1; + } + + .pcoded-header .navbar-nav > li { + display: inline-flex; + } + + .pcoded-header .navbar-nav > li.dropdown { + display: inline-block; + } + + .dropdown-menu.show::before { + top: -2px; + } + + .pcoded-navbar.navbar-collapsed .pcoded-inner-navbar > li.pcoded-trigger .pcoded-submenu::after { + left: 40px; + } +} +/* =================================================================================================== + ========================== Diffrent types of NAvbar Layout Styles end ====================== + =================================================================================================== */ +.pcoded-navbar { + &.layout-2, + &.layout-2-2, + &.layout-3, + &.layout-4, + &.layout-4-2 { + a { + color: rgba(255, 255, 255, 0.85); + } + + .pcoded-submenu { + background-color: rgba(0, 0, 0, 0.05); + + .pcoded-submenu { + background-color: transparent; + } + } + + &.navbar-collapsed { + .pcoded-inner-navbar > li.pcoded-trigger .pcoded-submenu:after { + display: none; + } + + &:hover .pcoded-inner-navbar > li.pcoded-trigger .pcoded-submenu li a { + color: rgba(255, 255, 255, 0.85); + } + } + + .pcoded-inner-navbar { + .pcoded-menu-caption { + display: none; + } + + > li { + > a { + padding: 20px 15px; + margin-top: 0; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + + .pcoded-badge { + top: 25px; + } + + > .pcoded-micon + .pcoded-mtext { + top: 25px; + } + } + + &.pcoded-hasmenu > a:after { + top: 25px; + } + + &.active, + &.pcoded-trigger { + &:after { + display: none; + } + + > a { + background-color: rgba(0, 0, 0, 0.08); + } + } + } + + li { + > a { + &.active, + &:focus, + &:hover { + color: #fff; + } + } + + .pcoded-submenu { + > li { + > a { + &.active, + &:focus, + &:hover { + &:before { + background: #fff; + } + } + } + } + } + } + } + } + + &.layout-2 { + background: linear-gradient(253deg, #1de9b6 0, #1dc4e9 70%); + } + + &.layout-2-2 { + background: $theme-color2; + + .navbar-brand { + .b-brand { + .b-bg { + background: $theme-color2; + } + } + } + } + + &.layout-3 { + background: $primary-color; + } + + &.layout-4, + &.layout-4-2 { + background: #212224; + + a { + color: rgba(255, 255, 255, 0.5); + } + + .pcoded-submenu { + background-color: rgba(255, 255, 255, 0.05); + + .pcoded-submenu { + background-color: transparent; + } + } + + .pcoded-inner-navbar { + > li { + > a { + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + } + + &.active, + &.pcoded-trigger { + > a { + background: rgba(254, 199, 2, 0.05); + // background-color: rgba(255, 255, 255, 0.08); + } + } + } + } + + .navbar-brand { + background: $theme-color; + + .mobile-menu { + span, + span:after, + span:before { + background: #fff; + } + + &.on span { + background: transparent; + } + } + + .b-brand { + .b-bg { + background: #fff; + + i { + color: $success-color; + background-image: $theme-color; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + } + } + } + } + + &.layout-4-2 { + .navbar-brand { + background: $theme-color2; + + .b-brand { + .b-bg { + background: #fff; + + i { + color: $success-color; + background-image: $theme-color2; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + } + } + } + } +} + +body.layout-6 { + background: $layout-6-bg-color; + background-size: cover; + background-attachment: fixed; + background-position: top right; + position: relative; + + .page-header-title + .breadcrumb > .breadcrumb-item:last-child a, + .page-header-title h5, + .pcoded-header .input-group .input-group-text, + .pcoded-header .navbar-nav > li > .dropdown > .dropdown-toggle, + .pcoded-header .navbar-nav > li > .dropdown-toggle, + .pcoded-header .navbar-nav > li > a { + color: #fff; + } + + .mobile-menu span, + .mobile-menu span:after, + .mobile-menu span:before, + .pcoded-navbar.menu-light .mobile-menu span, + .pcoded-navbar.menu-light .mobile-menu span:after, + .pcoded-navbar.menu-light .mobile-menu span:before { + background: #fff; + } + + .breadcrumb-item + .breadcrumb-item::before, + .page-header-title + .breadcrumb > .breadcrumb-item a { + color: rgba(255, 255, 255, 0.8); + } + + .pcoded-content { + background: $theme-background; + } + + .navbar-brand, + .pcoded-header.header-blue, + .pcoded-navbar, + .pcoded-navbar.menu-light, + .pcoded-navbar.menu-light .header-logo { + background: transparent; + box-shadow: none; + } + + .pcoded-navbar .navbar-content { + background: #7e84a3; + border-radius: 0 10px 0 0; + box-shadow: 0 0 20px 0 #7e84a3; + } + + &.box-layout .pcoded-navbar .navbar-content { + border-radius: 10px 10px 0 0; + } + + .main-body { + min-height: calc(100vh - 200px); + } + + .pcoded-navbar.menu-light .navbar-content { + background: #fff; + box-shadow: 7px 0 15px 0 rgba(69, 90, 100, 0.09); + } + + .pcoded-navbar.mob-open ~ .pcoded-header:before, + .pcoded-navbar.mob-open ~ .pcoded-main-container:before, + .pcoded-navbar.navbar-collapsed:hover ~ .pcoded-header:before, + .pcoded-navbar.navbar-collapsed:hover ~ .pcoded-main-container:before { + background: transparent; + } + + .pcoded-navbar.navbar-collapsed:hover { + .navbar-brand { + .b-brand { + display: none; + } + + .mobile-menu { + right: auto; + left: 20px; + transition-delay: 0s; + + span { + background: transparent; + } + } + } + } + /* for able pro style */ + .pcoded-content { + margin-top: 200px; + } + + .pcoded-content .pcoded-inner-content { + margin-top: -200px; + min-height: calc(100vh + 150px); + } + + .card { + border-radius: 5px; + } + /* dark navbar */ + .pcoded-navbar { + .header-logo { + background: transparent; + } + + &.navbar-dark { + &.brand-lightblue .header-logo, + &[class*='navbar-'].brand-lightblue .header-logo, + .header-logo { + background: transparent; + } + + .navbar-content { + background: nth($color-menu-color, 5); + box-shadow: 2px 0 20px 0 rgba(0, 0, 0, 0.08); + } + } + } + @media only screen and (max-width: 991px) { + .pcoded-header { + .input-group .input-group-text, + .navbar-nav > li > .dropdown > .dropdown-toggle, + .navbar-nav > li > .dropdown-toggle, + .navbar-nav > li > a { + color: $header-light-text-color; + } + } + } +} + +body.layout-8 { + .pcoded-header { + box-shadow: inset 0 -1px 0 0 rgba(100, 121, 143, 0.122); + } + + .pcoded-navbar { + &.menu-light { + box-shadow: inset -1px 0 0 0 rgba(100, 121, 143, 0.122); + + .pcoded-submenu { + background: transparent; + } + + .pcoded-inner-navbar { + > li { + &.pcoded-menu-caption { + &:after { + content: ''; + position: absolute; + top: 10px; + left: 20px; + height: 1px; + width: calc(100% - 40px); + box-shadow: inset 0 -1px 0 0 rgba(100, 121, 143, 0.122); + } + + &:first-child { + &:after { + display: none; + } + } + } + + > a { + border-radius: 0 20px 20px 0; + margin-right: 15px; + padding: 4px 15px; + + &:after { + top: 8px; + right: 15px; + } + + > .pcoded-micon + .pcoded-mtext { + top: 9px; + } + } + + &.active, + &.pcoded-trigger { + > a { + background: rgba(254, 199, 2, 0.05); + color: #23b7e5; + } + } + } + } + } + + &.navbar-collapsed { + .pcoded-inner-navbar { + > li { + > a { + margin-right: 8px; + + &:after { + top: 8px; + right: 15px; + } + } + } + } + } + @each $value in $color-active-name { + $i: index($color-active-name, $value); + + &.active-#{'' + $value} { + .pcoded-inner-navbar { + > li { + &.active, + &.pcoded-trigger { + > a { + background: rgba(254, 199, 2, 0.05); + color: nth($color-active-color, $i); + } + } + } + } + } + } + } + + .card { + box-shadow: 0 0 0 1px rgba(100, 121, 143, 0.122); + transition: all 0.25s ease-in-out; + + &:hover { + box-shadow: + 0 0 0 1px rgba(100, 121, 143, 0.122), + 0 2px 1px rgba(0, 0, 0, 0.05); + } + } +} + +body { + &.layout-1 { + .pcoded-navbar { + .toggle-sidemenu { + position: fixed; + bottom: 0; + left: 0; + background: darken($menu-dark-background, 10%); + width: 40px; + height: 40px; + font-size: 20px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 0 5px 0 0; + } + &.navbar-collapsed { + .toggle-sidemenu { + display: none; + } + } + + .header-logo { + padding: 10px 20px; + } + + .sidemenu { + left: 0; + position: relative; + transition: all 0.3s ease-in-out; + + li { + position: relative; + + a { + font-size: 22px; + padding: 10px 29px; + position: relative; + cursor: pointer; + + &:after { + content: ''; + position: absolute; + height: 1px; + width: 60%; + left: 20%; + bottom: 0; + border-bottom: 1px solid rgba(181, 189, 202, 0.2); + } + } + + &:last-child { + a { + &:after { + display: none; + } + } + } + + &.active { + color: nth($color-active-color, 1); + + &:after { + content: ''; + background-color: nth($color-active-color, 1); + z-index: 1027; + position: absolute; + right: 0; + top: 7px; + width: 3px; + height: calc(100% - 14px); + border-radius: 3px 0 0 3px; + } + } + } + box-shadow: inset -1px 0 0 0 transparentize($menu-dark-text-color, 0.8); + } + + .layout1-nav { + display: flex; + align-items: stretch; + height: auto; + min-height: 100%; + } + + .side-content { + flex: 1 1 0; + + .sidelink { + display: none; + + &.active { + display: block; + } + + .pcoded-inner-navbar { + li { + &.pcoded-menu-caption { + font-size: 16px; + padding: 16px 15px 16px 18px; + font-weight: 400; + text-transform: capitalize; + + &:after { + content: ''; + position: absolute; + height: 1px; + width: 40px; + left: 18px; + bottom: 13px; + border-bottom: 1px solid rgba(181, 189, 202, 0.2); + } + } + + &.pcoded-hasmenu { + .pcoded-submenu li > { + a { + padding: 7px 7px 7px 40px; + + &:before { + left: 20px; + } + } + + .pcoded-submenu > li > a { + padding: 7px 7px 7px 60px; + + &:before { + left: 40px; + } + } + } + } + } + + > li { + > a { + padding: 12px 10px 12px 20px; + + .pcoded-micon { + display: none; + } + + .pcoded-mtext { + position: relative; + top: 0; + font-family: 'Pretendard'; + font-weight: 500; + } + } + + &.active, + &.pcoded-trigger { + &:after { + display: none; + } + } + } + } + } + } + + &.hide-sidemenu { + .sidemenu { + position: absolute; + left: -#{$Menu-collapsed-width}; + } + + .toggle-sidemenu i { + transform: rotate(180deg); + } + } + } + } +} +// === scroll bar ===== + +.navbar-content { + position: relative; +} + +.ps .ps__rail-x.ps--clicking, +.ps .ps__rail-x:focus, +.ps .ps__rail-x:hover, +.ps .ps__rail-y.ps--clicking, +.ps .ps__rail-y:focus, +.ps .ps__rail-y:hover { + background: transparent; +} + +.ps__thumb-y { + background: #2a3446; +} + +.ps__rail-y.ps--clicking .ps__thumb-y, +.ps__rail-y:focus > .ps__thumb-y, +.ps__rail-y:hover > .ps__thumb-y { + background: #222a38; +} + +/* nav-outside */ +.nav-outside { + position: absolute; + width: 100%; + height: 100%; +} diff --git a/src/styles/partials/mixins/_alert.scss b/src/styles/partials/mixins/_alert.scss new file mode 100644 index 0000000..adc3209 --- /dev/null +++ b/src/styles/partials/mixins/_alert.scss @@ -0,0 +1,14 @@ +@mixin alert-variant-pc($background, $border, $color) { + color: $color; + border-color: $border; + hr { + border-top-color: darken($border, 5%); + } + + .alert-link { + color: darken($color, 10%); + } +} +.swal-footer { + text-align: center; +} diff --git a/src/styles/partials/mixins/_buttons.scss b/src/styles/partials/mixins/_buttons.scss new file mode 100644 index 0000000..2b5c4af --- /dev/null +++ b/src/styles/partials/mixins/_buttons.scss @@ -0,0 +1,103 @@ +/* Button variants + Easily pump out default styles, as well as :hover, :focus, :active, + and disabled options for all buttons */ +@mixin button-variant-pc( + $background, + $border, + $hover-background: darken($background, 7.5%), + $hover-border: darken($border, 10%), + $active-background: darken($background, 10%), + $active-border: darken($border, 12.5%) +) { + color: color-yiq($background); + background-color: $border; + border-color: $border; + + &:hover { + color: color-yiq($hover-background); + background-color: $hover-background; + border-color: $hover-border; + } + + &.focus, + &:focus { + } + + &.disabled, + &:disabled { + color: color-yiq($background); + background-color: $background; + border-color: $border; + } + + &:not(:disabled):not(.disabled).active, + &:not(:disabled):not(.disabled):active, + .show > &.dropdown-toggle { + color: color-yiq($active-background); + background-color: $active-background; + border-color: $active-border; + + &:focus { + } + } +} +@mixin button-outline-variant-pc( + $color, + $color-hover: color-yiq($color), + $active-background: $color, + $active-border: $color +) { + color: $color; + background-color: transparent; + background-image: none; + border-color: $color; + + &:hover { + color: color-yiq($color); + background-color: $active-background; + border-color: $active-border; + } + + &.focus, + &:focus { + } + + &.disabled, + &:disabled { + color: $color; + background-color: transparent; + } + + &:not(:disabled):not(.disabled).active, + &:not(:disabled):not(.disabled):active, + .show > &.dropdown-toggle { + color: color-yiq($active-background); + background-color: $active-background; + border-color: $active-border; + + &:focus { + } + } +} +@mixin button-glow-variant-pc( + $color, + $color-hover: color-yiq($color), + $active-background: $color, + $active-border: $color +) { + box-shadow: + 0 1px 6px 2px transparentize($color, 0.44), + 0 6px 11px 2px transparentize($color, 0.8); + &:hover { + box-shadow: + 0 1px 4px 2px transparentize($color, 0.44), + 0 4px 9px 2px transparentize($color, 0.9); + } + &:not(:disabled):not(.disabled).active, + &:not(:disabled):not(.disabled):active:focus, + .show > &.dropdown-toggle, + &.active, + &:focus { + box-shadow: none; + } +} diff --git a/src/styles/partials/mixins/_function.scss b/src/styles/partials/mixins/_function.scss new file mode 100644 index 0000000..a559cca --- /dev/null +++ b/src/styles/partials/mixins/_function.scss @@ -0,0 +1,20 @@ +@function color-yiq($color) { + $r: red($color); + $g: green($color); + $b: blue($color); + $yiq: calc((($r * 299) + ($g * 587) + ($b * 114)) / 1000); + @if ($yiq >= $yiq-contrasted-threshold) { + @return $yiq-dark-color; + } @else { + @return $yiq-light-color; + } +} +@function theme-color($key: 'primary') { + @return map-get($theme-colors, $key); +} +@function theme-color-level($color-name: 'primary', $level: 0) { + $color: theme-color($color-name); + $color-base: if($level > 0, $yiq-dark-color, $yiq-light-color); + $level: abs($level); + @return mix($color-base, $color, $level * $theme-color-interval); +} diff --git a/src/styles/partials/mixins/_pagination.scss b/src/styles/partials/mixins/_pagination.scss new file mode 100644 index 0000000..3ad33fb --- /dev/null +++ b/src/styles/partials/mixins/_pagination.scss @@ -0,0 +1,22 @@ +/* Pagination */ + +@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { + .page-link { + padding: $padding-y $padding-x; + font-size: $font-size; + line-height: $line-height; + } + + .page-item { + &:first-child { + .page-link { + @include border-left-radius($border-radius); + } + } + &:last-child { + .page-link { + @include border-right-radius($border-radius); + } + } + } +} diff --git a/src/styles/partials/other/_chart.scss b/src/styles/partials/other/_chart.scss new file mode 100644 index 0000000..e72d25e --- /dev/null +++ b/src/styles/partials/other/_chart.scss @@ -0,0 +1,153 @@ +/** ===================== + Chart css start +========================== **/ +.nvtooltip { + position: fixed !important; +} +.peity-chart { + + .peity { + width: 100%; + height: 250px; + } +} +/* Radial Chart Start */ +$unhalf: 90, 108, 126, 144, 162, 180, 198, 216, 234, 252, 270, 288, 306, 324, 342, 360, 378, 396, 414, 432, 450; +$dt: 0; +$flg: 1; + +.radial-bar { + position: relative; + display: inline-block; + border-radius: 50%; + background-color: transparent; + margin-bottom: 20px; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + width: 80px; + height: 80px; + font-size: 18px; + background-clip: content-box; + + &:after { + display: inline-block; + position: absolute; + top: 0; + left: 0; + border-radius: 50%; + text-align: center; + font-weight: 500; + color: #455a64; + width: 56px; + height: 56px; + margin-left: 12px; + margin-top: 12px; + line-height: 56px; + content: attr(data-label); + background-color: #fff; + z-index: 55; + } + + > img { + display: inline-block; + position: absolute; + top: 0; + left: 0; + border-radius: 50%; + text-align: center; + font-weight: 500; + color: #455a64; + width: 56px; + height: 56px; + margin-left: 12px; + margin-top: 12px; + line-height: 56px; + } + + > img { + z-index: 102; + } + @while $dt<=100 { + &.radial-bar-#{$dt} { + @if ($dt < 50) { + background-image: linear-gradient(90deg, #d6d6d6 50%, transparent 50%, transparent), + linear-gradient(#{nth($unhalf, $flg)}deg, $success-color 50%, #d6d6d6 50%, #d6d6d6); + } @else { + background-image: linear-gradient(#{nth($unhalf, $flg)}deg, $success-color 50%, transparent 50%, transparent), + linear-gradient(270deg, $success-color 50%, #d6d6d6 50%, #d6d6d6); + } + } + $dt: $dt + 5; + $flg: $flg + 1; + } + @each $value in $color-bt-name { + $i: index($color-bt-name, $value); + + &.radial-bar-#{$value} { + @while $dt<=100 { + &.radial-bar-#{$dt} { + @if ($dt < 50) { + background-image: linear-gradient(90deg, #d6d6d6 50%, transparent 50%, transparent), + linear-gradient(#{nth($unhalf, $flg)}deg, nth($color-bt-color, $i) 50%, #d6d6d6 50%, #d6d6d6); + } @else { + background-image: linear-gradient( + #{nth($unhalf, $flg)}deg, + nth($color-bt-color, $i) 50%, + transparent 50%, + transparent + ), + linear-gradient(270deg, nth($color-bt-color, $i) 50%, #d6d6d6 50%, #d6d6d6); + } + } + $dt: $dt + 5; + $flg: $flg + 1; + } + } + } +} +.radial-bar-lg { + width: 100px; + height: 100px; + font-size: 20px; + + > img, + &:after { + width: 70px; + height: 70px; + margin-left: 15px; + margin-top: 15px; + line-height: 70px; + } +} + +.radial-bar-sm { + width: 60px; + height: 60px; + font-size: 12px; + + > img, + &:after { + width: 40px; + height: 40px; + margin-left: 10px; + margin-top: 10px; + line-height: 42px; + } +} + +.radial-bar-xs { + width: 35px; + height: 35px; + font-size: 10px; + + > img, + &:after { + width: 25px; + height: 25px; + margin-left: 5.5px; + margin-top: 4.5px; + line-height: 25px; + } +} +/* Radial Chart End */ +/**====== Chart css end ======**/ diff --git a/src/styles/partials/other/_chat.scss b/src/styles/partials/other/_chat.scss new file mode 100644 index 0000000..6f2a666 --- /dev/null +++ b/src/styles/partials/other/_chat.scss @@ -0,0 +1,428 @@ +/** ===================== + Chatting css start +========================== **/ + +.header-chat, +.header-user-list { + height: 100%; + width: 350px; + position: fixed; + top: 0; + right: -350px; + border-radius: 0; + z-index: 1030; + background-color: #fff; + transition: all 0.3s ease-in-out; + + .main-friend-cont { + height: calc(100vh - 166px); + .main-friend-list { + height: calc(100vh - 85px); + } + } + + .h-list-header { + padding: 15px; + border-bottom: 1px solid #f1f1f1; + } + + .h-list-body { + padding: 20px 0; + } + + &.open { + box-shadow: 0 1px 10px 0 rgba(69, 90, 100, 0.2); + right: 0; + } +} + +.header-user-list { + &.open { + .h-close-text { + position: absolute; + top: 111px; + left: -99px; + + i { + position: absolute; + top: 23px; + left: 73px; + font-size: 25px; + z-index: 1003; + color: $success-color; + } + + &:after { + content: '\61'; + font-family: 'pct'; + z-index: 1001; + font-size: 150px; + line-height: 0; + color: #fff; + position: absolute; + top: 35px; + left: 6px; + text-shadow: -4px 0 7px rgba(69, 90, 100, 0.12); + } + } + + &.msg-open { + &:after { + color: transparentize($primary-color, 0.9); + } + } + } +} + +.h-list-header { + .form-control { + &:active, + &:focus, + &:hover { + box-shadow: none; + outline: none; + } + } +} + +.h-list-body { + position: relative; + + .userlist-box { + cursor: pointer; + display: flex; + align-items: center; + padding: 15px 20px; + position: relative; + + &:after { + content: ''; + position: absolute; + bottom: 0; + left: 20px; + width: calc(100% - 40px); + height: 1px; + background: #f3f4f9; + } + + &.active { + background: lighten($primary-color, 45%); + } + + .media-left { + padding-right: 10px; + } + + .media-object { + width: 50px; + display: inline-block; + } + + .chat-header { + font-size: 14px; + font-weight: 600; + margin-bottom: 0; + + small { + margin-top: 5px; + font-size: 90%; + } + } + + .live-status { + height: 25px; + width: 25px; + position: absolute; + top: 35px; + right: 20px; + border-radius: 100%; + color: #fff; + padding: 2px 0; + text-align: center; + background: $theme-color; + } + } +} + +.header-chat { + .h-list-header { + text-align: center; + position: relative; + + h6 { + margin: 5px 0; + } + + .h-back-user-list { + position: absolute; + left: 0; + top: 0; + height: 100%; + display: flex; + align-items: center; + width: 40px; + justify-content: center; + font-size: 20px; + } + } + + .main-chat-cont { + height: calc(100vh - 166px); + } + + .h-list-body { + height: 100%; + background: lighten($primary-color, 45%); + } + + .h-list-footer { + position: absolute; + bottom: 0; + width: 100%; + right: 0; + padding: 20px 15px; + z-index: 10; + background: lighten($primary-color, 45%); + + .input-group { + background: #fff; + border: none; + display: inline-flex; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.1); + padding: 7px; + border-radius: 20px 0 10px 20px; + width: calc(100% - 40px); + + .form-control, + .input-group-text { + background: transparent; + border: none; + border-radius: 0; + padding: 0; + } + + .btn-send, + .form-control { + &:active, + &:focus, + &:hover { + outline: none; + box-shadow: none; + } + } + + .btn-attach { + border-radius: 50%; + padding: 5px; + margin-right: 5px; + + > i { + margin-right: 0; + } + } + + .btn-send { + border-radius: 50%; + padding: 10px; + margin-left: 5px; + position: absolute; + right: -45px; + top: 2px; + z-index: 99; + + i { + margin-right: 0; + } + + .input-group-text { + color: #fff; + } + } + + .form-control { + transition: all 0.3s ease-in-out; + width: 0; + } + + &:after { + content: '\67'; + font-family: 'pct'; + z-index: 1001; + font-size: 35px; + line-height: 0; + color: #fff; + position: absolute; + top: 18px; + right: -23px; + text-shadow: 4px 10px 20px rgba(0, 0, 0, 0.1); + } + } + } +} + +.h-list-body { + .chat-messages { + padding-bottom: 20px; + padding-left: 15px; + padding-right: 15px; + + .photo-table { + padding-right: 15px; + + img { + display: inline-block; + width: 50px; + margin-bottom: 5px; + } + } + + .chat-menu-content, + .chat-menu-reply { + > div { + position: relative; + overflow: visible; + display: inline-block; + + .chat-cont { + padding: 15px 20px; + } + } + + .chat-time { + margin: 9px 8px 0 10px; + } + } + + .chat-menu-reply { + text-align: right; + + > div { + p { + background: #fff; + border-radius: 4px; + margin-bottom: 4px; + margin-right: 25px; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.1); + + &:first-child { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + } + + &:last-child { + border-bottom-left-radius: 8px; + border-bottom-right-radius: 0; + } + } + + &:before { + content: '\66'; + font-family: 'pct'; + z-index: 5; + font-size: 30px; + line-height: 0; + color: #fff; + position: absolute; + bottom: 19px; + right: 5px; + text-shadow: 7px 10px 20px rgba(0, 0, 0, 0.1); + } + } + } + + .chat-menu-content { + > div { + p { + background: $theme-color; + color: #fff; + border-radius: 4px; + margin-bottom: 4px; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.1); + + &:first-child { + border-top-left-radius: 0; + border-top-right-radius: 10px; + } + + &:last-child { + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + } + } + + &:before { + content: '\68'; + font-family: 'pct'; + z-index: 1001; + font-size: 30px; + line-height: 0; + color: #1ec9de; + position: absolute; + top: 15px; + left: -20px; + text-shadow: -4px 4px 10px rgba(0, 0, 0, 0.15); + } + } + } + } +} +/* massage page start */ + +.msg-card { + .msg-user-list { + height: calc(100vh - 300px); + } + + .msg-user-chat { + background: lighten($primary-color, 45%); + height: calc(100vh - 330px); + padding-top: 25px; + padding-bottom: 25px; + padding-left: 5px; + padding-right: 5px; + } + + .msg-block { + > .row { + > div { + &:before { + content: ''; + width: 1px; + height: 100%; + background: #f1f1f1; + position: absolute; + top: 0; + } + + &:first-child { + &:before { + right: 0; + } + } + + &:last-child { + &:before { + left: -1px; + } + } + } + } + } +} +.main-friend-chat { + padding-bottom: 15px; +} + +@media screen and (max-width: 991px) { + .msg-card .msg-block > .row > div:before { + background: none; + } +} +/* massage page end */ +/**====== Chat css end ======**/ + +@media only screen and (max-width: 991px) { + .pcoded-header { + color: $header-light-text-color; + } +} diff --git a/src/styles/partials/other/_icon-lauouts.scss b/src/styles/partials/other/_icon-lauouts.scss new file mode 100644 index 0000000..6aaf7be --- /dev/null +++ b/src/styles/partials/other/_icon-lauouts.scss @@ -0,0 +1,38 @@ +/** ===================== + Icon layouts css start +========================== **/ + +.i-main { + .i-block { + display: inline-flex; + align-items: center; + justify-content: center; + width: 70px; + height: 70px; + margin: 5px; + border: 1px solid #f1f1f1; + position: relative; + cursor: pointer; + + i { + font-size: 30px; + } + + label { + margin-bottom: 0; + display: none; + } + + span.ic-badge { + position: absolute; + bottom: 0; + right: 0; + } + + .flag-icon-background { + width: 40px; + height: 40px; + } + } +} +/**====== Icon layouts css end ======**/ diff --git a/src/styles/partials/other/_prism.scss b/src/styles/partials/other/_prism.scss new file mode 100644 index 0000000..c86e14c --- /dev/null +++ b/src/styles/partials/other/_prism.scss @@ -0,0 +1,108 @@ +/** ===================== + Prism css start +========================== **/ + +pre[class*='language-'] { + code { + font-size: 14px; + } + + [class*='language-'], + .language-markup { + background-color: transparent; + display: block; + padding: 10px 15px; + } +} + +pre.line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} + +pre.line-numbers > code { + position: relative; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; + /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.line-numbers-rows > span { + pointer-events: none; + display: block; + counter-increment: linenumber; +} + +.line-numbers-rows > span:before { + content: counter(linenumber); + display: block; + padding-right: 0.8em; + text-align: right; +} + +div.code-toolbar { + position: relative; +} + +div.code-toolbar > .toolbar { + position: absolute; + top: 0.3em; + right: 0.2em; + transition: opacity 0.3s ease-in-out; + opacity: 0; +} + +div.code-toolbar:hover > .toolbar { + opacity: 1; +} + +div.code-toolbar > .toolbar .toolbar-item { + display: inline-block; +} + +div.code-toolbar > .toolbar a { + cursor: pointer; +} + +div.code-toolbar > .toolbar button { + border: 0; + font: inherit; + line-height: normal; + overflow: visible; +} + +div.code-toolbar > .toolbar a, +div.code-toolbar > .toolbar button, +div.code-toolbar > .toolbar span { + color: #bbb; + font-size: 0.8em; + padding: 0 0.5em; + background: #f5f2f0; + background: rgba(224, 224, 224, 0.2); + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); + border-radius: 0.5em; +} + +div.code-toolbar > .toolbar a:focus, +div.code-toolbar > .toolbar a:hover, +div.code-toolbar > .toolbar button:focus, +div.code-toolbar > .toolbar button:hover, +div.code-toolbar > .toolbar span:focus, +div.code-toolbar > .toolbar span:hover { + color: inherit; + text-decoration: none; +} +/**====== Prism css end ======**/ diff --git a/src/styles/partials/other/_switches.scss b/src/styles/partials/other/_switches.scss new file mode 100644 index 0000000..aa3b7ac --- /dev/null +++ b/src/styles/partials/other/_switches.scss @@ -0,0 +1,97 @@ +/** ===================== + Switches css start +========================== **/ + +.switch { + input[type='checkbox'] { + opacity: 0; + position: absolute; + + + .form-check-label, + + .cr { + position: relative; + display: inline-block; + transition: 0.4s ease; + height: 20px; + width: 35px; + border: 1px solid #e9eaec; + border-radius: 60px; + cursor: pointer; + z-index: 0; + top: 12px; + + &:after, + &:before { + content: ''; + position: absolute; + display: block; + top: 0; + left: 0; + } + + &:before { + transition: 0.2s cubic-bezier(0.24, 0, 0.5, 1); + height: 20px; + width: 35px; + border-radius: 30px; + } + + &:after { + box-shadow: + 0 0 0 1px rgba(0, 0, 0, 0.1), + 0 4px 0 0 rgba(0, 0, 0, 0.04), + 0 4px 9px rgba(0, 0, 0, 0.13), + 0 3px 3px rgba(0, 0, 0, 0.05); + transition: 0.35s cubic-bezier(0.54, 1.6, 0.5, 1); + background: #f7f7f7; + height: 19px; + width: 19px; + border-radius: 60px; + } + } + + &:checked + .form-check-label, + &:checked + .cr { + &:before { + background: $theme-color; + transition: width 0.2s cubic-bezier(0, 0, 0, 0.1); + } + + &:after { + left: 16px; + } + } + + &:disabled + label { + opacity: 0.5; + filter: grayscale(0.4); + cursor: not-allowed; + } + } + @each $value in $color-bt-name { + $i: index($color-bt-name, $value); + + &.switch-#{$value} input[type='checkbox']:checked + .form-check-label:before, + &.switch-#{$value} input[type='checkbox']:checked + .cr:before { + background: nth($color-bt-color, $i); + } + } + + &.switch-alternative input[type='checkbox']:checked + .form-check-label:before, + &.switch-alternative input[type='checkbox']:checked + .cr:before { + background: $theme-color2; + } +} +/**====== Switches css end ======**/ +.switch { + .invalid-feedback { + position: absolute; + width: max-content; + top: calc(100% + 15px); + } + .form-check { + input[type='checkbox'] + .form-check-label { + top: 4px; + } + } +} diff --git a/src/styles/partials/pages/gallery.scss b/src/styles/partials/pages/gallery.scss new file mode 100644 index 0000000..92cf744 --- /dev/null +++ b/src/styles/partials/pages/gallery.scss @@ -0,0 +1,1151 @@ +.grid { + position: relative; + clear: both; + margin: 0 auto; + padding: 1em 0 4em; + max-width: 1000px; + list-style: none; + text-align: center; + + figure { + position: relative; + float: left; + overflow: hidden; + margin: 10px 1%; + min-width: 320px; + max-width: 480px; + max-height: 360px; + width: 48%; + height: auto; + background: #3085a3; + text-align: center; + cursor: pointer; + + img { + position: relative; + display: block; + min-height: 100%; + max-width: 100%; + opacity: 0.8; + } + + figcaption { + padding: 2em; + color: #fff; + text-transform: uppercase; + font-size: 1.25em; + backface-visibility: hidden; + + &::after, + &::before { + pointer-events: none; + } + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + + > a { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; + text-indent: 200%; + white-space: nowrap; + font-size: 0; + opacity: 0; + } + } + + h2 { + word-spacing: -0.15em; + font-weight: 300; + color: #fff; + + span { + font-weight: 800; + } + margin: 0; + } + + p { + margin: 0; + letter-spacing: 1px; + font-size: 68.5%; + } + } +} + +figure { + &.effect-julia { + background: #2f3238; + + img { + max-width: none; + height: 400px; + transition: + opacity 1s, + transform 1s; + backface-visibility: hidden; + } + + figcaption { + text-align: left; + } + + h2 { + position: relative; + padding: 0.5em 0; + } + + p { + display: inline-block; + margin: 0 0 0.25em; + padding: 0.4em 1em; + background: rgba(255, 255, 255, 0.9); + color: #2f3238; + text-transform: none; + font-weight: 500; + font-size: 75%; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(-360px, 0, 0); + + &:first-child { + transition-delay: 0.15s; + } + + &:nth-of-type(2) { + transition-delay: 0.1s; + } + + &:nth-of-type(3) { + transition-delay: 0.05s; + } + } + + &:hover { + p { + &:first-child { + transition-delay: 0s; + } + + &:nth-of-type(2) { + transition-delay: 0.05s; + } + + &:nth-of-type(3) { + transition-delay: 0.1s; + } + } + + img { + opacity: 0.4; + transform: scale3d(1.1, 1.1, 1); + } + + p { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } + } + + &.effect-goliath { + background: #df4e4e; + + h2, + img { + transition: transform 0.35s; + } + + img { + backface-visibility: hidden; + } + + h2 { + position: absolute; + bottom: 0; + left: 0; + padding: 30px; + } + + p { + position: absolute; + bottom: 0; + left: 0; + padding: 30px; + text-transform: none; + font-size: 90%; + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(0, 50px, 0); + } + + &:hover { + img { + transform: translate3d(0, -80px, 0); + } + + h2 { + transform: translate3d(0, -100px, 0); + } + + p { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } + } + + &.effect-hera { + background: #303fa9; + + h2 { + font-size: 158.75%; + position: absolute; + top: 50%; + left: 50%; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(-50%, -50%, 0); + transform-origin: 50%; + } + + p { + position: absolute; + top: 50%; + left: 50%; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(-50%, -50%, 0); + transform-origin: 50%; + } + + figcaption::before { + position: absolute; + top: 50%; + left: 50%; + width: 200px; + height: 200px; + border: 2px solid #fff; + content: ''; + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(-50%, -50%, 0) rotate3d(0, 0, 1, -45deg) scale3d(0, 0, 1); + transform-origin: 50%; + } + + p { + width: 100px; + text-transform: none; + font-size: 121%; + line-height: 2; + + a { + color: #fff; + + &:focus, + &:hover { + opacity: 0.6; + } + + i { + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + } + + &:first-child i { + transform: translate3d(-60px, -60px, 0); + } + + &:nth-child(2) i { + transform: translate3d(60px, -60px, 0); + } + + &:nth-child(3) i { + transform: translate3d(-60px, 60px, 0); + } + + &:nth-child(4) i { + transform: translate3d(60px, 60px, 0); + } + } + } + + &:hover { + figcaption::before { + opacity: 1; + transform: translate3d(-50%, -50%, 0) rotate3d(0, 0, 1, -45deg) scale3d(1, 1, 1); + } + + h2 { + opacity: 0; + transform: translate3d(-50%, -50%, 0) scale3d(0.8, 0.8, 1); + } + + p i:empty { + transform: translate3d(0, 0, 0); + opacity: 1; + } + } + } + + &.effect-winston { + background: #162633; + text-align: left; + + img { + transition: opacity 0.45s; + backface-visibility: hidden; + } + + figcaption::before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: url(../../../images/hover-effect/triangle.svg) no-repeat center center; + background-size: 100% 100%; + content: ''; + transition: + opacity 0.45s, + transform 0.45s; + transform: rotate3d(0, 0, 1, 45deg); + transform-origin: 0 100%; + } + + h2 { + transition: transform 0.35s; + transform: translate3d(0, 20px, 0); + } + + p { + position: absolute; + right: 0; + bottom: 0; + padding: 0 1.5em 7% 0; + } + + a { + margin: 0 10px; + color: #5d504f; + font-size: 170%; + + &:focus, + &:hover { + color: #cc6055; + } + } + + p a i { + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(0, 50px, 0); + } + + &:hover { + img { + opacity: 0.6; + } + + h2 { + transform: translate3d(0, 0, 0); + } + + figcaption::before { + opacity: 0.7; + transform: rotate3d(0, 0, 1, 20deg); + } + + p { + i { + opacity: 1; + transform: translate3d(0, 0, 0); + } + + a { + &:nth-child(3) i { + transition-delay: 0.05s; + } + + &:nth-child(2) i { + transition-delay: 0.1s; + } + + &:first-child i { + transition-delay: 0.15s; + } + } + } + } + } + + &.effect-selena { + background: #000; + + img { + opacity: 0.95; + transition: transform 0.35s; + transform-origin: 50% 50%; + } + + &:hover img { + transform: scale3d(0.95, 0.95, 1); + } + + h2 { + transition: transform 0.35s; + transform: translate3d(0, 20px, 0); + } + + p { + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: perspective(1000px) rotate3d(1, 0, 0, 90deg); + transform-origin: 50% 0; + } + + &:hover { + h2 { + transform: translate3d(0, 0, 0); + } + + p { + opacity: 1; + transform: perspective(1000px) rotate3d(1, 0, 0, 0); + } + } + } + + &.effect-terry { + background: #34495e; + + figcaption { + padding: 1em; + + &::after, + &::before { + position: absolute; + width: 200%; + height: 200%; + border-style: solid; + border-color: #101010; + content: ''; + transition: transform 0.35s; + } + + &::before { + right: 0; + bottom: 0; + border-width: 0 70px 60px 0; + transform: translate3d(70px, 60px, 0); + } + + &::after { + top: 0; + left: 0; + border-width: 15px 0 0 15px; + transform: translate3d(-15px, -15px, 0); + } + } + + img, + p a { + transition: + opacity 0.35s, + transform 0.35s; + } + + img { + opacity: 0.85; + } + + h2 { + position: absolute; + bottom: 0; + left: 0; + padding: 0.4em 10px; + width: 50%; + transition: transform 0.35s; + transform: translate3d(100%, 0, 0); + } + + p { + float: right; + clear: both; + text-align: left; + text-transform: none; + font-size: 111%; + + a { + display: block; + margin-bottom: 1em; + color: #fff; + opacity: 0; + transform: translate3d(90px, 0, 0); + + &:focus, + &:hover { + color: #f3cf3f; + } + } + } + + &:hover { + figcaption { + &::after, + &::before { + transform: translate3d(0, 0, 0); + } + } + + img { + opacity: 0.6; + } + + h2 { + transform: translate3d(0, 0, 0); + } + + p a { + transform: translate3d(0, 0, 0); + opacity: 1; + + &:first-child { + transition-delay: 0.025s; + } + + &:nth-child(2) { + transition-delay: 0.05s; + } + + &:nth-child(3) { + transition-delay: 0.075s; + } + + &:nth-child(4) { + transition-delay: 0.1s; + } + } + } + } + + &.effect-phoebe { + background: #675983; + + img { + opacity: 0.85; + transition: opacity 0.35s; + } + + &:hover img { + opacity: 0.6; + } + + figcaption::before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: url('../../../images/hover-effect/triangle2.svg') no-repeat center center; + background-size: 100% 112%; + content: ''; + transition: + opacity 0.35s, + transform 0.35s; + transform: scale3d(5, 2.5, 1); + transform-origin: 50% 50%; + } + + &:hover figcaption::before { + opacity: 0.6; + transform: scale3d(1, 1, 1); + } + + h2 { + margin-top: 1em; + transition: transform 0.35s; + transform: translate3d(0, 40px, 0); + } + + &:hover h2 { + transform: translate3d(0, 0, 0); + } + + p a { + color: #fff; + font-size: 140%; + opacity: 0; + position: relative; + display: inline-block; + transition: + opacity 0.35s, + transform 0.35s; + + &:first-child { + transform: translate3d(-60px, -60px, 0); + } + + &:nth-child(2) { + transform: translate3d(0, 60px, 0); + } + + &:nth-child(3) { + transform: translate3d(60px, -60px, 0); + } + } + + &:hover p a { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } + + &.effect-apollo { + background: #3498db; + + img { + opacity: 0.95; + transition: + opacity 0.35s, + transform 0.35s; + transform: scale3d(1.05, 1.05, 1); + } + + figcaption::before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); + content: ''; + transition: transform 0.6s; + transform: scale3d(1.9, 1.4, 1) rotate3d(0, 0, 1, 45deg) translate3d(0, -100%, 0); + } + + p { + position: absolute; + right: 0; + bottom: 0; + margin: 3em; + padding: 0 1em; + max-width: 150px; + border-right: 4px solid #fff; + text-align: right; + opacity: 0; + transition: opacity 0.35s; + } + + h2 { + text-align: left; + } + + &:hover { + img { + opacity: 0.6; + transform: scale3d(1, 1, 1); + } + + figcaption::before { + transform: scale3d(1.9, 1.4, 1) rotate3d(0, 0, 1, 45deg) translate3d(0, 100%, 0); + } + + p { + opacity: 1; + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; + } + } + } + + &.effect-kira { + background: #fff; + text-align: left; + + img { + transition: opacity 0.35s; + } + + figcaption { + z-index: 1; + } + + p { + padding: 2.25em 0.5em; + font-weight: 600; + font-size: 100%; + line-height: 1.5; + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(0, -10px, 0); + + a { + margin: 0 0.5em; + color: #101010; + + &:focus, + &:hover { + opacity: 0.6; + } + } + } + + figcaption::before { + position: absolute; + top: 14px; + right: 2em; + left: 2em; + z-index: -1; + height: 4.1em; + background: #fff; + content: ''; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(0, 4em, 0) scale3d(1, 0.023, 1); + transform-origin: 50% 0; + } + + &:hover { + img { + opacity: 0.5; + } + + p { + opacity: 1; + transform: translate3d(0, 0, 0); + } + + figcaption::before { + opacity: 0.7; + transform: translate3d(0, 5em, 0) scale3d(1, 1, 1); + } + } + } + + &.effect-steve { + z-index: auto; + overflow: visible; + background: #000; + + &:before, + h2:before { + position: absolute; + top: 0; + left: 0; + z-index: -1; + width: 100%; + height: 100%; + background: #000; + content: ''; + transition: opacity 0.35s; + } + + &:before { + box-shadow: 0 3px 30px rgba(0, 0, 0, 0.8); + opacity: 0; + } + + figcaption { + z-index: 1; + } + + img { + opacity: 1; + transition: transform 0.35s; + transform: perspective(1000px) translate3d(0, 0, 0); + } + + h2, + p { + background: #fff; + color: #2d434e; + } + + h2 { + position: relative; + margin-top: 2em; + padding: 0.25em; + + &:before { + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.5); + } + } + + p { + margin-top: 1em; + padding: 0.5em; + font-weight: 800; + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: scale3d(0.9, 0.9, 1); + } + + &:hover { + &:before { + opacity: 1; + } + + img { + transform: perspective(1000px) translate3d(0, 0, 21px); + } + + h2:before { + opacity: 0; + } + + p { + opacity: 1; + transform: scale3d(1, 1, 1); + } + } + } + + &.effect-moses { + background: linear-gradient(-45deg, #ec65b7 0%, #05e0d8 100%); + + img { + opacity: 0.85; + transition: opacity 0.35s; + } + + h2, + p { + padding: 20px; + width: 50%; + height: 50%; + border: 2px solid #fff; + } + + h2 { + padding: 20px; + width: 50%; + height: 50%; + text-align: left; + transition: transform 0.35s; + transform: translate3d(10px, 10px, 0); + } + + p { + float: right; + padding: 20px; + text-align: right; + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(-50%, -50%, 0); + } + + &:hover { + h2 { + transform: translate3d(0, 0, 0); + } + + p { + opacity: 1; + transform: translate3d(0, 0, 0); + } + + img { + opacity: 0.6; + } + } + } + + &.effect-jazz { + background: linear-gradient(-45deg, #f3cf3f 0%, #f33f58 100%); + + img { + opacity: 0.9; + } + + figcaption::after, + img, + p { + transition: + opacity 0.35s, + transform 0.35s; + } + + figcaption::after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-top: 1px solid #fff; + border-bottom: 1px solid #fff; + content: ''; + opacity: 0; + transform: rotate3d(0, 0, 1, 45deg) scale3d(1, 0, 1); + transform-origin: 50% 50%; + } + + h2, + p { + opacity: 1; + transform: scale3d(0.8, 0.8, 1); + } + + h2 { + padding-top: 26%; + transition: transform 0.35s; + } + + p { + padding: 0.5em 2em; + text-transform: none; + font-size: 0.85em; + opacity: 0; + } + + &:hover { + img { + opacity: 0.7; + transform: scale3d(1.05, 1.05, 1); + } + + figcaption::after { + opacity: 1; + transform: rotate3d(0, 0, 1, 45deg) scale3d(1, 1, 1); + } + + h2, + p { + opacity: 1; + transform: scale3d(1, 1, 1); + } + } + } + + &.effect-ming { + background: #030c17; + + img { + opacity: 0.9; + transition: opacity 0.35s; + } + + figcaption::before { + position: absolute; + top: 30px; + right: 30px; + bottom: 30px; + left: 30px; + border: 2px solid #fff; + box-shadow: 0 0 0 30px rgba(255, 255, 255, 0.2); + content: ''; + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: scale3d(1.4, 1.4, 1); + } + + h2 { + margin: 20% 0 10px; + transition: transform 0.35s; + } + + p { + padding: 1em; + opacity: 0; + transition: + opacity 0.35s, + transform 0.35s; + transform: scale(1.5); + } + + &:hover { + h2 { + transform: scale(0.9); + } + + figcaption::before, + p { + opacity: 1; + transform: scale3d(1, 1, 1); + } + + figcaption { + background-color: rgba(58, 52, 42, 0); + } + + img { + opacity: 0.4; + } + } + } + + &.effect-lexi { + background: linear-gradient(-45deg, #000 0%, #fff 100%); + + img { + margin: -10px 0 0 -10px; + max-width: none; + width: calc(100% + 10px); + opacity: 0.9; + transition: + opacity 0.35s, + transform 0.35s; + transform: translate3d(10px, 10px, 0); + backface-visibility: hidden; + } + + figcaption::before, + p { + transition: + opacity 0.35s, + transform 0.35s; + } + + figcaption::before { + position: absolute; + right: -100px; + bottom: -100px; + width: 300px; + height: 300px; + border: 2px solid #fff; + border-radius: 50%; + box-shadow: 0 0 0 900px rgba(255, 255, 255, 0.2); + content: ''; + opacity: 0; + transform: scale3d(0.5, 0.5, 1); + transform-origin: 50% 50%; + } + + &:hover img { + opacity: 0.6; + transform: translate3d(0, 0, 0); + } + + h2 { + text-align: left; + transition: transform 0.35s; + transform: translate3d(5px, 5px, 0); + } + + p { + position: absolute; + right: 0; + bottom: 0; + padding: 0 1.5em 1.5em 0; + width: 140px; + text-align: right; + opacity: 0; + transform: translate3d(20px, 20px, 0); + } + + &:hover { + figcaption::before { + opacity: 1; + transform: scale3d(1, 1, 1); + } + + h2, + p { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } + } + + &.effect-duke { + background: linear-gradient(-45deg, #34495e 0%, #cc6055 100%); + + img, + p { + transition: + opacity 0.35s, + transform 0.35s; + } + + &:hover img { + opacity: 0.1; + transform: scale3d(2, 2, 1); + } + + h2 { + transition: transform 0.35s; + transform: scale3d(0.8, 0.8, 1); + transform-origin: 50% 100%; + } + + p { + position: absolute; + bottom: 0; + left: 0; + margin: 20px; + padding: 30px; + border: 2px solid #fff; + text-transform: none; + font-size: 90%; + opacity: 0; + transform: scale3d(0.8, 0.8, 1); + transform-origin: 50% -100%; + } + + &:hover { + h2, + p { + opacity: 1; + transform: scale3d(1, 1, 1); + } + } + } +} +/* Media queries */ +@media screen and (max-width: 920px) { + figure.effect-terry h2 { + padding: 0.75em 10px; + font-size: 120%; + } +} +@media screen and (max-width: 50em) { + .content { + padding: 0 10px; + text-align: center; + } + + .grid figure { + display: inline-block; + float: none; + margin: 10px auto; + width: 100%; + } +} +@media screen and (max-width: 480px) { + .grid { + figure { + min-width: auto; + h2 { + font-size: 30px; + } + } + } +} diff --git a/src/styles/partials/popup.scss b/src/styles/partials/popup.scss new file mode 100644 index 0000000..01ebed0 --- /dev/null +++ b/src/styles/partials/popup.scss @@ -0,0 +1,69 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;500&display=swap'); + +//공통 +.black_bg { + display: none; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: #0000007d; + z-index: 99; + font-family: 'Poppins'; + .Popup_box { + display: none; + width: 500px; + background: #fff; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + border-radius: 10px; + } + .content { + padding: 50px; + font-size: 17px; + line-height: 1.76; + color: #505050; + box-sizing: border-box; + clear: both; + } + .close_btn { + height: 33px; + font-size: 13px; + min-width: 101px; + background: #fec702; + color: #fff; + border: none; + border-radius: 20px; + float: right; + } + + .close_btn:focus { + outline: none; + } + + .close_btn:hover { + background: #dfaf02; + color: #ececec; + } + .clear { + clear: both; + } +} +//Signin + +//PopupInfouser + +// 반응형_공통 +@media (max-width: 579px) { + .black_bg { + .Popup_box { + width: 90%; + } + } +} +//반응형_ Signin + +//반응형_ PopupInfouser diff --git a/src/styles/partials/theme-elements/_alert.scss b/src/styles/partials/theme-elements/_alert.scss new file mode 100644 index 0000000..fa58133 --- /dev/null +++ b/src/styles/partials/theme-elements/_alert.scss @@ -0,0 +1,40 @@ +@import '../mixins/alert'; /** ===================== + Alert css start +========================== **/ + +/* Base styles */ + +.alert { + position: relative; + padding: 15px 20px; + border-radius: 0; +} +/* Provide class for links that match alerts */ + +.alert-link { + font-weight: 600; + transition: all 0.3s ease-in-out; + &:hover { + text-decoration: underline; + } +} + +.alert-dismissible { + padding-right: 40px; + .close { + padding: 14px 10px; + } +} +/* Alternate styles + Generate contextual modifier classes for colorizing the alert. */ + +@each $color, $value in $theme-colors { + .alert-#{$color} { + @include alert-variant-pc( + theme-color-level($color, $alert-bg-level), + theme-color-level($color, $alert-border-level), + theme-color-level($color, $alert-color-level) + ); + } +} +/**====== Alert css end ======**/ diff --git a/src/styles/partials/theme-elements/_authentication.scss b/src/styles/partials/theme-elements/_authentication.scss new file mode 100644 index 0000000..f660985 --- /dev/null +++ b/src/styles/partials/theme-elements/_authentication.scss @@ -0,0 +1,282 @@ +/** ===================== + Authentication css start +========================== **/ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;500&display=swap'); + +.auth-wrapper { + position: relative; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + min-width: 100%; + min-height: 100vh; + background: #fff; + a, + p > a { + color: $theme-heading-color; + font-weight: 600; + } + .btn-auth-gen { + .btn-icon { + width: 140px; + height: 140px; + display: flex; + align-items: center; + justify-content: center; + font-size: 45px; + + small { + font-size: 15px; + } + } + } + .input-group { + background: transparent; + } + .card { + margin-bottom: 0; + } + + > div { + z-index: 5; + } + + .auth-content { + position: relative; + width: 390px; + padding: 15px; + z-index: 5; + font-family: 'Poppins'; + &.multyform, + &.subscribe { + width: 750px; + } + .card { + box-shadow: none; + } + .login_form { + margin-top: 61px; + } + .input-group { + display: flex; + align-items: center; + padding: 2px 20px 2px 55px; + border-radius: 24px; + border: 0; + background-color: #f8f8f8; + } + .input-group i svg { + width: 24px; + height: 24px; + position: absolute; + z-index: 2; + top: 50%; + left: 15px; + transform: translateY(-50%); + color: #6c757d52; + } + .input-group input { + height: 48px; + border: none; + font-family: 'Poppins'; + background-color: #f8f8f8; + } + + .input-group input::placeholder { + color: #6c757d52; + } + .input-group input:focus { + outline: none !important; + outline-width: 0 !important; + box-shadow: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + } + .form-group { + display: flex; + justify-content: center; + } + + .checkbox label { + font-size: 14px; + color: #333; + } + + .checkbox.checkbox-fill input[type='checkbox'] + .cr:before { + display: none; + } + + .checkbox.checkbox-fill input[type='checkbox'] + .cr:after { + display: none; + } + + .checkbox.checkbox-fill input[type='checkbox']:checked + .cr:before { + background: #ffc11a; + border: none; + top: 0; + left: 0; + content: ''; + font-size: 13px; + } + + .form-check-label + label { + background-image: url(../../images/btn-check-box-default.svg); + background-position: left; + background-size: contain; + padding-left: 23px !important; + background-repeat: no-repeat; + display: inline-block; + } + + .form-check-label:checked + label { + background-image: url(../../images/btn-check-box-active.svg); + background-position: left; + background-size: contain; + padding-left: 23px !important; + background-repeat: no-repeat; + display: inline-block; + } + + button { + width: 100%; + background: #ffc11a !important; + border: 1px solid #ffc11a !important; + -webkit-background-clip: text; + box-shadow: none; + border-radius: 50rem; + margin-top: 30px; + font-size: 16px; + font-weight: 500; + letter-spacing: -0.8px; + } + } + @media only screen and (max-width: 768px) { + max-width: 360px; + } + @media only screen and (max-width: 575px) { + .card { + .card-body { + padding: 30px 15px; + } + } + } + + .auth-icon { + font-size: 30px; + &:before { + background: $theme-color; + background-clip: inherit; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + } + + &.offline { + background-image: none; + + &:before { + display: none; + } + } + + .auth-bg { + .r { + position: absolute; + width: 300px; + height: 300px; + border-radius: 50%; + + &:first-child { + top: -100px; + right: -100px; + background: $theme-color; + } + + &:last-child { + left: -100px; + bottom: -100px; + background: $theme-color2; + } + + &.s { + width: 20px; + height: 20px; + &:nth-child(2) { + top: 150px; + right: -150px; + background: $primary-color; + } + + &:nth-child(3) { + left: -150px; + bottom: 150px; + background: $success-color; + } + } + + &:nth-child(odd) { + animation: floating 7s infinite; + } + + &:nth-child(even) { + animation: floating 9s infinite; + } + } + } +} +/* image variant start */ +.aut-bg-img { + background-size: cover; + /*background-image: url('../../../images/bg-images/bg4.jpg');*/ // amit images + background-repeat: no-repeat; + background-position: center; +} +.aut-bg-img-side { + p { + line-height: 2; + } +} +.aut-bg-img, +.aut-bg-img-side { + .custom-select, + .form-control { + background: transparent; + } +} +.auth-tabs { + .card { + // border-right: 10px; + } + .nav-pills { + // margin-top: -80px; + } + .tab-content { + overflow: hidden; + position: relative; + .tab-pane > * { + position: relative; + z-index: 5; + } + .auth-icon { + position: absolute; + bottom: 0; + right: 0; + font-size: 180px; + transform: rotate(-30deg); + z-index: 1; + opacity: 0.2; + } + } +} +/* image varient start */ +@keyframes floating { + from { + transform: rotate(0deg) translate(-10px) rotate(0deg); + } + + to { + transform: rotate(360deg) translate(-10px) rotate(-360deg); + } +} +/**====== Authentication css end ======**/ diff --git a/src/styles/partials/theme-elements/_breadcrumb-pagination.scss b/src/styles/partials/theme-elements/_breadcrumb-pagination.scss new file mode 100644 index 0000000..89db2f3 --- /dev/null +++ b/src/styles/partials/theme-elements/_breadcrumb-pagination.scss @@ -0,0 +1,33 @@ +/** ===================== + Breadcrumbs & Pagination css start +========================== **/ +/* Breadcrumbs */ + +.breadcrumb { + background-color: $theme-background; + border-radius: 0; +} + +.breadcrumb-item { + + .breadcrumb-item { + color: $primary-color; + &::before { + /* content: $breadcrumb-divider; */ + } + } + + &.active { + color: $theme-heading-color; + } +} + +/* pagination */ + +.page-item { + &.active .page-link { + color: #fff; + background-color: $primary-color; + border-color: $primary-color; + } +} +/**====== Breadcrumbs & Pagination css end ======**/ diff --git a/src/styles/partials/theme-elements/_button.scss b/src/styles/partials/theme-elements/_button.scss new file mode 100644 index 0000000..0791975 --- /dev/null +++ b/src/styles/partials/theme-elements/_button.scss @@ -0,0 +1,236 @@ +@import '../mixins/buttons'; +/** ===================== + Button css start +========================== **/ +.btn-theme, +a.btn-theme { + background: $theme-color; + color: #fff; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2); + border-color: #1de1c2; + border-radius: 0.25rem; + padding: 11px 25px; + + &:active, + &:focus, + &:not(:disabled):not(.disabled):active { + background-image: $theme-color; + color: #fff; + box-shadow: none; + } + + &.active { + background-image: #fff !important; + color: $default-color; + border: 1px solid $theme-border; + box-shadow: none; + } +} + +.btn-outline-theme { + background-image: #fff !important; + color: $default-color; + border: 1px solid $theme-border; + box-shadow: none; + + &:active, + &:focus, + &:not(:disabled):not(.disabled):active { + background-image: #fff; + color: $default-color; + border: 1px solid $theme-border; + } + + &.active { + background: $theme-color !important; + color: #fff; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2); + border: 1px solid transparent; + } +} + +.btn-theme2 { + background: $theme-color2; + color: #fff; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2); + border: 1px solid transparent; + border-radius: 10px; + padding: 14px 25px; + + &:active, + &:focus, + &:not(:disabled):not(.disabled):active { + background-image: $theme-color2; + color: #fff; + box-shadow: none; + } + + &.active { + background-image: #fff !important; + color: $default-color; + border: 1px solid $theme-border; + box-shadow: none; + } +} + +.btn-outline-theme2 { + background-image: #fff !important; + color: $default-color; + border: 1px solid $theme-border; + box-shadow: none; + + &:active, + &:focus, + &:not(:disabled):not(.disabled):active { + background-image: #fff; + color: $default-color; + border: 1px solid $theme-border; + } + + &.active { + background: $theme-color2 !important; + color: #fff; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.2); + border: 1px solid transparent; + } +} + +.btn { + padding: 10px 20px; + border-radius: 0.25rem; + font-size: 14px; + margin-bottom: 5px; + margin-right: 10px; + transition: all 0.3s ease-in-out; + + > i { + margin-right: 12px; + } + + &.btn-icon, + &.drp-icon { + width: 45px; + height: 45px; + padding: 10px 12px; + + > i { + margin-right: 0; + } + } + + &.drp-icon { + &.dropdown-toggle:after { + display: none; + } + + + .dropdown-menu { + margin-left: -10px; + } + } + + &:active, + &:focus { + box-shadow: none; + } + + &-square { + border-radius: 0; + } + + &.disabled { + cursor: not-allowed; + opacity: 0.55; + } + + &-rounded { + border-radius: 30px; + } +} + +.btn-group { + .btn { + margin-bottom: 0; + margin-right: 0; + } +} + +.btn-group-sm > .btn, +.btn-sm { + padding: 6px 14px; + font-size: 13px; +} + +.btn-group-lg > .btn, +.btn-lg { + padding: 13px 23px; + font-size: 16px; +} + +.shadow-1 { + box-shadow: 0 7px 12px 0 rgba(62, 57, 107, 0.16); +} + +.shadow-2 { + box-shadow: 0 10px 18px 0 rgba(62, 57, 107, 0.2); +} + +.shadow-3 { + box-shadow: 0 14px 24px 0 rgba(62, 57, 107, 0.26); +} + +.shadow-4 { + box-shadow: 0 16px 28px 0 rgba(62, 57, 107, 0.3); +} + +.shadow-5 { + box-shadow: 0 20px 24px 0 rgba(62, 57, 107, 0.36); +} +/* Alternate buttons */ +@each $color, $value in $theme-colors { + .btn-#{$color} { + @include button-variant-pc($value, $value); + } +} +/* outline buttons */ +@each $color, $value in $theme-colors { + .btn-outline-#{$color} { + @include button-outline-variant-pc($value); + } +} +/* glow buttons */ +@each $color, $value in $theme-colors { + .btn-glow-#{$color} { + @include button-glow-variant-pc($value); + } +} +/**====== Button css end ======**/ + +.drp-icon { + .btn { + width: 45px; + height: 45px; + padding: 10px 12px; + + > i { + margin-right: 0; + } + &.dropdown-toggle:after { + display: none; + } + } + + + .dropdown-menu { + margin-left: -10px; + } + &.btn-rounded { + .btn { + &.dropdown-toggle { + border-radius: 30px; + } + } + } +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer; +} diff --git a/src/styles/partials/theme-elements/_data-tables.scss b/src/styles/partials/theme-elements/_data-tables.scss new file mode 100644 index 0000000..3292811 --- /dev/null +++ b/src/styles/partials/theme-elements/_data-tables.scss @@ -0,0 +1,162 @@ +/** ===================== + Data Tables css start +========================== **/ +.table { + color: #888; + td, + th { + border-top: 1px solid $theme-border; + white-space: nowrap; + padding: 1.05rem 0.75rem; + } + + thead th { + border-bottom: 1px solid $theme-border; + } + + tbody + tbody { + border-top: 2px solid $theme-border; + } + + &.table-sm { + th, + td { + padding: 0.35rem; + } + } +} +/* Border versions */ + +.table-bordered { + border: 1px solid $theme-border; + + td, + th { + border: 1px solid $theme-border; + } +} +/* Zebra-striping */ + +.table-striped { + tbody tr:nth-of-type(2n + 1) { + background-color: transparentize($primary-color, 0.95); + } +} +/* Hover effect */ + +.table-hover { + tbody tr { + &:hover { + background-color: transparentize($primary-color, 0.95); + } + } +} +/* Table backgrounds */ + +.table { + .thead-dark { + th { + color: #fff; + background-color: $dark-color; + border-color: darken($dark-color, 10%); + } + } +} + +.table-dark { + color: #fff; + background-color: $dark-color; + + td, + th, + thead th { + border-color: darken($dark-color, 10%); + } + + &.table-striped { + tbody tr:nth-of-type(odd) { + background-color: darken($dark-color, 2%); + } + } + + &.table-hover { + tbody tr { + &:hover { + background-color: darken($dark-color, 5%); + } + } + } +} +/* fixed header position */ + +table.dataTable.fixedHeader-floating { + top: 0 !important; + @media screen and (max-width: 992px) { + display: none !important; + } +} + +@media screen and (max-width: 992px) { + .fixedHeader-locked { + display: none !important; + } +} + +/** ===================== + Foo-table css start +========================== **/ + +.footable .pagination > { + .active > { + a, + span { + background-color: $primary-color; + border-color: $primary-color; + + &:focus, + &:hover { + background-color: $primary-color; + border-color: $primary-color; + } + } + } + + li > { + a, + span { + color: #222; + } + } +} + +.footable-details.table, +.footable.table { + margin-bottom: 0; +} + +table { + &.footable > tfoot > tr.footable-paging > td > span.label { + margin-bottom: 0; + } + + &.footable-paging-center > tfoot > tr.footable-paging > td { + padding-bottom: 0; + } +} + +.table-columned > { + tbody > { + tr > { + td { + border: 0; + border-left: 1px solid $theme-border; + } + + th { + border: 0; + } + } + } +} +/**====== Foo-table css end ======**/ +/**====== Data Tables css end ======**/ diff --git a/src/styles/partials/theme-elements/_form.scss b/src/styles/partials/theme-elements/_form.scss new file mode 100644 index 0000000..afce61a --- /dev/null +++ b/src/styles/partials/theme-elements/_form.scss @@ -0,0 +1,143 @@ +/** ===================== + Form Componant css start +========================== **/ + +// .custom-select, +// .form-control { +// background: $theme-background; +// padding: 10px 20px; +// font-size: 14px; +// height: auto; + +// &.form-control-lg { +// font-size: 1.25rem; +// } + +// &.form-control-sm { +// height: calc(1.8125rem + 2px); +// font-size: .875rem; +// } + +// &.form-control-range { +// box-shadow: none; +// } + +// &:focus { +// background: $theme-background; +// } + +// &::-moz-placeholder { +// color: #aaaeb3; +// opacity: 1; +// } + +// &:-ms-input-placeholder { +// color: #aaaeb3; +// } + +// &::-webkit-input-placeholder { +// color: #aaaeb3; +// } +// } +// /* input group start */ + +// // .input-group { +// // background: $theme-background; + +// // .input-group-text { +// // padding-left: 15px; +// // padding-right: 15px; +// // background: transparent; +// // i { +// // font-size: 20px; +// // } +// // } + +// // .custom-file-label { +// // margin-bottom: 0; +// // } + +// // .btn { +// // margin-bottom: 0; +// // margin-right: 0; +// // } +// // } + +// .cust-file-button { +// .custom-file-label { +// height: calc(2.25rem + 8px); +// line-height: 2.5; + +// &::after { +// padding: 0.775rem 0.75rem; +// height: 2.65rem; +// } +// } +// } + +// .custom-select{ +// height: calc(2.25rem + 9px); +// } +// /* input group End */ +// /**====== Form Componant css end ======**/ +// select.form-control:not([size]):not([multiple]) { +// height: calc(2.55rem + 2px); +// } +// .input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]), +// .input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), +// .input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), +// .input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), +// .input-group-lg > select.form-control:not([size]):not([multiple]), +// select.form-control-lg:not([size]):not([multiple]) { +// height: calc(3.375rem + 2px); +// } + +// .minicolors { +// .form-control { +// padding: 6px 12px 5px 44px; +// } +// } +// /* form-select */ + +// .select2-container { +// width: 100% !important; +// } +// .tt-menu { +// position: absolute; +// top: 100%; +// left: 0; +// z-index: 1000; +// display: none; +// float: left; +// min-width: 160px; +// padding: 5px 0; +// margin: 2px 0 0; +// list-style: none; +// font-size: 14px; +// background-color: #ffffff; +// border: 1px solid #cccccc; +// border-radius: 4px; +// box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); +// background-clip: padding-box; +// cursor: pointer; +// } +// .bootstrap-tagsinput { +// width: 100%; +// } +// .custom-file-label{ +// height: auto; +// &:after{ +// height: auto; +// padding: 0.550rem 0.75rem; +// } +// } +// .form-control.is-invalid, .was-validated .form-control:invalid, +// .was-validated .form-control:valid, .form-control.is-valid { +// background-position: calc(100% - 10px) calc(.375em + 0.4875rem); +// } + +// .was-validated .form-control:invalid~.invalid-feedback { +// background: #fff; +// margin-top: 0; +// padding-top: 0.25em; +// } diff --git a/src/styles/partials/theme-elements/_labels-badges.scss b/src/styles/partials/theme-elements/_labels-badges.scss new file mode 100644 index 0000000..8a9372a --- /dev/null +++ b/src/styles/partials/theme-elements/_labels-badges.scss @@ -0,0 +1,20 @@ +/** ===================== + Label & Badges css start +========================== **/ + +.label { + padding: 4px 10px; + min-height: auto; + position: relative; + margin-right: 5px; + margin-bottom: 5px; + @each $value in $color-bt-name { + $i: index($color-bt-name, $value); + + &.label-#{$value} { + background: nth($color-bt-color, $i); + color: #ffffff; + } + } +} +/**====== Label & Badges css end ======**/ diff --git a/src/styles/partials/theme-elements/_modal.scss b/src/styles/partials/theme-elements/_modal.scss new file mode 100644 index 0000000..916ab9a --- /dev/null +++ b/src/styles/partials/theme-elements/_modal.scss @@ -0,0 +1,9 @@ +@media screen and (max-width: 480px) { + .modal-footer { + justify-content: center; + } +} + +.tooltip { + z-index: 1073; +} diff --git a/src/styles/partials/theme-elements/_nav.scss b/src/styles/partials/theme-elements/_nav.scss new file mode 100644 index 0000000..2fc0a09 --- /dev/null +++ b/src/styles/partials/theme-elements/_nav.scss @@ -0,0 +1,95 @@ +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 10px 24px; + + &:hover { + text-decoration: none; + } + + &.disabled { + opacity: 0.7; + } +} + +/* ======================== Tabs =============================== */ + +.nav-tabs { + border-bottom: none; + .nav-link { + border: none; + color: $theme-font-color; + &:hover { + color: $primary-color; + } + + &.disabled { + opacity: 0.7; + } + } + + .nav-item.show .nav-link, + .nav-link.active { + border: none; + color: $theme-heading-color; + box-shadow: 0 -5px 10px 0 rgba(0, 0, 0, 0.05); + } +} +/* ======================= Pills ================== */ + +.nav-pills { + padding: 15px; + background-color: #fff; + box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05); + .nav-link { + border-radius: 5px; + } + + .nav-link.active, + .show > .nav-link { + color: #fff; + background: $primary-color; + box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.2); + } +} + +/* ==================== Justified variants ===================*/ + +.nav-fill { + .nav-item { + flex: 1 1 auto; + text-align: center; + } +} + +.nav-justified { + .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; + } +} +/* Tabbable tabs */ + +/* Hide tabbable panes to start, show them when `.active` */ + +.tab-content { + padding: 35px 30px; + background: #fff; + box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.05); + + > .tab-pane { + display: none; + } + + > .active { + display: block; + } +} diff --git a/src/styles/partials/theme-elements/_popover.scss b/src/styles/partials/theme-elements/_popover.scss new file mode 100644 index 0000000..4fffe48 --- /dev/null +++ b/src/styles/partials/theme-elements/_popover.scss @@ -0,0 +1,96 @@ +/** ===================== + tooltip css start +========================== **/ +.popover { + top: 0; + left: 0; + border: none; + box-shadow: 0 0 15px #dcdcdc; + border-radius: 15px; + + .arrow { + &::after { + display: none; + } + + &::before { + content: '\6d'; + top: -1px; + left: 0; + font-family: 'pct'; + font-size: 20px; + line-height: 0.3; + color: #fff; + border: none; + text-shadow: 0 2px 3px rgba(220, 220, 220, 0.7); + } + } + + .popover-header { + border-top-left-radius: inherit; + border-top-right-radius: inherit; + background: transparent; + border-bottom-color: $theme-background; + } +} + +.bs-popover-top { + .arrow { + &::before { + content: '\6d'; + text-shadow: 0 2px 3px rgba(220, 220, 220, 0.7); + } + } +} + +.bs-popover-right { + .arrow::before { + content: '\6a'; + left: -4px; + top: 2.6px; + border: none; + text-shadow: -2px 0 3px rgba(220, 220, 220, 0.46); + } +} + +.bs-popover-bottom { + .arrow:before { + content: '\6c'; + top: 3px; + border: none; + text-shadow: 0 -2px 3px rgba(220, 220, 220, 0.46); + } + + .popover-header::before { + } +} + +.bs-popover-left { + .arrow::before { + content: '\6b'; + left: -8px; + top: 3.6px; + border: none; + text-shadow: 2px 0 3px rgba(220, 220, 220, 0.46); + } +} + +.bs-popover-auto { + &[x-placement^='top'] { + @extend .bs-popover-top; + } + + &[x-placement^='right'] { + @extend .bs-popover-right; + } + + &[x-placement^='bottom'] { + @extend .bs-popover-bottom; + } + + &[x-placement^='left'] { + @extend .bs-popover-left; + } +} + +/**====== tooltip css end ======**/ diff --git a/src/styles/partials/theme-elements/_progress.scss b/src/styles/partials/theme-elements/_progress.scss new file mode 100644 index 0000000..e18fd27 --- /dev/null +++ b/src/styles/partials/theme-elements/_progress.scss @@ -0,0 +1,39 @@ +/** ===================== + Progress css start +========================== **/ +@keyframes progress-bar-stripes { + from { + background-position: 16px 0; + } + + to { + background-position: 0 0; + } +} + +.progress { + height: 12px; + font-size: 10px; + background-color: $theme-background; + border-radius: 0; + overflow: visible; +} + +.progress-bar { + background-color: $primary-color; + box-shadow: 0 10px 20px 0 rgba(0, 0, 0, 0.3); + @each $value in $color-name { + $i: index($color-name, $value); + + &.progress-#{$value} { + background: nth($color-color, $i); + } + } + &.progress-c-theme { + background: $theme-color; + } + &.progress-c-theme2 { + background: $theme-color2; + } +} +/**====== Progress css end ======**/ diff --git a/src/styles/partials/theme-elements/_radiobox-checkbox.scss b/src/styles/partials/theme-elements/_radiobox-checkbox.scss new file mode 100644 index 0000000..0a896e9 --- /dev/null +++ b/src/styles/partials/theme-elements/_radiobox-checkbox.scss @@ -0,0 +1,269 @@ +/** ===================== + Radio & Checked css start +========================== **/ +.checkbox { + padding: 10px 0; + min-height: auto; + position: relative; + margin-right: 5px; + + input[type='checkbox'] { + margin: 0; + display: none; + width: 22px; + + + .form-check-label, + + .cr { + padding-left: 0; + + &:before { + content: '\e83f'; + width: 22px; + height: 22px; + display: inline-block; + margin-right: 10px; + border: 2px solid #e9eaec; + border-radius: 3px; + font: { + size: 15px; + family: 'feather'; + weight: 400; + } + line-height: 19px; + vertical-align: bottom; + text-align: center; + background: #ffffff; + color: transparent; + cursor: pointer; + transition: all 0.2s ease-in-out; + } + } + + &:checked + .form-check-label:before, + &:checked + .cr:before { + background: #1dd5d2; + border-color: #1dd5d2; + color: #ffffff; + } + + &.disabled + .form-check-label, + &:disabled + .form-check-label, + &.disabled + .cr, + &:disabled + .cr { + opacity: 0.5; + } + + &.disabled + .form-check-label:before, + &:disabled + .form-check-label:before, + &.disabled + .cr:before, + &:disabled + .cr:before { + cursor: not-allowed; + } + } + + &.checkbox-fill { + input[type='checkbox'] { + + .form-check-label, + + .cr { + &:after { + content: ''; + width: 22.5px; + height: 22.5px; + display: inline-block; + margin-right: 10px; + border: 2px solid #e9eaec; + border-radius: 2px; + vertical-align: bottom; + text-align: center; + background: transparent; + cursor: pointer; + transition: all 0.2s ease-in-out; + position: absolute; + top: 8.5px; + left: 3px; + } + + &:before { + opacity: 0; + content: '\e840'; + font-size: 27px; + background: transparent; + } + } + + &:checked { + + .form-check-label, + + .cr { + &:after { + opacity: 0; + } + + &:before { + opacity: 1; + background: transparent; + color: #1dd5d2; + border-color: transparent; + } + } + } + } + } + @each $value in $color-bt-name { + $i: index($color-bt-name, $value); + + &.checkbox-#{$value} input[type='checkbox']:checked + .form-check-label:before, + &.checkbox-#{$value} input[type='checkbox']:checked + .cr:before { + background: nth($color-bt-color, $i); + border-color: nth($color-bt-color, $i); + color: #ffffff; + } + + &.checkbox-fill.checkbox-#{$value} input[type='checkbox']:checked + .form-check-label:before, + &.checkbox-fill.checkbox-#{$value} input[type='checkbox']:checked + .cr:before { + background: transparent; + color: nth($color-bt-color, $i); + border-color: transparent; + } + } + + .form-check-label, + .cr { + cursor: pointer; + } +} + +.radio { + padding: 10px 0; + min-height: auto; + position: relative; + margin-right: 5px; + + input[type='radio'] { + margin: 0; + display: none; + width: 22px; + + + .form-check-label, + + .cr { + padding-left: 0; + + &:after, + &:before { + content: ''; + display: inline-block; + margin-right: 10px; + border-radius: 50%; + vertical-align: bottom; + background: #fff; + color: transparent; + cursor: pointer; + transition: all 0.2s ease-in-out; + } + + &:before { + width: 22px; + height: 22px; + border: 2px solid #e9eaec; + } + + &:after { + width: 12px; + height: 12px; + position: absolute; + top: 13px; + left: 5px; + } + } + + &:checked { + + .form-check-label, + + .cr { + &:before { + border-color: #1dd5d2; + } + + &:after { + background: $theme-color; + } + } + } + + &:disabled { + + .form-check-label, + + .cr { + opacity: 0.5; + cursor: not-allowed; + + &:after, + &:before { + cursor: not-allowed; + } + } + } + } + + &.radio-fill { + input[type='radio'] { + + .form-check-label, + + .cr { + &:after { + width: 18px; + height: 18px; + top: 10px; + left: 2px; + } + } + } + } + @each $value in $color-bt-name { + $i: index($color-bt-name, $value); + + &.radio-#{$value} input[type='radio']:checked + .form-check-label, + &.radio-#{$value} input[type='radio']:checked + .cr { + &:before { + border-color: nth($color-bt-color, $i); + } + + &:after { + background: nth($color-bt-color, $i); + } + } + } + + .form-check-label, + .cr { + cursor: pointer; + } +} +@-moz-document url-prefix() { + .radio input[type='radio'] + .form-check-label::after, + .radio input[type='radio'] + .cr::after { + top: 14px; + } +} + +.custom-controls-stacked { + .radio { + input[type='radio'] { + + .form-check-label, + + .cr { + &:after { + top: 15px; + } + } + } + } +} +/**====== Radio & Checked css end ======**/ + +.radio, +.checkbox { + .form-check { + padding-left: 0; + margin-bottom: 6px; + + input[type='radio'] + .form-check-label:after { + top: 5px; + } + } +} diff --git a/src/styles/partials/theme-elements/_tooltip.scss b/src/styles/partials/theme-elements/_tooltip.scss new file mode 100644 index 0000000..4aaa111 --- /dev/null +++ b/src/styles/partials/theme-elements/_tooltip.scss @@ -0,0 +1,71 @@ +/** ===================== + tooltip css start +========================== **/ +.tooltip { + &.show { + opacity: 1; + } + + .arrow { + position: absolute; + display: block; + + &::before { + content: '\6d'; + left: 0; + font-family: 'pct'; + font-size: 20px; + line-height: 0.3; + color: #000; + border: none; + text-shadow: 0 2px 3px rgba(220, 220, 220, 0.46); + } + } +} +.bs-tooltip-right { + .arrow { + &::before { + content: '\6a'; + left: -7px; + top: 2.6px; + border: none; + text-shadow: -2px 0 3px rgba(220, 220, 220, 0.46); + } + } + + .tooltip-inner { + border-radius: 15px 20px 20px 15px; + } +} + +.bs-tooltip-bottom { + .arrow { + &::before { + content: '\6c'; + border: none; + text-shadow: 0 -2px 3px rgba(220, 220, 220, 0.46); + } + } +} + +.bs-tooltip-left { + .arrow { + &::before { + content: '\6b'; + left: -8px; + top: 3.6px; + border: none; + text-shadow: 2px 0 3px rgba(220, 220, 220, 0.46); + } + } + .tooltip-inner { + border-radius: 20px 15px 15px 20px; + } +} + +.tooltip-inner { + border-radius: 20px; + padding: 6px 15px; + box-shadow: 0 0 15px #dcdcdc; +} +/**====== tooltip css end ======**/ diff --git a/src/styles/partials/third-party/_css-animator.scss b/src/styles/partials/third-party/_css-animator.scss new file mode 100644 index 0000000..d9566cc --- /dev/null +++ b/src/styles/partials/third-party/_css-animator.scss @@ -0,0 +1,1626 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.5.2 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2017 Daniel Eden + */ + +.animated { + animation-duration: 1s; + animation-fill-mode: both; + &.infinite { + animation-iteration-count: infinite; + } + &.hinge { + animation-duration: 2s; + } + &.flipOutX, + &.flipOutY, + &.bounceIn, + &.bounceOut { + animation-duration: 0.75s; + } +} + +@keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + transform: translate3d(0, 0, 0); + } + + 40%, + 43% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -30px, 0); + } + + 70% { + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + transform: translate3d(0, -15px, 0); + } + + 90% { + transform: translate3d(0, -4px, 0); + } +} + +.bounce { + animation-name: bounce; + transform-origin: center bottom; +} + +@keyframes flash { + from, + 50%, + to { + opacity: 1; + } + + 25%, + 75% { + opacity: 0; + } +} + +.flash { + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes pulse { + from { + transform: scale3d(1, 1, 1); + } + + 50% { + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.pulse { + animation-name: pulse; +} + +@keyframes rubberBand { + from { + transform: scale3d(1, 1, 1); + } + + 30% { + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + transform: scale3d(0.95, 1.05, 1); + } + + 75% { + transform: scale3d(1.05, 0.95, 1); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + animation-name: rubberBand; +} + +@keyframes shake { + from, + to { + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + transform: translate3d(10px, 0, 0); + } +} + +.shake { + animation-name: shake; +} + +@keyframes headShake { + 0% { + transform: translateX(0); + } + + 6.5% { + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + transform: translateX(2px) rotateY(3deg); + } + + 50% { + transform: translateX(0); + } +} + +.headShake { + animation-timing-function: ease-in-out; + animation-name: headShake; +} + +@keyframes swing { + 20% { + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + transform-origin: top center; + animation-name: swing; +} + +@keyframes tada { + from { + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30%, + 50%, + 70%, + 90% { + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, + 60%, + 80% { + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.tada { + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes wobble { + from { + transform: none; + } + + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + transform: none; + } +} + +.wobble { + animation-name: wobble; +} + +@keyframes jello { + from, + 11.1%, + to { + transform: none; + } + + 22.2% { + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + transform: skewX(0.39063deg) skewY(0.39063deg); + } + + 88.8% { + transform: skewX(-0.19531deg) skewY(-0.19531deg); + } +} + +.jello { + animation-name: jello; + transform-origin: center; +} + +@keyframes bounceIn { + from, + 20%, + 40%, + 60%, + 80%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + + 20% { + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + transform: scale3d(0.9, 0.9, 0.9); + } + + 60% { + opacity: 1; + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + transform: scale3d(0.97, 0.97, 0.97); + } + + to { + opacity: 1; + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + animation-name: bounceIn; +} + +@keyframes bounceInDown { + from, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + transform: translate3d(0, 25px, 0); + } + + 75% { + transform: translate3d(0, -10px, 0); + } + + 90% { + transform: translate3d(0, 5px, 0); + } + + to { + transform: none; + } +} + +.bounceInDown { + animation-name: bounceInDown; +} + +@keyframes bounceInLeft { + from, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + transform: translate3d(25px, 0, 0); + } + + 75% { + transform: translate3d(-10px, 0, 0); + } + + 90% { + transform: translate3d(5px, 0, 0); + } + + to { + transform: none; + } +} + +.bounceInLeft { + animation-name: bounceInLeft; +} + +@keyframes bounceInRight { + from, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + transform: translate3d(-25px, 0, 0); + } + + 75% { + transform: translate3d(10px, 0, 0); + } + + 90% { + transform: translate3d(-5px, 0, 0); + } + + to { + transform: none; + } +} + +.bounceInRight { + animation-name: bounceInRight; +} + +@keyframes bounceInUp { + from, + 60%, + 75%, + 90%, + to { + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + + 75% { + transform: translate3d(0, 10px, 0); + } + + 90% { + transform: translate3d(0, -5px, 0); + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + animation-name: bounceInUp; +} + +@keyframes bounceOut { + 20% { + transform: scale3d(0.9, 0.9, 0.9); + } + + 50%, + 55% { + opacity: 1; + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } +} + +.bounceOut { + animation-name: bounceOut; +} + +@keyframes bounceOutDown { + 20% { + transform: translate3d(0, 10px, 0); + } + + 40%, + 45% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + animation-name: bounceOutDown; +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + animation-name: bounceOutLeft; +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + animation-name: bounceOutRight; +} + +@keyframes bounceOutUp { + 20% { + transform: translate3d(0, -10px, 0); + } + + 40%, + 45% { + opacity: 1; + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + animation-name: bounceOutUp; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + animation-name: fadeIn; +} + +@keyframes fadeInDown { + from { + opacity: 0; + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInDown { + animation-name: fadeInDown; +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInDownBig { + animation-name: fadeInDownBig; +} + +@keyframes fadeInLeft { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInLeft { + animation-name: fadeInLeft; +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInLeftBig { + animation-name: fadeInLeftBig; +} + +@keyframes fadeInRight { + from { + opacity: 0; + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInRight { + animation-name: fadeInRight; +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInRightBig { + animation-name: fadeInRightBig; +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUp { + animation-name: fadeInUp; +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUpBig { + animation-name: fadeInUpBig; +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + animation-name: fadeOut; +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + animation-name: fadeOutDown; +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + animation-name: fadeOutDownBig; +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + animation-name: fadeOutLeft; +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + animation-name: fadeOutLeftBig; +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + animation-name: fadeOutRight; +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + animation-name: fadeOutRightBig; +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + animation-name: fadeOutUp; +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + animation-name: fadeOutUpBig; +} + +@keyframes flip { + from { + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + animation-timing-function: ease-out; + } + + 40% { + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + animation-timing-function: ease-out; + } + + 50% { + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + animation-timing-function: ease-in; + } + + 80% { + transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + animation-timing-function: ease-in; + } + + to { + transform: perspective(400px); + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + animation-name: flip; +} + +@keyframes flipInX { + from { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + animation-timing-function: ease-in; + } + + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInX; +} + +@keyframes flipInY { + from { + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + animation-timing-function: ease-in; + } + + 60% { + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInY; +} + +@keyframes flipOutX { + from { + transform: perspective(400px); + } + + 30% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@keyframes flipOutY { + from { + transform: perspective(400px); + } + + 30% { + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipOutY; +} + +@keyframes lightSpeedIn { + from { + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + transform: skewX(20deg); + opacity: 1; + } + + 80% { + transform: skewX(-5deg); + opacity: 1; + } + + to { + transform: none; + opacity: 1; + } +} + +.lightSpeedIn { + animation-name: lightSpeedIn; + animation-timing-function: ease-out; +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + animation-name: lightSpeedOut; + animation-timing-function: ease-in; +} + +@keyframes rotateIn { + from { + transform-origin: center; + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + transform-origin: center; + transform: none; + opacity: 1; + } +} + +.rotateIn { + animation-name: rotateIn; +} + +@keyframes rotateInDownLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} + +.rotateInDownLeft { + animation-name: rotateInDownLeft; +} + +@keyframes rotateInDownRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} + +.rotateInDownRight { + animation-name: rotateInDownRight; +} + +@keyframes rotateInUpLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} + +.rotateInUpLeft { + animation-name: rotateInUpLeft; +} + +@keyframes rotateInUpRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} + +.rotateInUpRight { + animation-name: rotateInUpRight; +} + +@keyframes rotateOut { + from { + transform-origin: center; + opacity: 1; + } + + to { + transform-origin: center; + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + animation-name: rotateOut; +} + +@keyframes rotateOutDownLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + animation-name: rotateOutDownLeft; +} + +@keyframes rotateOutDownRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + animation-name: rotateOutDownRight; +} + +@keyframes rotateOutUpLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + animation-name: rotateOutUpLeft; +} + +@keyframes rotateOutUpRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + animation-name: rotateOutUpRight; +} + +@keyframes hinge { + 0% { + transform-origin: top left; + animation-timing-function: ease-in-out; + } + + 20%, + 60% { + transform: rotate3d(0, 0, 1, 80deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + } + + 40%, + 80% { + transform: rotate3d(0, 0, 1, 60deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + animation-name: hinge; +} + +@keyframes jackInTheBox { + from { + opacity: 0; + transform: scale(0.1) rotate(30deg); + transform-origin: center bottom; + } + + 50% { + transform: rotate(-10deg); + } + + 70% { + transform: rotate(3deg); + } + + to { + opacity: 1; + transform: scale(1); + } +} + +.jackInTheBox { + animation-name: jackInTheBox; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes rollIn { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + transform: none; + } +} + +.rollIn { + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + animation-name: rollOut; +} + +@keyframes zoomIn { + from { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + animation-name: zoomIn; +} + +@keyframes zoomInDown { + from { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInDown { + animation-name: zoomInDown; +} + +@keyframes zoomInLeft { + from { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInLeft { + animation-name: zoomInLeft; +} + +@keyframes zoomInRight { + from { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInRight { + animation-name: zoomInRight; +} + +@keyframes zoomInUp { + from { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInUp { + animation-name: zoomInUp; +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + animation-name: zoomOut; +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform-origin: center bottom; + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutDown { + animation-name: zoomOutDown; +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + transform: scale(0.1) translate3d(-2000px, 0, 0); + transform-origin: left center; + } +} + +.zoomOutLeft { + animation-name: zoomOutLeft; +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + transform: scale(0.1) translate3d(2000px, 0, 0); + transform-origin: right center; + } +} + +.zoomOutRight { + animation-name: zoomOutRight; +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform-origin: center bottom; + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutUp { + animation-name: zoomOutUp; +} + +@keyframes slideInDown { + from { + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + animation-name: slideInDown; +} + +@keyframes slideInLeft { + from { + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + animation-name: slideInLeft; +} + +@keyframes slideInRight { + from { + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + animation-name: slideInRight; +} + +@keyframes slideInUp { + from { + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + animation-name: slideInUp; +} + +@keyframes slideOutDown { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + animation-name: slideOutDown; +} + +@keyframes slideOutLeft { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + animation-name: slideOutLeft; +} + +@keyframes slideOutRight { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + animation-name: slideOutRight; +} + +@keyframes slideOutUp { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + animation-name: slideOutUp; +} diff --git a/src/styles/partials/third-party/_ngx-perfect-scrollbar.scss b/src/styles/partials/third-party/_ngx-perfect-scrollbar.scss new file mode 100644 index 0000000..9a2d97e --- /dev/null +++ b/src/styles/partials/third-party/_ngx-perfect-scrollbar.scss @@ -0,0 +1,45 @@ +.datta-scroll, +.scroll-widget, +.main-chat-cont, +.config-scroll, +.main-friend-list { + .ps__rail-y { + &:hover > .ps__thumb-y, + &:focus > .ps__thumb-y, + &.ps--clicking .ps__thumb-y { + background-color: #a7a7a7; + width: 5px; + } + } + .ps__thumb-y { + background-color: #aaa; + border-radius: 6px; + width: 5px; + right: 0; + } +} + +perfect-scrollbar.datta-scroll > .ps, +perfect-scrollbar.scroll-widget > .ps, +perfect-scrollbar.main-chat-cont > .ps, +perfect-scrollbar.config-scroll > .ps, +perfect-scrollbar.main-friend-list > .ps { + &.ps--active-y > .ps__rail-y { + width: 5px; + &:hover, + &.ps--clicking { + width: 5px; + } + } + &.ps--scrolling-y > .ps__rail-y, + &.ps--scrolling-x > .ps__rail-x { + opacity: 0.4; + background-color: transparent; + } + &.ps--active-y > .ps__rail-y { + &:hover, + &.ps--clicking { + width: 5px; + } + } +} diff --git a/src/styles/partials/third-party/_react-full-screen.scss b/src/styles/partials/third-party/_react-full-screen.scss new file mode 100644 index 0000000..0974946 --- /dev/null +++ b/src/styles/partials/third-party/_react-full-screen.scss @@ -0,0 +1,3 @@ +:not(:root):-webkit-full-screen::backdrop { + background: transparent !important; +} diff --git a/src/styles/partials/third-party/_third-party.scss b/src/styles/partials/third-party/_third-party.scss new file mode 100644 index 0000000..b5747ed --- /dev/null +++ b/src/styles/partials/third-party/_third-party.scss @@ -0,0 +1,8 @@ +@import 'react-perfect-scrollbar/dist/css/styles.css'; +@import 'nvd3/build/nv.d3.css'; + +@import 'ngx-perfect-scrollbar'; +@import 'react-full-screen'; +@import 'css-animator'; + +@import 'react-bootstrap/react-bootstrap'; diff --git a/src/styles/partials/third-party/react-bootstrap/_header.scss b/src/styles/partials/third-party/react-bootstrap/_header.scss new file mode 100644 index 0000000..da57680 --- /dev/null +++ b/src/styles/partials/third-party/react-bootstrap/_header.scss @@ -0,0 +1,41 @@ +@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css'); +.pcoded-header { + .dropdown { + height: 70px; + .dropdown-toggle { + margin: -2px 0 0 4px; + .userinfoname { + font-size: 14px; + color: #131523; + font-weight: 400; + font-family: pretendard; + display: block; + margin-right: 4px; + } + } + } + .btn { + padding: 0; + margin-bottom: 0; + margin-right: 0; + border: none; + &:after { + right: -12px !important; + } + &:focus, + &:active, + &:hover { + text-decoration: none; + } + } + .main-search { + margin-left: 5px; + .input-group-text { + line-height: 1; + } + } + + .btn > i { + margin-right: -12px; + } +} diff --git a/src/styles/partials/third-party/react-bootstrap/react-bootstrap.scss b/src/styles/partials/third-party/react-bootstrap/react-bootstrap.scss new file mode 100644 index 0000000..6053ec3 --- /dev/null +++ b/src/styles/partials/third-party/react-bootstrap/react-bootstrap.scss @@ -0,0 +1 @@ +@import 'header'; diff --git a/src/styles/partials/widget/_widget.scss b/src/styles/partials/widget/_widget.scss new file mode 100644 index 0000000..15ca40b --- /dev/null +++ b/src/styles/partials/widget/_widget.scss @@ -0,0 +1,1586 @@ +.gradientcolor { + .btn-round { + border-radius: 30px; + } +} + +.ChartShadow { + filter: drop-shadow(0px 20px 8px rgba(0, 0, 0, 0.2)); +} + +.chart-activity, +.chart-sale, +.chart-statistics, +.device-chart { + margin: 0 auto; +} + +#Statistics-sale { + .amcharts-cursor-fill { + filter: url(#shadow); + fill: rgba(256, 256, 256, 0.3); + stroke-width: 0; + } +} + +.amcharts-zoom-out-bg, +.amcharts-zoom-out-image { + display: none; +} +/* statistics section */ + +.card-command { + .card-icon { + opacity: 0.5; + } +} + +.mat-drp { + .btn.dropdown-toggle { + border: none; + background: transparent; + box-shadow: none; + color: #d8d8d8; + + &:after { + display: none; + } + + &:focus { + box-shadow: none; + outline: none; + } + } +} + +.table-card { + .row-table { + display: flex; + align-items: center; + table-layout: fixed; + height: 100%; + width: 100%; + margin: 0; + + i { + padding: 50px 20px; + } + + > [class*='col-'] { + display: table-cell; + float: none; + table-layout: fixed; + vertical-align: middle; + + .row { + display: flex; + align-items: center; + } + } + } +} + +.rides-bar { + i.rides-icon { + background: linear-gradient(-135deg, #1de9b6 0%, #1dc4e9 100%); + border-radius: 50px; + padding: 15px; + } +} + +.visitor { + .img-female { + position: absolute; + left: 10px; + bottom: 0; + } + + .img-men { + position: absolute; + right: 10px; + bottom: 0; + } +} + +.profit-bar { + i { + background: linear-gradient(-135deg, #1de9b6 0%, #1dc4e9 100%); + border-radius: 50px; + padding: 13px; + } +} + +.assets-value { + .bg-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-position: center 103%; + background-repeat: no-repeat; + background-size: contain; + z-index: 1; + } + + .card-block, + .card-body { + position: relative; + z-index: 5; + } + @media screen and (max-width: 1199px) { + .bg-img { + background: none; + } + } +} + +.chat-sanders { + .card-header { + background: linear-gradient(-135deg, #3f4d67 0%, #3f4d67 100%); + } + + .msg { + margin-bottom: 5px; + display: inline-block; + padding: 15px; + position: relative; + } + + .scroll-wrapper { + height: 305px; + } + + .received-chat { + h5 { + border-radius: 50%; + width: 40px; + height: 40px; + text-align: center; + } + + .msg { + background: #fff; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.1); + + &:after { + content: ''; + position: absolute; + left: -12px; + bottom: 18px; + transform: rotate(270deg); + border: 6px solid transparent; + border-bottom-color: #fff; + } + } + } + + .send-chat { + h5 { + border-radius: 50%; + width: 40px; + height: 40px; + text-align: center; + } + + .msg { + background: linear-gradient(-135deg, #1de9b6 0%, #1dc4e9 100%); + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.1); + + &:after { + content: ''; + position: absolute; + right: -11px; + bottom: 18px; + transform: rotate(450deg); + border: 6px solid transparent; + border-bottom-color: #1de9b6; + } + } + } + + .btn { + background: none; + opacity: 0.4; + } + + .form-control { + background: #f4f7fa; + } + + .input-group { + background: transparent; + } +} + +.widget-menu { + background: linear-gradient(-135deg, #88d3ce 0%, #6e45e2 100%); + + .widget-title { + border-top: 1px solid #676fb9; + } + + i { + opacity: 0.5; + } +} + +.to-do { + .to-do-button { + position: absolute; + bottom: 30px; + right: 20px; + + .btn { + width: 40px; + height: 40px; + float: right; + border-radius: 50px; + border: none; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + padding: 0; + margin: 0; + } + } +} + +.lazy-dog { + i { + opacity: 0.5; + } +} + +.widget-content { + .widget-lorem { + .media { + h5 { + border-radius: 50%; + width: 50px; + height: 50px; + text-align: center; + } + } + } +} + +.note-bar { + .friendlist-box { + padding: 25px 35px; + border-top: 1px solid #e3e3e3; + + &:first-child { + border: 0; + } + + h6 { + display: inline-block; + } + + i { + opacity: 0.2; + color: $theme-font-color; + } + } +} + +.to-do-list { + h6 { + display: inline-block; + } + + .done-task { + opacity: 0.7; + + > div { + filter: grayscale(0.8); + } + + h6, + p, + span { + text-decoration: line-through; + } + } + + .checkbox-fade { + .check-task { + display: block; + } + + .to-content { + display: inline-block; + } + + .cr { + border-radius: 6px; + border: 1px solid #e3e3e3; + cursor: pointer; + display: inline-block; + float: right; + height: 24px; + margin-right: 0.5em; + position: relative; + width: 24px; + margin: 0; + top: 5px; + + .cr-icon { + color: #fff; + font-size: 0.8em; + left: 0; + line-height: 0; + position: absolute; + right: 0; + text-align: center; + top: 50%; + } + } + + label input[type='checkbox'] { + display: none; + } + + label input[type='checkbox'] + .cr > .cr-icon { + transform: scale(3) rotateZ(-20deg); + opacity: 0; + transition: all 0.3s ease-in; + } + + label input[type='checkbox']:checked + .cr > .cr-icon { + transform: scale(1) rotateZ(0deg); + opacity: 1; + } + + label input[type='checkbox']:checked + .cr { + background: linear-gradient(-135deg, #1de9b6 0%, #1dc4e9 100%); + border: 0; + } + } +} + +.User-Activity, +.user-list { + .table { + td { + vertical-align: middle; + } + + thead { + th { + border: 0; + } + } + } +} + +.Application-list, +.code-table { + .table { + td { + vertical-align: middle; + } + + .label { + border-radius: 15px; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } + } + + thead { + th { + border: 0; + } + } +} + +.Recent-Users, +.User-Lists { + .table { + tr { + &:first-child { + td { + border-top: 0; + } + } + } + + td { + vertical-align: middle; + } + + .label { + border-radius: 15px; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } + } +} + +.social-media { + .progress { + background: transparent; + border-radius: 0; + justify-content: center; + + h5 { + position: relative; + top: -2px; + } + } +} + +.post-emoticon { + ul { + padding: 0; + margin: 25px 0 0; + list-style: none; + } + + li { + display: inline-block; + } + + i { + position: relative; + top: 4px; + } +} + +.visa-top { + .visa { + img { + position: absolute; + left: 0; + right: 0; + bottom: 0; + } + } +} + +.loction-user { + .row { + padding: 35px 30px; + } + + i { + opacity: 0.5; + } + + .loction-progress { + padding: 35px 30px; + + .progress { + justify-content: center; + height: 10px; + border-radius: 0; + } + } +} + +.Design-sprint, +.dashboard-kit { + .design-image { + padding: 0; + margin: 30px 0 0; + list-style: none; + } + + li { + display: inline-block; + text-align: center; + margin-right: 3px; + } + + .btn { + border-radius: 50px; + border: 0; + width: 40px; + height: 40px; + padding: 0; + margin: 0; + } + + i { + opacity: 0.3; + } +} + +.ux-designer { + position: relative; + padding: 35px 30px; + + .btn { + border-radius: 50px; + border: 0; + width: 50px; + height: 50px; + position: absolute; + right: 20px; + top: -20px; + padding: 0; + margin: 0; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } +} + +.task-list { + list-style: none; + position: relative; + margin: 0; + padding: 30px 0 0; + + &:after { + content: ''; + position: absolute; + background: #ecedef; + height: 100%; + width: 2px; + top: 0; + left: 30px; + z-index: 1; + } + + li { + margin-bottom: 30px; + padding-left: 55px; + position: relative; + + &:last-child { + margin-bottom: 0; + } + + .task-icon { + position: absolute; + left: 22px; + top: 13px; + border-radius: 50%; + padding: 2px; + width: 17px; + height: 17px; + z-index: 2; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } + } +} + +.project-main { + padding: 30px 25px; + + i { + opacity: 0.4; + } +} + +.user-chart { + i { + opacity: 0.3; + } +} + +.leads-progress, +.progress-gender { + .progress { + justify-content: center; + height: 10px; + border-radius: 0; + } +} + +.user-card { + .label { + border-radius: 15px; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } +} + +.Active-visitor { + .progress { + height: 7px; + } + + .card-active > div + div { + border-left: 1px solid $theme-border; + } + @media screen and (max-width: 767px) { + .card-active [class*='col-']:last-child { + border-left: 0; + margin-top: 20px; + } + } +} + +.Invoice-bar { + .invoice-lable { + label { + background: #fff; + border-radius: 15px; + padding: 4px 20px; + } + } + + i { + background: rgba(255, 255, 255, 0.2); + width: 70px; + height: 70px; + border-radius: 50%; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + transition: all 0.3s ease-in-out; + } + + .progress { + background: rgba(255, 255, 255, 0.22); + border-radius: 0; + height: 7px; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.1); + } +} + +.location-sale { + .card-icon { + width: 70px; + height: 70px; + background: #fff; + border-radius: 50%; + position: absolute; + top: -20px; + text-align: center; + right: 0; + left: 0; + margin: 0 auto; + display: flex; + justify-content: center; + align-items: center; + @media screen and (max-width: 768px) { + display: none; + } + } +} + +.card-Impression { + i { + background: linear-gradient(-135deg, #1de9b6 0%, #1dc4e9 100%); + width: 52px; + height: 52px; + border-radius: 5px; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } +} + +.card-Revenue { + i { + background: rgba(255, 255, 255, 0.2); + width: 70px; + height: 70px; + border-radius: 50%; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + transition: all 0.3s ease-in-out; + } +} + +.card-customer { + i { + width: 70px; + height: 70px; + justify-content: center; + align-items: center; + display: flex; + border-radius: 5px; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } + @media screen and (max-width: 375px) { + i { + width: 80px; + height: 80px; + font-size: 50px; + } + } +} + +.ticket-customer { + i { + position: absolute; + opacity: 0.2; + right: 32px; + bottom: 30px; + } +} + +.ticket-visitor { + .progress { + border-radius: 0; + height: 13px; + } +} + +.customer-visitor { + i { + opacity: 0.2; + font-size: 118px; + position: absolute; + bottom: 0; + left: 0; + } +} + +.card-social { + &:hover { + i { + font-size: 40px; + transition: all 0.3s ease-in-out; + } + } + + .progress { + height: 6px; + } + + .card-active > div + div { + border-left: 1px solid $theme-border; + } +} + +.Online-Order, +.statistial-visit { + .progress { + height: 6px; + } +} + +.team-leader { + .slide { + margin-bottom: 32px; + + li { + width: 10px; + height: 10px; + background: #e3e3e3; + margin: 0 6px; + border-radius: 50px; + } + + .carousel-indicators { + bottom: -44px; + + .active { + background: #869791; + } + } + } +} + +.affilate-offers { + .card-icon { + opacity: 0.5; + } + + .label { + border-radius: 15px; + margin: 0; + padding: 8px 18px; + } +} + +.earning-date { + .bd-example { + padding: 0; + margin: 0; + border: 0; + + .nav-pills { + background: transparent; + padding: 0; + box-shadow: none; + + .nav-link { + min-width: auto; + padding: 6px 20px; + color: #fff; + } + + .nav-link.active { + background: #fff; + box-shadow: none; + color: #000; + position: relative; + + &:after { + content: ''; + position: absolute; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #fff; + top: -5px; + left: 0; + right: 0; + margin: 0 auto; + width: 11px; + } + } + } + + .tab-content { + background: transparent; + padding: 0; + box-shadow: none; + } + } +} + +.sale-view { + i { + width: 60px; + height: 60px; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + } +} + +.project-task { + i { + opacity: 0.5; + } + + .label { + border-radius: 15px; + margin: 0; + padding: 6px 16px; + } + + .progress { + height: 6px; + } +} + +.card-event { + .label { + border-radius: 15px; + margin: 0; + padding: 5px 16px; + } + + i { + position: absolute; + bottom: 36px; + right: 27px; + } +} + +.bitcoin-wallet { + i { + position: absolute; + right: 50px; + top: 50%; + transform: translateY(-50%); + opacity: 0.5; + } +} + +.summary-box { + .card-icon { + opacity: 0.4; + } +} + +.feature-card-box { + .feature-icon { + width: 70px; + height: 70px; + border-radius: 10px; + color: #fff; + margin: 0 auto; + padding: 10px; + font-size: 35px; + -webkit-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; + } + + &:hover { + .feature-icon { + transform: scale(1.2); + box-shadow: 0 5px 10px 0 rgba(0, 0, 0, 0.2); + border-radius: 0; + } + } +} + +.card { + .card-block, + .card-body { + code { + background-color: #eee; + margin: 5px; + display: inline-block; + border-radius: 3px; + padding: 0 3px; + } + } +} +@media screen and (max-width: 767px) { + .user-designer [class*='col-']:last-child { + margin-top: 15px; + } + div.dataTables_wrapper div.dataTables_filter label { + float: none !important; + text-align: center; + } +} + +.offline-box { + iframe { + width: 100%; + border: 1px solid #ddd; + } +} +/* ===================== to do page ============================= */ + +#task-container { + ul { + overflow: hidden; + padding: 0; + } + + li { + float: left; + width: 49%; + overflow: auto; + height: auto; + min-height: 10px; + background: #fff; + display: inline-block; + padding: 20px; + border: 1px solid #ccc; + color: #666; + border-top: 5px solid $primary-color; + cursor: pointer; + margin-bottom: 20px; + margin-right: 2%; + transition: all 0.3s; + position: relative; + + &:nth-child(2n) { + margin-right: 0; + } + } + + li.complete { + opacity: 1; + border-top: 9px solid $danger-color; + transition: all ease-in 0.3s; + + &:before { + /*background: url("../../../images/complete.png") no-repeat;*/ // amit images + position: absolute; + top: 5px; + right: 5px; + content: ''; + width: 55px; + height: 55px; + background-size: 100%; + } + + p { + text-decoration: line-through; + } + } + @media screen and (max-width: 580px) { + li { + width: 100%; + } + } +} + +.new-task { + .to-do-list { + .cr { + float: left; + top: 0; + margin-right: 16px; + } + } + + label input[type='checkbox'] { + display: none; + } +} + +.checkbox-fade { + .cr { + border-radius: 6px; + border: 1px solid #e3e3e3; + cursor: pointer; + display: inline-block; + float: left; + height: 24px; + margin-right: 0.5em; + position: relative; + width: 24px; + top: 0; + } +} + +.task-panel { + .to-do-label { + margin-bottom: 15px; + + &:last-child { + border-bottom: none; + margin-bottom: 0; + padding: 0; + } + } +} + +.done-task .captions, +.done-task span { + color: #919aa3; + text-decoration: line-through; +} + +.to-do-list { + i { + color: #ccc; + font-size: 17px; + opacity: 0; + } + + &:hover { + i { + opacity: 1; + transition: opacity ease-in 0.3s; + } + } +} + +.note-card { + .note-box-aside { + border-right: 1px solid #ddd; + } + + .Note-header { + padding: 20px 0; + } + + #Note-pad { + border: none; + resize: none; + background: 0 0; + padding: 0 20px 0 50px; + line-height: 35px; + } + + .note-write { + position: relative; + background: -webkit-linear-gradient(top, #98dcfa 0%, #e1f5fe 5%) 0 0; + background-size: 100% 35px; + + &:before { + content: ''; + position: absolute; + width: 0; + top: 0; + left: 32px; + bottom: 0; + border-left: 1px solid #4fc3f7; + } + + &:after { + content: ''; + position: absolute; + width: 0; + top: 0; + left: 34px; + bottom: 0; + border-left: 1px solid #4fc3f7; + } + } + + .Note-delete { + margin-bottom: 0; + opacity: 0; + background: rgba(0, 0, 0, 0.6); + border: none; + position: absolute; + right: 20px; + color: #fff; + transition: all ease-in 0.3s; + border-radius: 2px; + cursor: pointer; + transform: translateX(10px); + } + + #Note-list { + li:hover { + .Note-delete { + opacity: 1; + transform: translateX(0px); + } + } + } +} +/* ===================== Gallery page ============================= */ + +.gallery-masonry { + .card-columns { + column-count: 4; + } +} +@media screen and (max-width: 1400px) { + .gallery-masonry { + .card-columns { + column-count: 3; + } + } +} +@media screen and (max-width: 992px) { + .gallery-masonry { + .card-columns { + column-count: 2; + } + } +} +@media screen and (max-width: 575px) { + .gallery-masonry { + .card-columns { + column-count: 1; + } + } +} + +.job-meta-data { + i { + margin-right: 5px; + color: $primary-color; + } +} +/* ===================== Task-list page ============================= */ + +.task-data { + img { + width: 40px; + box-shadow: none; + } + + i { + color: $theme-heading-color; + } + + .dropdown-toggle { + &:after { + color: $theme-heading-color; + } + } +} + +.task-board-left { + .task-right-header-revision, + .task-right-header-status, + .task-right-header-users { + padding-bottom: 10px; + padding-top: 10px; + border-bottom: 1px solid #f1f1f1; + cursor: pointer; + } + + .taskboard-right-progress, + .taskboard-right-revision, + .taskboard-right-users { + padding-top: 10px; + } + + .taskboard-right-progress { + .progress { + height: 9px; + margin-bottom: 25px; + } + } + + .user-box { + .media-object { + height: 50px; + width: 50px; + cursor: pointer; + } + + .media-left { + position: relative; + } + + .btn.btn-icon { + width: 40px; + height: 40px; + border-radius: 50%; + font-size: 15px; + display: flex; + justify-content: center; + align-items: center; + } + } + + .live-status { + height: 8px; + width: 8px; + position: absolute; + bottom: 0; + right: 0; + border-radius: 100%; + top: 5px; + } +} + +.filter-bar { + .navbar { + background-color: #fff; + border-radius: 4px; + box-shadow: 0 1px 20px 0 rgba(69, 90, 100, 0.08); + padding: 0.5rem 1rem; + @media screen and (max-width: 557px) { + .f-text { + display: block; + width: 100%; + } + + .f-view { + padding-left: 24px; + + span { + display: block; + width: 100%; + margin-bottom: 10px; + } + } + } + } + + .label { + border-radius: 4px; + font-size: 13px; + padding: 3px 7px; + } + + .task-detail { + margin-bottom: 5px; + } + + .card-task { + .task-list-table { + display: inline-block; + + img { + width: 40px; + box-shadow: none; + } + + i { + color: $theme-heading-color; + } + } + + .task-board { + float: right; + margin-top: 5px; + + .dropdown { + display: inline-block; + } + + .btn { + padding: 4px 10px; + font-size: 10px; + margin: 0; + } + } + } +} + +.assign-user, +.task-comment { + img { + width: 45px; + box-shadow: none; + } +} +/* ===================== Invoice page ============================= */ + +.invoice-contact { + display: flex; + margin-bottom: 30px; + padding-top: 30px; + align-items: center; +} + +.invoice-table.table { + padding-left: 20px; + + td { + border: 0; + padding: 4px 0; + } +} + +.invoive-info { + display: flex; + margin-bottom: 30px; + + h6 { + margin-bottom: 20px; + text-transform: uppercase; + } + + .invoice-order.table { + padding-left: 0; + + th { + border: 0; + padding: 4px 0; + + &:first-child { + padding-left: 0; + width: 80px; + } + } + } +} + +.invoice-total.table { + background: #f3f3f3; + padding: 30px 0; + + th { + border: 0; + padding: 4px 0; + text-align: right; + } + + td { + text-align: right; + } + + tbody { + padding-right: 20px; + float: right; + } +} + +.invoice-summary { + .label { + border-radius: 5px; + padding: 3px 10px; + font-size: 12px; + } +} + +.invoice-list { + .btn { + padding: 5px 10px; + font-size: 12px; + } + + .task-list-table { + display: inline-block; + } +} +/* ================ new css =================== */ + +.datepicker-dropdown { + padding: 20px; + color: #fff; + background: #3f4d67; + font-size: 14px; + + &:after { + border-bottom: 6px solid #3f4d67; + } +} + +.datepicker-dropdown.datepicker-orient-top:after { + border-top: 6px solid #3f4d67; +} + +.datepicker table tr td.active.active, +.datepicker table tr td.active.highlighted.active, +.datepicker table tr td.active.highlighted:active, +.datepicker table tr td.active:active, +.datepicker table tr td.highlighted, +.datepicker table tr td.today, +.datepicker table tr td.day:hover, +.datepicker table tr td.focused, +.datepicker .datepicker-switch:hover, +.datepicker .next:hover, +.datepicker .prev:hover, +.datepicker tfoot tr th:hover { + background-color: #333f54; + color: #fff; +} + +.datepicker table tr td.disabled, +.datepicker table tr td.disabled:hover, +.datepicker table tr td.new, +.datepicker table tr td.old { + color: #ffffff94; +} + +.syntax-output { + border-radius: 0.25rem; + border: 1px solid $theme-border; +} + +.owl-carousel { + .owl-nav { + button { + &.owl-next, + &.owl-prev { + padding: 3px 9px !important; + background-color: $primary-color; + color: #fff; + } + } + } + button:focus { + outline: none; + color: #fff; + } +} +.owl-theme .owl-nav [class*='owl-']:hover { + background-color: $primary-color; + color: #fff; +} + +.counter b { + font-size: 24px; +} + +.tour-mobile .error-block { + display: none; +} + +.message-mobile { + span { + font-size: 16px; + } + + .task-right-header-status { + margin-bottom: 10px; + padding: 10px 0; + border-bottom: 1px solid #f1f1f1; + cursor: pointer; + @media screen and (min-width: 992px) { + display: none; + } + } +} + +.fullcalendar-card { + .fc-button { + background-color: $primary-color; + border-color: #fff; + color: #fff; + background-image: none; + box-shadow: none; + text-shadow: none; + height: 37px; + padding: 0 15px; + } + + h2 { + font-size: 28px; + } + @media screen and (max-width: 768px) { + .fc .fc-toolbar > * > * { + float: none; + } + .fc-toolbar .fc-left, + .fc-toolbar .fc-right, + .fc-toolbar .fc-center { + float: none; + display: flex; + justify-content: center; + align-items: center; + width: 100%; + text-align: center; + margin: 0 auto; + margin-bottom: 10px; + } + } +} + +.ck-content strong { + font-weight: 600; +} + +div.code-toolbar { + > .toolbar a, + > .toolbar button, + > .toolbar span { + padding: 3px 0.9em !important; + background: #04a9f5 !important; + color: #fff !important; + box-shadow: none !important; + } +} + +pre[class*='language-']:after, +pre[class*='language-']:before { + display: none; +} +#chat-scroll { + height: 280px; + position: relative; +} +.msg-user-list.datta-scroll { + height: calc(100vh - 300px); + position: relative; +} +.msg-user-chat.datta-scroll { + height: calc(100vh - 330px); + position: relative; +} + +@media screen and (max-width: 1199px) { + .note-card .note-box-aside { + border: none !important; + } +} + +@media screen and (max-width: 991px) { + .ch-block { + display: none; + } + + .msg-block { + &.dis-chat { + .taskboard-right-progress { + display: none; + } + + .ch-block { + display: block; + } + } + } +} +@media screen and (max-width: 992px) { + .tour-mobile .error-block { + display: block; + } + + .tour-mobile .page-wrapper { + display: none; + } +} +@media screen and (min-width: 768px) { + .horizontal-mobile { + display: none; + } +} diff --git a/src/styles/style.scss b/src/styles/style.scss new file mode 100644 index 0000000..e63d748 --- /dev/null +++ b/src/styles/style.scss @@ -0,0 +1,31 @@ +@import 'bootstrap/dist/css/bootstrap'; + +// General theme contents +@import 'partials/variables'; +@import 'partials/general'; +@import 'partials/mixins/function'; + +// important Element +@import 'partials/menu/menu-lite'; + +// Theme Element +@import 'partials/theme-elements/alert'; +@import 'partials/theme-elements/authentication'; +@import 'partials/theme-elements/breadcrumb-pagination'; +@import 'partials/theme-elements/button'; +@import 'partials/theme-elements/form'; +@import 'partials/theme-elements/labels-badges'; +@import 'partials/theme-elements/nav'; +@import 'partials/theme-elements/popover'; +@import 'partials/theme-elements/progress'; +@import 'partials/theme-elements/radiobox-checkbox'; +@import 'partials/theme-elements/tooltip'; + +// Other +@import 'partials/other/chat'; +@import 'partials/other/prism'; +@import 'partials/other/Switches'; +@import 'partials/other/chart'; +@import 'partials/other/icon-lauouts'; + +@import 'partials/third-party/third-party'; diff --git a/src/styles/styles.css b/src/styles/styles.css new file mode 100644 index 0000000..0fceadf --- /dev/null +++ b/src/styles/styles.css @@ -0,0 +1,231 @@ +.form-control + .input-group-addon:not(:first-child) { + border-left: 0; +} +.input-group-addon:not(:first-child), +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group > .btn, +.input-group-btn:not(:first-child) > .dropdown-toggle, +.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn, +.input-group-btn:not(:last-child) > .btn:not(:first-child), +.input-group .form-control:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.25; + color: #495057; + text-align: center; + background-color: #e9ecef; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.input-group-addon, +.input-group-btn { + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: -ms-flexbox; + display: -webkit-box; + display: flex; + -ms-flex-align: center; + -webkit-box-align: center; + align-items: center; +} +.input-group-addon { + background-color: #4680ff; + color: #fff; +} + +/*===== Border Inputs start =====*/ +.form-control-primary { + border-color: #4680ff; + color: #4680ff; +} + +.form-control-primary:focus { + border-color: #4680ff; +} + +.input-group-primary .input-group-addon { + background-color: #4680ff; +} + +.input-group-primary .form-control { + border-color: #4680ff; +} + +.form-control-warning { + border-color: #ffb64d; + color: #ffb64d; +} + +.form-control-warning:focus { + border-color: #ffb64d; +} + +.input-group-warning .input-group-addon { + background-color: #ffb64d; +} + +.input-group-warning .form-control { + border-color: #ffb64d; +} + +.form-control-default { + border-color: #e0e0e0; + color: #e0e0e0; +} + +.form-control-default:focus { + border-color: #e0e0e0; +} + +.input-group-default .input-group-addon { + background-color: #e0e0e0; +} + +.input-group-default .form-control { + border-color: #e0e0e0; +} + +.form-control-danger { + border-color: #fc6180; + color: #fc6180; +} + +.form-control-danger:focus { + border-color: #fc6180; +} + +.input-group-danger .input-group-addon { + background-color: #fc6180; +} + +.input-group-danger .form-control { + border-color: #fc6180; +} + +.form-control-success { + border-color: #93be52; + color: #93be52; +} + +.form-control-success:focus { + border-color: #93be52; +} + +.input-group-success .input-group-addon { + background-color: #93be52; +} + +.input-group-success .form-control { + border-color: #93be52; +} + +.form-control-inverse { + border-color: #303548; + color: #303548; +} + +.form-control-inverse:focus { + border-color: #303548; +} + +.input-group-inverse .input-group-addon { + background-color: #303548; +} + +.input-group-inverse .form-control { + border-color: #303548; +} + +.form-control-info { + border-color: #62d1f3; + color: #62d1f3; +} + +.form-control-info:focus { + border-color: #62d1f3; +} + +.input-group-info .input-group-addon { + background-color: #62d1f3; +} + +.input-group-info .form-control { + border-color: #62d1f3; +} + +.input-group { + margin-bottom: 1.25em; +} + +.input-group-addon { + background-color: #4680ff; + color: #fff; +} + +.input-group-button [class*='btn-'] { + padding: 0; + margin-bottom: 0; +} + +.input-group-button .input-group-addon { + transition: all ease-in 0.3s; +} + +.input-group-button .input-group-addon:hover { + background-color: #79a3ff; + border-color: #79a3ff; +} + +.input-group-button .input-group-addon:hover .btn { + background-color: #79a3ff; + border-color: #79a3ff; +} + +.input-group-dropdown [class*='btn-'] { + margin-bottom: 0; +} + +.btn { + /* margin-right: 0px !important; */ + margin-bottom: 0px !important; +} + +.btn-success { + background-color: #93be52 !important; + border-color: #93be52 !important; + color: #fff; + cursor: pointer; + transition: all ease-in 0.3s; +} + +.btn-success:hover { + background-color: #aacc77 !important; + border-color: #aacc77 !important; +} + +.btn-success:active { + background-color: #73993a !important; + border-color: #73993a !important; + box-shadow: none; + color: #fff; +} + +.btn-success:focus { + box-shadow: none; + color: #fff; +} + +.btn-success.disabled { + background-color: rgba(147, 190, 82, 0.5); + border-color: rgba(147, 190, 82, 0.5); +} diff --git a/src/styles/ui-treetable.css b/src/styles/ui-treetable.css new file mode 100644 index 0000000..1e7bd9b --- /dev/null +++ b/src/styles/ui-treetable.css @@ -0,0 +1,208 @@ +.ui-treetable { + position: relative; +} + +.ui-treetable table { + border-collapse: collapse; + width: 100%; + table-layout: fixed; +} + +.ui-treetable .ui-treetable-thead > tr > th, +.ui-treetable .ui-treetable-tbody > tr > td, +.ui-treetable .ui-treetable-tfoot > tr > td { + padding: 0.25em 0.5em; +} + +.ui-treetable .ui-treetable-toggler { + cursor: pointer; + display: inline-block; + height: 1em; + position: relative; + top: 50%; + margin-top: -0.5em; +} + +.ui-treetable .ui-sortable-column { + cursor: pointer; +} + +.ui-treetable p-treetablesorticon { + vertical-align: middle; +} + +.ui-treetable-auto-layout > .ui-treetable-wrapper { + overflow-x: auto; +} + +.ui-treetable-auto-layout > .ui-treetable-wrapper > table { + table-layout: auto; +} + +.ui-treetable .ui-treetable-chkbox { + margin: 0 0.25em; + vertical-align: middle; +} + +/* Sections */ +.ui-treetable-caption, +.ui-treetable-summary { + padding: 0.25em 0.5em; + text-align: center; + font-weight: bold; +} + +.ui-treetable-caption { + border-bottom: 0 none; +} + +.ui-treetable-summary { + border-top: 0 none; +} + +/* Paginator */ +.ui-treetable .ui-paginator-top { + border-bottom: 0 none; +} + +.ui-treetable .ui-paginator-bottom { + border-top: 0 none; +} + +/* Scrollable */ +.ui-treetable-scrollable-wrapper { + position: relative; +} +.ui-treetable-scrollable-header, +.ui-treetable-scrollable-footer { + overflow: hidden; + border: 0 none; +} + +.ui-treetable-scrollable-body { + overflow: auto; + position: relative; +} + +.ui-treetable-scrollable-body > table > .ui-treetable-tbody > tr:first-child > td { + border-top: 0 none; +} + +.ui-treetable-virtual-table { + position: absolute; +} + +/* Frozen Columns */ +.ui-treetable-frozen-view .ui-treetable-scrollable-body { + overflow: hidden; +} + +.ui-treetable-frozen-view > .ui-treetable-scrollable-body > table > .ui-treetable-tbody > tr > td:last-child { + border-right: 0 none; +} + +.ui-treetable-unfrozen-view { + position: absolute; + top: 0px; +} + +/* Resizable */ +.ui-treetable-resizable > .ui-treetable-wrapper { + overflow-x: auto; +} + +.ui-treetable-resizable .ui-treetable-thead > tr > th, +.ui-treetable-resizable .ui-treetable-tfoot > tr > td, +.ui-treetable-resizable .ui-treetable-tbody > tr > td { + overflow: hidden; +} + +.ui-treetable-resizable .ui-resizable-column { + background-clip: padding-box; + position: relative; +} + +.ui-treetable-resizable-fit .ui-resizable-column:last-child .ui-column-resizer { + display: none; +} + +.ui-treetable .ui-column-resizer { + display: block; + position: absolute !important; + top: 0; + right: 0; + margin: 0; + width: 0.5em; + height: 100%; + padding: 0px; + cursor: col-resize; + border: 1px solid transparent; +} + +.ui-treetable .ui-column-resizer-helper { + width: 1px; + position: absolute; + z-index: 10; + display: none; +} + +/* Reorder */ +.ui-treetable-reorder-indicator-up, +.ui-treetable-reorder-indicator-down { + position: absolute; + display: none; +} + +/* Responsive */ +.ui-treetable-responsive .ui-treetable-tbody > tr > td .ui-column-title { + display: none; +} + +@media screen and (max-width: 40em) { + .ui-treetable-responsive .ui-treetable-thead > tr > th, + .ui-treetable-responsive .ui-treetable-tfoot > tr > td { + display: none !important; + } + + .ui-treetable-responsive .ui-treetable-tbody > tr > td { + text-align: left; + display: block; + border: 0 none; + width: 100% !important; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + clear: left; + } + + .ui-treetable-responsive .ui-treetable-tbody > tr > td .ui-column-title { + padding: 0.4em; + min-width: 30%; + display: inline-block; + margin: -0.4em 1em -0.4em -0.4em; + font-weight: bold; + } +} + +/* Loader */ +.ui-treetable-loading { + position: absolute; + width: 100%; + height: 100%; + opacity: 0.1; + z-index: 1; +} + +.ui-treetable-loading-content { + position: absolute; + left: 50%; + top: 50%; + z-index: 2; + margin-top: -1em; + margin-left: -1em; +} + +.ui-treetable .ui-treetable-loading-icon { + font-size: 2em; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6f2da33 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "./tsconfig.paths.json", + "compilerOptions": { + "target": "ES5", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "module": "CommonJS", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "sourceMap": true + }, + "include": ["src/**/*", "test/**/*", "craco.config.ts"] +} diff --git a/tsconfig.paths.json b/tsconfig.paths.json new file mode 100644 index 0000000..202f344 --- /dev/null +++ b/tsconfig.paths.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@components/*": ["src/components/*"], + "@hooks/*": ["src/hooks/*"], + "@layout/*": ["src/layout/*"], + "@pages/*": ["src/pages/*"], + "@api/*": ["src/services/api/*"], + "@redux/*": ["src/redux/*"], + "@styles/*": ["src/styles/*"], + "@images/*": ["src/styles/images/*"], + "@icons/*": ["src/styles/images/icons/*"], + "@utils/*": ["src/share/utils/*"], + "@lib/*": ["src/share/lib/*"], + "@constants/*": ["src/share/constants/*"], + "@context/*": ["src/share/context/*"], + "@config/*": ["src/config/*"] + } + } +}