diff --git a/.github/workflows/dev-azure-staticwebapp.yml b/.github/workflows/dev-azure-staticwebapp.yml deleted file mode 100644 index f0e3a5c..0000000 --- a/.github/workflows/dev-azure-staticwebapp.yml +++ /dev/null @@ -1,118 +0,0 @@ -# This workflow will build and push a web application to an Azure Static Web App when you change your code. -# -# This workflow assumes you have already created the target Azure Static Web App. -# For instructions see https://docs.microsoft.com/azure/static-web-apps/get-started-portal?tabs=vanilla-javascript -# -# To configure this workflow: -# -# 1. Set up a secret in your repository named AZURE_STATIC_WEB_APPS_API_TOKEN with the value of your Static Web Apps deployment token. -# For instructions on obtaining the deployment token see: https://docs.microsoft.com/azure/static-web-apps/deployment-token-management -# -# 3. Change the values for the APP_LOCATION, API_LOCATION and APP_ARTIFACT_LOCATION, AZURE_STATIC_WEB_APPS_API_TOKEN environment variables (below). -# For instructions on setting up the appropriate configuration values go to https://docs.microsoft.com/azure/static-web-apps/front-end-frameworks -name: Deploy DEV EOEFANS WEB to Azure Static Web Apps - -on: - push: - branches: [ "main" ] -# pull_request: -# types: [synchronize, closed] -# branches: [ "main" ] - -# Environment variables available to all jobs and steps in this workflow -env: - APP_LOCATION: "dist" # location of your client code - API_LOCATION: "" # location of your api source code - optional - APP_ARTIFACT_LOCATION: "" # location of client code build output - AZURE_STATIC_WEB_APPS_API_TOKEN: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_DEV }} # secret containing deployment token for your static web app - SKIP_APP_BUILD: true - -permissions: - contents: read - -jobs: - build_and_deploy_job: - permissions: - contents: read # for actions/checkout to fetch code - pull-requests: write # for Azure/static-web-apps-deploy to comment on PRs - if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') - runs-on: [ self-hosted, Linux ] - environment: - name: 'Development' -# url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - - strategy: - matrix: - node-version: [18.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - - name: Build and Deploy Job - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - - - uses: actions/setup-node@v3 - name: Use Node.js ${{ matrix.node-version }} - with: - node-version: ${{ matrix.node-version }} - - - uses: pnpm/action-setup@v2 - name: Install pnpm - id: pnpm-install - with: - version: 7 - run_install: false - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v3 - name: Setup pnpm cache - with: - path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install - - - name: Use pnpm to build - run: pnpm run build - -# - name: post-build test -# run: pnpm test - - - name: Deploy build artifacts to Azure - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ env.AZURE_STATIC_WEB_APPS_API_TOKEN }} # secret containing api token for app - repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) - action: "upload" - ###### Repository/Build Configurations - These values can be configured to match you app requirements. ###### - # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig - app_location: ${{ env.APP_LOCATION }} - api_location: ${{ env.API_LOCATION }} - app_artifact_location: ${{ env.APP_ARTIFACT_LOCATION }} - skip_app_build: ${{ env.SKIP_APP_BUILD }} #comment this out to use azure oryx build - ###### End of Repository/Build Configurations ###### - - close_pull_request_job: - permissions: - contents: none - if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: [ self-hosted, Linux ] - name: Close Pull Request Job - steps: - - name: Close Pull Request - id: closepullrequest - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ env.AZURE_STATIC_WEB_APPS_API_TOKEN }} # secret containing api token for app - action: "close" diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e5285e..6cee00b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,79 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +# [1.0.0](/compare/v0.3.0...v1.0.0) (2023-03-01) + + + +# [0.3.0](/compare/v0.2.0...v0.3.0) (2023-03-01) + + +### ✨ Features + +* **custom**: 添加重大事项通知 a949fe4 + + + +# [0.2.0](/compare/v0.1.2...v0.2.0) (2023-03-01) + + +### ✨ Features + +* **custom**: 测试1.0版本 8e656d5 + + + +## [0.1.2](/compare/v0.1.1...v0.1.2) (2023-03-01) + + +### 📝 Documentation + +* **custom**: 修改文档 605770f + + + +## [0.1.1](/compare/v0.1.0...v0.1.1) (2023-03-01) + + +### ♻ Code Refactoring + +* **custom**: 手机端高级搜索完成,至此全部搜索初版完成 deeebb4, closes #20 #28 + + +### ⚡ Performance Improvements + +* **custom**: 平板端样式更新以及适配 bc59157 +* **custom**: 添加初版重构页面 f3b31d1 +* **custom**: 添加普通搜索以及页面优化 c4f8e4e +* **custom**: 增加pc端搜索动态效果 7c4e758 + + +### 🎫 Chores + +* **custom**: 升级依赖 1df0974 + + +### 🐛 Bug Fixes + +* **custom**: 修复搜索栏无法使用问题,添加点击蛞蝓回到主页 aac18c5, closes #25 #26 +* **custom**: dev环境下路径问题 ba34908, closes #19 + + +### 💄 Styles + +* **custom**: 顶部固定 e6d0048 +* **custom**: 视频页内容区修改样式 4a7c449 +* **custom**: 手机端搜索栏样式修改,pc端高级搜索当无输入内容时展示默认内容 edd527f +* **custom**: 添加手机端普通搜索样式 2a84717 +* **custom**: 添加pc端高级搜索样式 8554d28 +* **custom**: 添加tailwind css 1e6785d +* **custom**: 修改手机端拉取栏样式 bcf0987 +* **custom**: 修改首页样式以及右侧拉栏样式 c9f2f31 +* **custom**: 修改tailwind 227ede4 +* **custom**: tag栏修改样式 1f68668 + + + # [0.1.0](/compare/v0.0.3...v0.1.0) (2023-02-19) diff --git a/config/vite.dev.config.ts b/config/vite.dev.config.ts index 4ed1636..0d8e6ba 100644 --- a/config/vite.dev.config.ts +++ b/config/vite.dev.config.ts @@ -6,7 +6,7 @@ export const addProjectPath = (originPath: string) => `../${originPath}`; import { createHtmlPlugin } from "vite-plugin-html"; export default defineConfig({ define: { - __APP_VERSION__: "0.01", + __APP_VERSION__: "0.02", isdev: true, isrelease: false, }, diff --git a/config/vite.dev.config.ts.timestamp-1677330152133.mjs b/config/vite.dev.config.ts.timestamp-1677330152133.mjs new file mode 100644 index 0000000..169be8a --- /dev/null +++ b/config/vite.dev.config.ts.timestamp-1677330152133.mjs @@ -0,0 +1,48 @@ +// config/vite.dev.config.ts +import { defineConfig } from "file:///E:/code/project/bitbucket/eoefans-web/node_modules/.pnpm/vite@4.1.4_ve7l6t5koctut52smtaue47xhi/node_modules/vite/dist/node/index.js"; +import path from "path"; +import react from "file:///E:/code/project/bitbucket/eoefans-web/node_modules/.pnpm/@vitejs+plugin-react-swc@3.2.0_vite@4.1.4/node_modules/@vitejs/plugin-react-swc/index.mjs"; +import { createHtmlPlugin } from "file:///E:/code/project/bitbucket/eoefans-web/node_modules/.pnpm/vite-plugin-html@3.2.0_vite@4.1.4/node_modules/vite-plugin-html/dist/index.mjs"; +var __vite_injected_original_dirname = "E:\\code\\project\\bitbucket\\eoefans-web\\config"; +var addProjectPath = (originPath) => `../${originPath}`; +var vite_dev_config_default = defineConfig({ + define: { + __APP_VERSION__: "0.01", + isdev: true, + isrelease: false + }, + resolve: { + alias: { + "@utils": path.resolve(__vite_injected_original_dirname, addProjectPath("src/utils")), + "@components": path.resolve(__vite_injected_original_dirname, addProjectPath("src/components")), + "@store": path.resolve(__vite_injected_original_dirname, addProjectPath("src/store")), + "@routers": path.resolve(__vite_injected_original_dirname, addProjectPath("src/routers")), + "@assets": path.resolve(__vite_injected_original_dirname, addProjectPath("src/assets")) + } + }, + plugins: [ + react(), + createHtmlPlugin({ + entry: "src/main.tsx", + template: "index.html", + inject: { + data: { + injectScript: `` + } + } + }) + ], + server: { + proxy: { + "/v1": { + target: "https://api.eoe.best/eoefans-api", + changeOrigin: true + } + } + } +}); +export { + addProjectPath, + vite_dev_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiY29uZmlnL3ZpdGUuZGV2LmNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXGNvZGVcXFxccHJvamVjdFxcXFxiaXRidWNrZXRcXFxcZW9lZmFucy13ZWJcXFxcY29uZmlnXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJFOlxcXFxjb2RlXFxcXHByb2plY3RcXFxcYml0YnVja2V0XFxcXGVvZWZhbnMtd2ViXFxcXGNvbmZpZ1xcXFx2aXRlLmRldi5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L2NvZGUvcHJvamVjdC9iaXRidWNrZXQvZW9lZmFucy13ZWIvY29uZmlnL3ZpdGUuZGV2LmNvbmZpZy50c1wiO2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCByZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3Qtc3djXCI7XHJcbi8vcmVkaWN0UGF0aFxyXG5leHBvcnQgY29uc3QgYWRkUHJvamVjdFBhdGggPSAob3JpZ2luUGF0aDogc3RyaW5nKSA9PiBgLi4vJHtvcmlnaW5QYXRofWA7XHJcbmltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tIFwidml0ZS1wbHVnaW4taHRtbFwiO1xyXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xyXG4gIGRlZmluZToge1xyXG4gICAgX19BUFBfVkVSU0lPTl9fOiBcIjAuMDFcIixcclxuICAgIGlzZGV2OiB0cnVlLFxyXG4gICAgaXNyZWxlYXNlOiBmYWxzZSxcclxuICB9LFxyXG4gIHJlc29sdmU6IHtcclxuICAgIGFsaWFzOiB7XHJcbiAgICAgIFwiQHV0aWxzXCI6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIGFkZFByb2plY3RQYXRoKFwic3JjL3V0aWxzXCIpKSxcclxuICAgICAgXCJAY29tcG9uZW50c1wiOiBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBhZGRQcm9qZWN0UGF0aChcInNyYy9jb21wb25lbnRzXCIpKSxcclxuICAgICAgXCJAc3RvcmVcIjogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgYWRkUHJvamVjdFBhdGgoXCJzcmMvc3RvcmVcIikpLFxyXG4gICAgICBcIkByb3V0ZXJzXCI6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIGFkZFByb2plY3RQYXRoKFwic3JjL3JvdXRlcnNcIikpLFxyXG4gICAgICBcIkBhc3NldHNcIjogcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgYWRkUHJvamVjdFBhdGgoXCJzcmMvYXNzZXRzXCIpKSxcclxuICAgIH0sXHJcbiAgfSxcclxuICBwbHVnaW5zOiBbXHJcbiAgICByZWFjdCgpLFxyXG4gICAgY3JlYXRlSHRtbFBsdWdpbih7XHJcbiAgICAgIGVudHJ5OiBcInNyYy9tYWluLnRzeFwiLFxyXG4gICAgICB0ZW1wbGF0ZTogXCJpbmRleC5odG1sXCIsXHJcbiAgICAgIGluamVjdDoge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGluamVjdFNjcmlwdDogYGAsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gIF0sXHJcbiAgc2VydmVyOiB7XHJcbiAgICBwcm94eToge1xyXG4gICAgICBcIi92MVwiOiB7XHJcbiAgICAgICAgdGFyZ2V0OiBcImh0dHBzOi8vYXBpLmVvZS5iZXN0L2VvZWZhbnMtYXBpXCIsXHJcbiAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9LFxyXG59KTtcclxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUEwVSxTQUFTLG9CQUFvQjtBQUN2VyxPQUFPLFVBQVU7QUFDakIsT0FBTyxXQUFXO0FBR2xCLFNBQVMsd0JBQXdCO0FBTGpDLElBQU0sbUNBQW1DO0FBSWxDLElBQU0saUJBQWlCLENBQUMsZUFBdUIsTUFBTTtBQUU1RCxJQUFPLDBCQUFRLGFBQWE7QUFBQSxFQUMxQixRQUFRO0FBQUEsSUFDTixpQkFBaUI7QUFBQSxJQUNqQixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsRUFDYjtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1AsT0FBTztBQUFBLE1BQ0wsVUFBVSxLQUFLLFFBQVEsa0NBQVcsZUFBZSxXQUFXLENBQUM7QUFBQSxNQUM3RCxlQUFlLEtBQUssUUFBUSxrQ0FBVyxlQUFlLGdCQUFnQixDQUFDO0FBQUEsTUFDdkUsVUFBVSxLQUFLLFFBQVEsa0NBQVcsZUFBZSxXQUFXLENBQUM7QUFBQSxNQUM3RCxZQUFZLEtBQUssUUFBUSxrQ0FBVyxlQUFlLGFBQWEsQ0FBQztBQUFBLE1BQ2pFLFdBQVcsS0FBSyxRQUFRLGtDQUFXLGVBQWUsWUFBWSxDQUFDO0FBQUEsSUFDakU7QUFBQSxFQUNGO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixpQkFBaUI7QUFBQSxNQUNmLE9BQU87QUFBQSxNQUNQLFVBQVU7QUFBQSxNQUNWLFFBQVE7QUFBQSxRQUNOLE1BQU07QUFBQSxVQUNKLGNBQWM7QUFBQSxRQUNoQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixPQUFPO0FBQUEsTUFDTCxPQUFPO0FBQUEsUUFDTCxRQUFRO0FBQUEsUUFDUixjQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg== diff --git a/config/vite.master.config.ts b/config/vite.master.config.ts index 56938d5..dcac897 100644 --- a/config/vite.master.config.ts +++ b/config/vite.master.config.ts @@ -83,6 +83,8 @@ export default mergeConfig( react: ["react", "react-dom"], "react-router": ["react-router-dom"], "react-redux": ["@reduxjs/toolkit", "react-redux"], + masonic: ["masonic"], + sentry: ["@sentry/react", "@sentry/tracing"], axios: ["axios"], lib: [ "@mui/icons-material", @@ -104,6 +106,7 @@ export default mergeConfig( "react-intersection-observer", "dayjs", ], + "react-photo-view": ["react-photo-view"], }, }, }, diff --git a/index.html b/index.html index a2966e7..9ef6ac0 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,7 @@ + diff --git a/package.json b/package.json index 1c405f3..b82f1a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eoefans-web", - "version": "0.1.0", + "version": "1.0.0", "type": "module", "scripts": { "dev": "vite --config ./config/vite.dev.config.ts", @@ -26,7 +26,7 @@ "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", "@mui/icons-material": "^5.11.9", - "@mui/lab": "5.0.0-alpha.119", + "@mui/lab": "5.0.0-alpha.121", "@mui/material": "^5.11.9", "@reduxjs/toolkit": "^1.9.2", "@sentry/react": "^7.37.2", @@ -59,6 +59,7 @@ "@types/react-lazy-load-image-component": "^1.5.2", "@vitejs/plugin-legacy": "^4.0.1", "@vitejs/plugin-react-swc": "^3.1.0", + "autoprefixer": "^10.4.13", "commitizen": "^4.3.0", "commitlint": "^17.4.3", "commitlint-config-gitmoji": "^2.3.1", @@ -67,11 +68,13 @@ "cz-customizable": "^7.0.0", "husky": "^8.0.3", "less": "^4.1.3", + "postcss": "^8.4.21", "rollup-plugin-visualizer": "^5.9.0", "standard-version": "^9.5.0", + "tailwindcss": "^3.2.7", "terser": "^5.16.3", "typescript": "^4.9.5", - "vite": "4.1.1", + "vite": "4.1.4", "vite-plugin-compression": "^0.5.1", "vite-plugin-html": "^3.2.0", "vite-plugin-sentry": "^1.1.7" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 268ece3..84579ba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,7 +9,7 @@ specifiers: '@emotion/react': ^11.10.6 '@emotion/styled': ^11.10.6 '@mui/icons-material': ^5.11.9 - '@mui/lab': 5.0.0-alpha.119 + '@mui/lab': 5.0.0-alpha.121 '@mui/material': ^5.11.9 '@reduxjs/toolkit': ^1.9.2 '@sentry/react': ^7.37.2 @@ -22,6 +22,7 @@ specifiers: '@types/react-lazy-load-image-component': ^1.5.2 '@vitejs/plugin-legacy': ^4.0.1 '@vitejs/plugin-react-swc': ^3.1.0 + autoprefixer: ^10.4.13 axios: ^1.3.3 commitizen: ^4.3.0 commitlint: ^17.4.3 @@ -39,6 +40,7 @@ specifiers: material-ui-popup-state: ^5.0.4 nanoid: ^4.0.1 normalize.css: ^8.0.1 + postcss: ^8.4.21 react: ^18.2.0 react-dom: ^18.2.0 react-flip-toolkit: ^7.0.17 @@ -49,27 +51,28 @@ specifiers: react-use: ^17.4.0 rollup-plugin-visualizer: ^5.9.0 standard-version: ^9.5.0 + tailwindcss: ^3.2.7 terser: ^5.16.3 typescript: ^4.9.5 - vite: 4.1.1 + vite: 4.1.4 vite-plugin-compression: ^0.5.1 vite-plugin-html: ^3.2.0 vite-plugin-sentry: ^1.1.7 dependencies: - '@dnd-kit/core': 6.0.7_biqbaboplfbrettd7655fr4n2y - '@dnd-kit/modifiers': 6.0.1_pmudlfv2z3i7vvlookxjkeidxe - '@dnd-kit/sortable': 7.0.2_pmudlfv2z3i7vvlookxjkeidxe + '@dnd-kit/core': 6.0.8_biqbaboplfbrettd7655fr4n2y + '@dnd-kit/modifiers': 6.0.1_52scne4zmdeyjh2otzkgz2xfvu + '@dnd-kit/sortable': 7.0.2_52scne4zmdeyjh2otzkgz2xfvu '@dnd-kit/utilities': 3.2.1_react@18.2.0 '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia - '@mui/icons-material': 5.11.9_ofpk46txu7v2f5mzrtv4xsczka - '@mui/lab': 5.0.0-alpha.119_oc7w4sqyc6xrc5vjlyub4opq2u - '@mui/material': 5.11.9_xqeqsl5kvjjtyxwyi3jhw3yuli - '@reduxjs/toolkit': 1.9.2_k4ae6lp43ej6mezo3ztvx6pykq - '@sentry/react': 7.38.0_react@18.2.0 - '@sentry/tracing': 7.38.0 - axios: 1.3.3 + '@mui/icons-material': 5.11.11_h5fh5ntwxtyr677wxvzgewjsma + '@mui/lab': 5.0.0-alpha.121_gyxidxyv3rk32gbfkthfb2r3tm + '@mui/material': 5.11.11_xqeqsl5kvjjtyxwyi3jhw3yuli + '@reduxjs/toolkit': 1.9.3_k4ae6lp43ej6mezo3ztvx6pykq + '@sentry/react': 7.40.0_react@18.2.0 + '@sentry/tracing': 7.40.0 + axios: 1.3.4 dayjs: 1.11.7 intersection-observer: 0.12.2 json-bigint: 1.0.0 @@ -81,22 +84,23 @@ dependencies: react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-flip-toolkit: 7.0.17_biqbaboplfbrettd7655fr4n2y - react-intersection-observer: 9.4.2_react@18.2.0 + react-intersection-observer: 9.4.3_react@18.2.0 react-photo-view: 1.2.3_biqbaboplfbrettd7655fr4n2y react-redux: 8.0.5_3xleytyzprlgycb2ded54tx72i - react-router-dom: 6.8.1_biqbaboplfbrettd7655fr4n2y + react-router-dom: 6.8.2_biqbaboplfbrettd7655fr4n2y react-use: 17.4.0_biqbaboplfbrettd7655fr4n2y devDependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@types/imagesloaded': 4.1.2 '@types/json-bigint': 1.0.1 - '@types/node': 18.14.0 + '@types/node': 18.14.5 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 '@types/react-lazy-load-image-component': 1.5.2 - '@vitejs/plugin-legacy': 4.0.1_terser@5.16.4+vite@4.1.1 - '@vitejs/plugin-react-swc': 3.2.0_vite@4.1.1 + '@vitejs/plugin-legacy': 4.0.1_terser@5.16.5+vite@4.1.4 + '@vitejs/plugin-react-swc': 3.2.0_vite@4.1.4 + autoprefixer: 10.4.13_postcss@8.4.21 commitizen: 4.3.0 commitlint: 17.4.4 commitlint-config-gitmoji: 2.3.1 @@ -105,14 +109,16 @@ devDependencies: cz-customizable: 7.0.0 husky: 8.0.3 less: 4.1.3 + postcss: 8.4.21 rollup-plugin-visualizer: 5.9.0 standard-version: 9.5.0 - terser: 5.16.4 + tailwindcss: 3.2.7_postcss@8.4.21 + terser: 5.16.5 typescript: 4.9.5 - vite: 4.1.1_ve7l6t5koctut52smtaue47xhi - vite-plugin-compression: 0.5.1_vite@4.1.1 - vite-plugin-html: 3.2.0_vite@4.1.1 - vite-plugin-sentry: 1.1.7_vite@4.1.1 + vite: 4.1.4_pm537uckvxmam7hzwfdgs6yzna + vite-plugin-compression: 0.5.1_vite@4.1.4 + vite-plugin-html: 3.2.0_vite@4.1.4 + vite-plugin-sentry: 1.1.7_vite@4.1.4 packages: @@ -130,25 +136,25 @@ packages: dependencies: '@babel/highlight': 7.18.6 - /@babel/compat-data/7.20.14: - resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==} + /@babel/compat-data/7.21.0: + resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.12: - resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} + /@babel/core/7.21.0: + resolution: {integrity: sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.14 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-module-transforms': 7.20.11 - '@babel/helpers': 7.20.13 - '@babel/parser': 7.20.15 + '@babel/generator': 7.21.1 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.2 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.2 + '@babel/types': 7.21.2 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -158,12 +164,13 @@ packages: - supports-color dev: true - /@babel/generator/7.20.14: - resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} + /@babel/generator/7.21.1: + resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 dev: true @@ -171,7 +178,7 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: @@ -179,34 +186,34 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-validator-option': 7.18.6 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.0 + '@babel/helper-validator-option': 7.21.0 browserslist: 4.21.5 lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.20.12_@babel+core@7.20.12: - resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} + /@babel/helper-create-class-features-plugin/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-replace-supers': 7.20.7 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 @@ -215,24 +222,24 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} + /@babel/helper-create-regexp-features-plugin/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-annotate-as-pure': 7.18.6 regexpu-core: 5.3.1 dev: true - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12: + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.21.0: resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} peerDependencies: '@babel/core': ^7.4.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 debug: 4.3.4 lodash.debounce: 4.0.8 @@ -251,39 +258,39 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true - /@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true - /@babel/helper-member-expression-to-functions/7.20.7: - resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} + /@babel/helper-member-expression-to-functions/7.21.0: + resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 - /@babel/helper-module-transforms/7.20.11: - resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + /@babel/helper-module-transforms/7.21.2: + resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 @@ -292,8 +299,8 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.2 + '@babel/types': 7.21.2 transitivePeerDependencies: - supports-color dev: true @@ -302,7 +309,7 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true /@babel/helper-plugin-utils/7.20.2: @@ -310,17 +317,17 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12: + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 transitivePeerDependencies: - supports-color dev: true @@ -330,11 +337,11 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-member-expression-to-functions': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.2 + '@babel/types': 7.21.2 transitivePeerDependencies: - supports-color dev: true @@ -343,21 +350,21 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true /@babel/helper-skip-transparent-expression-wrappers/7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true /@babel/helper-string-parser/7.19.4: @@ -368,8 +375,8 @@ packages: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true @@ -377,21 +384,21 @@ packages: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.2 + '@babel/types': 7.21.2 transitivePeerDependencies: - supports-color dev: true - /@babel/helpers/7.20.13: - resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} + /@babel/helpers/7.21.0: + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.21.2 + '@babel/types': 7.21.2 transitivePeerDependencies: - supports-color dev: true @@ -404,414 +411,414 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.20.15: - resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} + /@babel/parser/7.21.2: + resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.21.2 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12: + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-static-block/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} + /@babel/plugin-proposal-class-static-block/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12: + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.0 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-optional-chaining/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} + /@babel/plugin-proposal-optional-chaining/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.0 dev: true - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.20.5_@babel+core@7.20.12: - resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} + /@babel/plugin-proposal-private-property-in-object/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-create-class-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.0: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.21.0: resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12: + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.21.0: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.21.0: resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.0: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.21.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-block-scoping/7.20.15_@babel+core@7.20.12: - resolution: {integrity: sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==} + /@babel/plugin-transform-block-scoping/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-classes/7.20.7_@babel+core@7.20.12: - resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} + /@babel/plugin-transform-classes/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 @@ -821,399 +828,399 @@ packages: - supports-color dev: true - /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 '@babel/template': 7.20.7 dev: true - /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.12: - resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + /@babel/plugin-transform-for-of/7.21.0_@babel+core@7.21.0: + resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 - '@babel/helper-function-name': 7.19.0 + '@babel/core': 7.21.0 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.21.0: resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.12: - resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} + /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.0: + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12: + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.21.0: resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/core': 7.21.0 + '@babel/helper-module-transforms': 7.21.2 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.21.0: resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12: + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.21.0: resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12: + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.21.0: resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 dev: true - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12: + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.21.0: resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.21.0: resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12: + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.21.0: resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-create-regexp-features-plugin': 7.21.0_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/preset-env/7.20.2_@babel+core@7.20.12: + /@babel/preset-env/7.20.2_@babel+core@7.21.0: resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.0 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-class-static-block': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-block-scoping': 7.20.15_@babel+core@7.20.12 - '@babel/plugin-transform-classes': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.12 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12 - '@babel/preset-modules': 0.1.5_@babel+core@7.20.12 - '@babel/types': 7.20.7 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 - core-js-compat: 3.28.0 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-proposal-class-static-block': 7.21.0_@babel+core@7.21.0 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.21.0 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-proposal-optional-chaining': 7.21.0_@babel+core@7.21.0 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-proposal-private-property-in-object': 7.21.0_@babel+core@7.21.0 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.0 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.0 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.21.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.21.0 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.21.0 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.0 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-block-scoping': 7.21.0_@babel+core@7.21.0 + '@babel/plugin-transform-classes': 7.21.0_@babel+core@7.21.0 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.21.0 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-for-of': 7.21.0_@babel+core@7.21.0 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.21.0 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.21.0 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.21.0 + '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.0 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.21.0 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.21.0 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.21.0 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.21.0 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.21.0 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.21.0 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.21.0 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.21.0 + '@babel/preset-modules': 0.1.5_@babel+core@7.21.0 + '@babel/types': 7.21.2 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.21.0 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.21.0 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.21.0 + core-js-compat: 3.29.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.20.12: + /@babel/preset-modules/0.1.5_@babel+core@7.21.0: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.21.0 '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 - '@babel/types': 7.20.7 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.21.0 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.21.0 + '@babel/types': 7.21.2 esutils: 2.0.3 dev: true @@ -1221,8 +1228,8 @@ packages: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime/7.20.13: - resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + /@babel/runtime/7.21.0: + resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 @@ -1232,30 +1239,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.2 + '@babel/types': 7.21.2 dev: true - /@babel/traverse/7.20.13: - resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} + /@babel/traverse/7.21.2: + resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.14 + '@babel/generator': 7.21.1 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@babel/parser': 7.21.2 + '@babel/types': 7.21.2 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.20.7: - resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} + /@babel/types/7.21.2: + resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -1276,7 +1283,7 @@ packages: lodash.isfunction: 3.0.9 resolve-from: 5.0.0 resolve-global: 1.0.0 - yargs: 17.7.0 + yargs: 17.7.1 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -1341,15 +1348,15 @@ packages: '@commitlint/execute-rule': 17.4.0 '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 - '@types/node': 18.14.0 + '@types/node': 18.14.5 chalk: 4.1.2 - cosmiconfig: 8.0.0 - cosmiconfig-typescript-loader: 4.3.0_ipkhww4xc5z2tt2x53vp2mt2be + cosmiconfig: 8.1.0 + cosmiconfig-typescript-loader: 4.3.0_v3kbstntxphny76zodmlbds7aa lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_tncu2ai53lzgmizdedur7lbibe + ts-node: 10.9.1_2cogyjchoknpkalymtikkc6nay typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' @@ -1439,8 +1446,8 @@ packages: tslib: 2.5.0 dev: false - /@dnd-kit/core/6.0.7_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-qcLBTVTjmLuLqC0RHQ+dFKN5neWmAI56H9xZ+he9WEJEkAvR76YAcz7DSWDJfjErepfG2H3Fkb9lYiX7cPR62g==} + /@dnd-kit/core/6.0.8_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -1452,25 +1459,25 @@ packages: tslib: 2.5.0 dev: false - /@dnd-kit/modifiers/6.0.1_pmudlfv2z3i7vvlookxjkeidxe: + /@dnd-kit/modifiers/6.0.1_52scne4zmdeyjh2otzkgz2xfvu: resolution: {integrity: sha512-rbxcsg3HhzlcMHVHWDuh9LCjpOVAgqbV78wLGI8tziXY3+qcMQ61qVXIvNKQFuhj75dSfD+o+PYZQ/NUk2A23A==} peerDependencies: '@dnd-kit/core': ^6.0.6 react: '>=16.8.0' dependencies: - '@dnd-kit/core': 6.0.7_biqbaboplfbrettd7655fr4n2y + '@dnd-kit/core': 6.0.8_biqbaboplfbrettd7655fr4n2y '@dnd-kit/utilities': 3.2.1_react@18.2.0 react: 18.2.0 tslib: 2.5.0 dev: false - /@dnd-kit/sortable/7.0.2_pmudlfv2z3i7vvlookxjkeidxe: + /@dnd-kit/sortable/7.0.2_52scne4zmdeyjh2otzkgz2xfvu: resolution: {integrity: sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==} peerDependencies: '@dnd-kit/core': ^6.0.7 react: '>=16.8.0' dependencies: - '@dnd-kit/core': 6.0.7_biqbaboplfbrettd7655fr4n2y + '@dnd-kit/core': 6.0.8_biqbaboplfbrettd7655fr4n2y '@dnd-kit/utilities': 3.2.1_react@18.2.0 react: 18.2.0 tslib: 2.5.0 @@ -1489,7 +1496,7 @@ packages: resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==} dependencies: '@babel/helper-module-imports': 7.18.6 - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/hash': 0.9.0 '@emotion/memoize': 0.8.0 '@emotion/serialize': 1.1.1 @@ -1534,7 +1541,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/babel-plugin': 11.10.6 '@emotion/cache': 11.10.5 '@emotion/serialize': 1.1.1 @@ -1570,7 +1577,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/babel-plugin': 11.10.6 '@emotion/is-prop-valid': 1.2.0 '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 @@ -1895,32 +1902,8 @@ packages: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: false - /@mui/base/5.0.0-alpha.117_zula6vjvt3wdocc4mwcxqa6nzi: - resolution: {integrity: sha512-3GlRSZdSrvDQ4k03dSV2rM+97JbNWimFOqGsE7n7Mi8WuBSYCgnPe56bQp3E5cShOrTn11dGH8FRCmVMcCEXqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@babel/runtime': 7.20.13 - '@emotion/is-prop-valid': 1.2.0 - '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.9_react@18.2.0 - '@popperjs/core': 2.11.6 - '@types/react': 18.0.28 - clsx: 1.2.1 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-is: 18.2.0 - dev: false - - /@mui/base/5.0.0-alpha.118_zula6vjvt3wdocc4mwcxqa6nzi: - resolution: {integrity: sha512-GAEpqhnuHjRaAZLdxFNuOf2GDTp9sUawM46oHZV4VnYPFjXJDkIYFWfIQLONb0nga92OiqS5DD/scGzVKCL0Mw==} + /@mui/base/5.0.0-alpha.119_zula6vjvt3wdocc4mwcxqa6nzi: + resolution: {integrity: sha512-XA5zhlYfXi67u613eIF0xRmktkatx6ERy3h+PwrMN5IcWFbgiL1guz8VpdXON+GWb8+G7B8t5oqTFIaCqaSAeA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -1930,10 +1913,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/is-prop-valid': 1.2.0 '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.9_react@18.2.0 + '@mui/utils': 5.11.11_react@18.2.0 '@popperjs/core': 2.11.6 '@types/react': 18.0.28 clsx: 1.2.1 @@ -1943,12 +1926,12 @@ packages: react-is: 18.2.0 dev: false - /@mui/core-downloads-tracker/5.11.9: - resolution: {integrity: sha512-YGEtucQ/Nl91VZkzYaLad47Cdui51n/hW+OQm4210g4N3/nZzBxmGeKfubEalf+ShKH4aYDS86XTO6q/TpZnjQ==} + /@mui/core-downloads-tracker/5.11.11: + resolution: {integrity: sha512-0YK0K9GfW1ysw9z4ztWAjLW+bktf+nExMyn2+EQe1Ijb0kF2kz1kIOmb4+di0/PsXG70uCuw4DhEIdNd+JQkRA==} dev: false - /@mui/icons-material/5.11.9_ofpk46txu7v2f5mzrtv4xsczka: - resolution: {integrity: sha512-SPANMk6K757Q1x48nCwPGdSNb8B71d+2hPMJ0V12VWerpSsbjZtvAPi5FAn13l2O5mwWkvI0Kne+0tCgnNxMNw==} + /@mui/icons-material/5.11.11_h5fh5ntwxtyr677wxvzgewjsma: + resolution: {integrity: sha512-Eell3ADmQVE8HOpt/LZ3zIma8JSvPh3XgnhwZLT0k5HRqZcd6F/QDHc7xsWtgz09t+UEFvOYJXjtrwKmLdwwpw==} engines: {node: '>=12.0.0'} peerDependencies: '@mui/material': ^5.0.0 @@ -1958,14 +1941,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 - '@mui/material': 5.11.9_xqeqsl5kvjjtyxwyi3jhw3yuli + '@babel/runtime': 7.21.0 + '@mui/material': 5.11.11_xqeqsl5kvjjtyxwyi3jhw3yuli '@types/react': 18.0.28 react: 18.2.0 dev: false - /@mui/lab/5.0.0-alpha.119_oc7w4sqyc6xrc5vjlyub4opq2u: - resolution: {integrity: sha512-74l+gA7fybcB2zyOLjWsPbOxt2F4ydu4t0a5rEC/Y4v6q0wDKaW1El1S/+zuE5Xw/fQmiwNrQ+Do5fDbRZDAsw==} + /@mui/lab/5.0.0-alpha.121_gyxidxyv3rk32gbfkthfb2r3tm: + resolution: {integrity: sha512-/W5H09zje9psma3RixtilTf1Tk2zUuK9j16e1W+V7oe/1pW6hNj6aZfm8y0t4qPUDQfxMBzlQm26XQx9i8F9PA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -1982,14 +1965,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia - '@mui/base': 5.0.0-alpha.117_zula6vjvt3wdocc4mwcxqa6nzi - '@mui/material': 5.11.9_xqeqsl5kvjjtyxwyi3jhw3yuli - '@mui/system': 5.11.9_d2lgyfpecxdc2bsiwyag5wf7ti + '@mui/base': 5.0.0-alpha.119_zula6vjvt3wdocc4mwcxqa6nzi + '@mui/material': 5.11.11_xqeqsl5kvjjtyxwyi3jhw3yuli + '@mui/system': 5.11.11_d2lgyfpecxdc2bsiwyag5wf7ti '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.9_react@18.2.0 + '@mui/utils': 5.11.11_react@18.2.0 '@types/react': 18.0.28 clsx: 1.2.1 prop-types: 15.8.1 @@ -1998,8 +1981,8 @@ packages: react-is: 18.2.0 dev: false - /@mui/material/5.11.9_xqeqsl5kvjjtyxwyi3jhw3yuli: - resolution: {integrity: sha512-Wb3WzjzYyi/WKSl/XlF7aC8kk2NE21IoHMF7hNQMkPb0GslbWwR4OUjlBpxtG+RSZn44wMZkEDNB9Hw0TDsd8g==} + /@mui/material/5.11.11_xqeqsl5kvjjtyxwyi3jhw3yuli: + resolution: {integrity: sha512-sSe0dmKjB1IGOYt32Pcha+cXV3IIrX5L5mFAF9LDRssp/x53bluhgLLbkc8eTiJvueVvo6HAyze6EkFEYLQRXQ==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -2015,14 +1998,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia - '@mui/base': 5.0.0-alpha.118_zula6vjvt3wdocc4mwcxqa6nzi - '@mui/core-downloads-tracker': 5.11.9 - '@mui/system': 5.11.9_d2lgyfpecxdc2bsiwyag5wf7ti + '@mui/base': 5.0.0-alpha.119_zula6vjvt3wdocc4mwcxqa6nzi + '@mui/core-downloads-tracker': 5.11.11 + '@mui/system': 5.11.11_d2lgyfpecxdc2bsiwyag5wf7ti '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.9_react@18.2.0 + '@mui/utils': 5.11.11_react@18.2.0 '@types/react': 18.0.28 '@types/react-transition-group': 4.4.5 clsx: 1.2.1 @@ -2034,8 +2017,8 @@ packages: react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y dev: false - /@mui/private-theming/5.11.9_pmekkgnqduwlme35zpnqhenc34: - resolution: {integrity: sha512-XMyVIFGomVCmCm92EvYlgq3zrC9K+J6r7IKl/rBJT2/xVYoRY6uM7jeB+Wxh7kXxnW9Dbqsr2yL3cx6wSD1sAg==} + /@mui/private-theming/5.11.11_pmekkgnqduwlme35zpnqhenc34: + resolution: {integrity: sha512-yLgTkjNC1mpye2SOUkc+zQQczUpg8NvQAETvxwXTMzNgJK1pv4htL7IvBM5vmCKG7IHAB3hX26W2u6i7bxwF3A==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -2044,15 +2027,15 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 - '@mui/utils': 5.11.9_react@18.2.0 + '@babel/runtime': 7.21.0 + '@mui/utils': 5.11.11_react@18.2.0 '@types/react': 18.0.28 prop-types: 15.8.1 react: 18.2.0 dev: false - /@mui/styled-engine/5.11.9_xqp3pgpqjlfxxa3zxu4zoc4fba: - resolution: {integrity: sha512-bkh2CjHKOMy98HyOc8wQXEZvhOmDa/bhxMUekFX5IG0/w4f5HJ8R6+K6nakUUYNEgjOWPYzNPrvGB8EcGbhahQ==} + /@mui/styled-engine/5.11.11_xqp3pgpqjlfxxa3zxu4zoc4fba: + resolution: {integrity: sha512-wV0UgW4lN5FkDBXefN8eTYeuE9sjyQdg5h94vtwZCUamGQEzmCOtir4AakgmbWMy0x8OLjdEUESn9wnf5J9MOg==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -2064,7 +2047,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/cache': 11.10.5 '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia @@ -2073,8 +2056,8 @@ packages: react: 18.2.0 dev: false - /@mui/system/5.11.9_d2lgyfpecxdc2bsiwyag5wf7ti: - resolution: {integrity: sha512-h6uarf+l3FO6l75Nf7yO+qDGrIoa1DM9nAMCUFZQsNCDKOInRzcptnm8M1w/Z3gVetfeeGoIGAYuYKbft6KZZA==} + /@mui/system/5.11.11_d2lgyfpecxdc2bsiwyag5wf7ti: + resolution: {integrity: sha512-a9gaOAJBjpzypDfhbGZQ8HzdcxdxsKkFvbp1aAWZhFHBPdehEkARNh7mj851VfEhD/GdffYt85PFKFKdUta5Eg==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -2089,13 +2072,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia - '@mui/private-theming': 5.11.9_pmekkgnqduwlme35zpnqhenc34 - '@mui/styled-engine': 5.11.9_xqp3pgpqjlfxxa3zxu4zoc4fba + '@mui/private-theming': 5.11.11_pmekkgnqduwlme35zpnqhenc34 + '@mui/styled-engine': 5.11.11_xqp3pgpqjlfxxa3zxu4zoc4fba '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.9_react@18.2.0 + '@mui/utils': 5.11.11_react@18.2.0 '@types/react': 18.0.28 clsx: 1.2.1 csstype: 3.1.1 @@ -2114,13 +2097,13 @@ packages: '@types/react': 18.0.28 dev: false - /@mui/utils/5.11.9_react@18.2.0: - resolution: {integrity: sha512-eOJaqzcEs4qEwolcvFAmXGpln+uvouvOS9FUX6Wkrte+4I8rZbjODOBDVNlK+V6/ziTfD4iNKC0G+KfOTApbqg==} + /@mui/utils/5.11.11_react@18.2.0: + resolution: {integrity: sha512-neMM5rrEXYQrOrlxUfns/TGgX4viS8K2zb9pbQh11/oUUYFlGI32Tn+PHePQx7n6Fy/0zq6WxdBFC9VpnJ5JrQ==} engines: {node: '>=12.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@types/prop-types': 15.7.5 '@types/react-is': 17.0.3 prop-types: 15.8.1 @@ -2216,8 +2199,8 @@ packages: react: 18.2.0 dev: false - /@reduxjs/toolkit/1.9.2_k4ae6lp43ej6mezo3ztvx6pykq: - resolution: {integrity: sha512-5ZAZ7hwAKWSii5T6NTPmgIBUqyVdlDs+6JjThz6J6dmHLDm6zCzv2OjHIFAi3Vvs1qjmXU0bm6eBojukYXjVMQ==} + /@reduxjs/toolkit/1.9.3_k4ae6lp43ej6mezo3ztvx6pykq: + resolution: {integrity: sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 react-redux: ^7.2.1 || ^8.0.2 @@ -2235,8 +2218,8 @@ packages: reselect: 4.1.7 dev: false - /@remix-run/router/1.3.2: - resolution: {integrity: sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA==} + /@remix-run/router/1.3.3: + resolution: {integrity: sha512-YRHie1yQEj0kqqCTCJEfHqYSSNlZQ696QJG+MMiW4mxSl9I0ojz/eRhJS4fs88Z5i6D1SmoF9d3K99/QOhI8/w==} engines: {node: '>=14'} dev: false @@ -2248,19 +2231,19 @@ packages: picomatch: 2.3.1 dev: true - /@sentry/browser/7.38.0: - resolution: {integrity: sha512-rPJr+2jRYL29PeMYA2JgzYKTZQx6bc3T9evbAdIh0n+popSjpVyOpOMV/3l6A7KZeeix3dpp6eUZUxTJukqriQ==} + /@sentry/browser/7.40.0: + resolution: {integrity: sha512-07rZ+cTcpmYB1r84/oZtmSPJJvLCxW8yIh/5s4MdKRyZpqIDKhOz6cCS/4j+l1V+MeLcNLZBjFtNdKA2eocTpg==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.38.0 - '@sentry/replay': 7.38.0 - '@sentry/types': 7.38.0 - '@sentry/utils': 7.38.0 + '@sentry/core': 7.40.0 + '@sentry/replay': 7.40.0 + '@sentry/types': 7.40.0 + '@sentry/utils': 7.40.0 tslib: 1.14.1 dev: false - /@sentry/cli/2.13.0: - resolution: {integrity: sha512-F0WmiMmVjn6zZyD89MF8B1zGgcrJTi5yxPmd+sqpRKOfGCtucdRdM/BL1aU27BApaseCCfI1bgwtJSB2fUQqlw==} + /@sentry/cli/2.14.3: + resolution: {integrity: sha512-/u8SKYohSDbg/Tf180qAJY+wgxIwwpZwH0uV/xn9t7/Rdb6x/YyD4AbFcPlBORnEZq4goVazWBLjJEkepO95YA==} engines: {node: '>= 10'} hasBin: true requiresBuild: true @@ -2275,63 +2258,63 @@ packages: - supports-color dev: true - /@sentry/core/7.38.0: - resolution: {integrity: sha512-+hXh/SO3Ie6WC2b+wi01xLhyVREdkRXS5QBmCiv3z2ks2HvYXp7PoKSXJvNKiwCP+pBD+enOnM1YEzM2yEy5yw==} + /@sentry/core/7.40.0: + resolution: {integrity: sha512-OPAobQG0GTY++r5LWUcOA1lS+2TY2Lmw/i5s4kL9WbY+f08dbLNEGNBObY7/V98OL4f7OG+nWaPFybgM7kqUTQ==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.38.0 - '@sentry/utils': 7.38.0 + '@sentry/types': 7.40.0 + '@sentry/utils': 7.40.0 tslib: 1.14.1 dev: false - /@sentry/react/7.38.0_react@18.2.0: - resolution: {integrity: sha512-IZpQ0aptV3UPjvDj+xorrgPgnW2xIL6Zcy7B6wAgwTC81OUITE7YaShglGD0sJ8M1ReFuH9duwTysr/uv8AytQ==} + /@sentry/react/7.40.0_react@18.2.0: + resolution: {integrity: sha512-7yYagpOCdsXnVTtLL8Y7wAf2xXgsk2ncuju3O/G4kEckkLewZWmQeoknOSGFlAgVdGNhTaXc2WGzgOiBMOkhug==} engines: {node: '>=8'} peerDependencies: react: 15.x || 16.x || 17.x || 18.x dependencies: - '@sentry/browser': 7.38.0 - '@sentry/types': 7.38.0 - '@sentry/utils': 7.38.0 + '@sentry/browser': 7.40.0 + '@sentry/types': 7.40.0 + '@sentry/utils': 7.40.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 tslib: 1.14.1 dev: false - /@sentry/replay/7.38.0: - resolution: {integrity: sha512-Ai78/OIYedny605x8uS0n/a5uj7qnuevogGD6agLat9lGc8DFvC07m2iS+EFyGOwtQzyDlRYJvYkHL8peR3crQ==} + /@sentry/replay/7.40.0: + resolution: {integrity: sha512-Y9Kvo9jKouUdrHQhHVv5SmWZClF5o7BFI6oVpLlv4zXORPQlyoZONM/9sxiMvvH73alDSpxzCoxyhlypAOH4ww==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.38.0 - '@sentry/types': 7.38.0 - '@sentry/utils': 7.38.0 + '@sentry/core': 7.40.0 + '@sentry/types': 7.40.0 + '@sentry/utils': 7.40.0 dev: false - /@sentry/tracing/7.38.0: - resolution: {integrity: sha512-ejXJp8oOT64MVtBzqdECUUaNzKbpu25St8Klub1i4Sm7xO+ZjDQDI4TIHvWojZvtkwQ3F4jcsCclc8KuyJunyQ==} + /@sentry/tracing/7.40.0: + resolution: {integrity: sha512-y1SNwlFEC7a2ThtWbT/KbnAVecAWyIeKiO/IRgyZSdcj1z4CliADKNQmkUhnDlLy8jV1ARGuZ1DvsuPNlWyDfw==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.38.0 - '@sentry/types': 7.38.0 - '@sentry/utils': 7.38.0 + '@sentry/core': 7.40.0 + '@sentry/types': 7.40.0 + '@sentry/utils': 7.40.0 tslib: 1.14.1 dev: false - /@sentry/types/7.38.0: - resolution: {integrity: sha512-NKOALR6pNUMzUrsk2m+dkPrO8uGNvNh1LD0BCPswKNjC2qHo1h1mDGCgBmF9+EWyii8ZoACTIsxvsda+MBf97Q==} + /@sentry/types/7.40.0: + resolution: {integrity: sha512-dIbqBenbmDx1F8pvfC11C88J83ecwumUhV+YOIxcmVd1fmlPF2hXWZ01+NTkTDkCu341sJx4wPQogByFy8FwGA==} engines: {node: '>=8'} dev: false - /@sentry/utils/7.38.0: - resolution: {integrity: sha512-MgbI3YmYuyyhUtvcXkgGBqjOW+nuLLNGUdWCK+C4kObf8VbLt3dSE/7SEMT6TSHLYQmxs2BxFgx5Agn97m68kQ==} + /@sentry/utils/7.40.0: + resolution: {integrity: sha512-ZdCbTpAXPiVVfvNJVftnDhsctOui71MDUhVIdLkgg4Cuic+WHGPRmmZ+H6uZdp7vRaeB+Uvnn5+t2iSAVo/mAA==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.38.0 + '@sentry/types': 7.40.0 tslib: 1.14.1 dev: false - /@swc/core-darwin-arm64/1.3.35: - resolution: {integrity: sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==} + /@swc/core-darwin-arm64/1.3.37: + resolution: {integrity: sha512-iIyVqqioUpVeT/hbBVfkrsjfCyL4idNH+LVKGmoTAWaTTSB0+UNhNuA7Wh2CqIHWh1Mv7IlumitWPcqsVDdoEw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -2339,8 +2322,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64/1.3.35: - resolution: {integrity: sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==} + /@swc/core-darwin-x64/1.3.37: + resolution: {integrity: sha512-dao5nXPWKxtaxqak4ZkRyBoApNIelW/glantQhPhj0FjMjuIQc+v03ldJ8XDByWOG+6xuVUTheANCtEccxoQBw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -2348,8 +2331,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf/1.3.35: - resolution: {integrity: sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==} + /@swc/core-linux-arm-gnueabihf/1.3.37: + resolution: {integrity: sha512-/mVrc8H/f062CUkqKGmBiil2VIYu4mKawHxERfeP1y38X5K/OwjG5s9MgO9TVxy+Ly6vejwj70kRhSa3hVp1Bw==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -2357,8 +2340,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu/1.3.35: - resolution: {integrity: sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==} + /@swc/core-linux-arm64-gnu/1.3.37: + resolution: {integrity: sha512-eRQ3KaZI0j5LidTfOIi/kUVOOMuVmw1HCdt/Z1TAUKoHMLVxY8xcJ3pEE3/+ednI60EmHpwpJRs6LelXyL6uzQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2366,8 +2349,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl/1.3.35: - resolution: {integrity: sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==} + /@swc/core-linux-arm64-musl/1.3.37: + resolution: {integrity: sha512-w2BRLODyxNQY2rfHZMZ5ir6QrrnGBPlnIslTrgKmVbn1OjZoxUCtuqhrYnCmybaAc4DOkeH02TqynEFXrm+EMw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -2375,8 +2358,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu/1.3.35: - resolution: {integrity: sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==} + /@swc/core-linux-x64-gnu/1.3.37: + resolution: {integrity: sha512-CfoH8EsZJZ9kunjMUjBNYD5fFuO86zw+K/o4wEw72Yg6ZEiqPmeIlCKU8tpTv4sK+CbhUXrmVzMB5tqsb2jALQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2384,8 +2367,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl/1.3.35: - resolution: {integrity: sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==} + /@swc/core-linux-x64-musl/1.3.37: + resolution: {integrity: sha512-9YPrHYNdoG7PK11gV51GfL45biI2dic+YTqHUDKyykemsD7Ot1zUFX7Ty//pdvpKcKSff6SrHbfFACD5ziNirA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -2393,8 +2376,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc/1.3.35: - resolution: {integrity: sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==} + /@swc/core-win32-arm64-msvc/1.3.37: + resolution: {integrity: sha512-h17Ek8/wCDje6BrXOvCXBM80oBRmTSMMdLyt87whTl5xqYlWYYs9oQIzZndNRTlNpTgjGO8Ns2eo4kwVxIkBIA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -2402,8 +2385,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc/1.3.35: - resolution: {integrity: sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==} + /@swc/core-win32-ia32-msvc/1.3.37: + resolution: {integrity: sha512-1BR175E1olGy/zdt94cgdb6ps/lBNissAOaxyBk8taFpcjy3zpdP30yAoH0GIsC6isnZ5JfArbOJNRXXO5tE0Q==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -2411,8 +2394,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc/1.3.35: - resolution: {integrity: sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==} + /@swc/core-win32-x64-msvc/1.3.37: + resolution: {integrity: sha512-1siDQ7dccQ1pesJmgAL3BUBbRPtfbNInOWnZOkiie/DfFqGQ117QKnCVyjUvwFKfTQx1+3UUTDmMSlRd00SlXg==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -2420,21 +2403,21 @@ packages: dev: true optional: true - /@swc/core/1.3.35: - resolution: {integrity: sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==} + /@swc/core/1.3.37: + resolution: {integrity: sha512-VOFlEQ1pReOM73N9A7R8rt561GU8Rxsq833jiimWDUB2sXEN3V6n6wFTgYmZuMz2T4/R0cQA1nV48KkaT4gkFw==} engines: {node: '>=10'} requiresBuild: true optionalDependencies: - '@swc/core-darwin-arm64': 1.3.35 - '@swc/core-darwin-x64': 1.3.35 - '@swc/core-linux-arm-gnueabihf': 1.3.35 - '@swc/core-linux-arm64-gnu': 1.3.35 - '@swc/core-linux-arm64-musl': 1.3.35 - '@swc/core-linux-x64-gnu': 1.3.35 - '@swc/core-linux-x64-musl': 1.3.35 - '@swc/core-win32-arm64-msvc': 1.3.35 - '@swc/core-win32-ia32-msvc': 1.3.35 - '@swc/core-win32-x64-msvc': 1.3.35 + '@swc/core-darwin-arm64': 1.3.37 + '@swc/core-darwin-x64': 1.3.37 + '@swc/core-linux-arm-gnueabihf': 1.3.37 + '@swc/core-linux-arm64-gnu': 1.3.37 + '@swc/core-linux-arm64-musl': 1.3.37 + '@swc/core-linux-x64-gnu': 1.3.37 + '@swc/core-linux-x64-musl': 1.3.37 + '@swc/core-win32-arm64-msvc': 1.3.37 + '@swc/core-win32-ia32-msvc': 1.3.37 + '@swc/core-win32-x64-msvc': 1.3.37 dev: true /@tsconfig/node10/1.0.9: @@ -2484,8 +2467,8 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/node/18.14.0: - resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==} + /@types/node/18.14.5: + resolution: {integrity: sha512-CRT4tMK/DHYhw1fcCEBwME9CSaZNclxfzVMe7GsO6ULSwsttbj70wSiX6rZdIjGblu93sTJxLdhNIT85KKI7Qw==} dev: true /@types/normalize-package-data/2.4.1: @@ -2544,33 +2527,33 @@ packages: resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} dev: false - /@vitejs/plugin-legacy/4.0.1_terser@5.16.4+vite@4.1.1: + /@vitejs/plugin-legacy/4.0.1_terser@5.16.5+vite@4.1.4: resolution: {integrity: sha512-/ZV63NagI1c9TB5E4ijGmycY//fNm/2L02nsnXXxACwYaF9W+/OyVlgIW24jYUIS+g0yQRtn+N5hzBc8RLNhGA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: terser: ^5.4.0 vite: ^4.0.0 dependencies: - '@babel/core': 7.20.12 - '@babel/preset-env': 7.20.2_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/preset-env': 7.20.2_@babel+core@7.21.0 browserslist: 4.21.5 - core-js: 3.28.0 + core-js: 3.29.0 magic-string: 0.27.0 regenerator-runtime: 0.13.11 - systemjs: 6.13.0 - terser: 5.16.4 - vite: 4.1.1_ve7l6t5koctut52smtaue47xhi + systemjs: 6.14.0 + terser: 5.16.5 + vite: 4.1.4_pm537uckvxmam7hzwfdgs6yzna transitivePeerDependencies: - supports-color dev: true - /@vitejs/plugin-react-swc/3.2.0_vite@4.1.1: + /@vitejs/plugin-react-swc/3.2.0_vite@4.1.4: resolution: {integrity: sha512-IcBoXL/mcH7JdQr/nfDlDwTdIaH8Rg7LpfQDF4nAht+juHWIuv6WhpKPCSfY4+zztAaB07qdBoFz1XCZsgo3pQ==} peerDependencies: vite: ^4 dependencies: - '@swc/core': 1.3.35 - vite: 4.1.1_ve7l6t5koctut52smtaue47xhi + '@swc/core': 1.3.37 + vite: 4.1.4_pm537uckvxmam7hzwfdgs6yzna dev: true /@xobotyi/scrollbar-width/1.9.5: @@ -2585,11 +2568,30 @@ packages: through: 2.3.8 dev: true + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /acorn/8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -2658,10 +2660,22 @@ packages: color-convert: 2.0.1 dev: true + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -2688,8 +2702,24 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /axios/1.3.3: - resolution: {integrity: sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==} + /autoprefixer/10.4.13_postcss@8.4.21: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001460 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: true + + /axios/1.3.4: + resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==} dependencies: follow-redirects: 1.15.2 form-data: 4.0.0 @@ -2702,43 +2732,43 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 cosmiconfig: 7.1.0 resolve: 1.22.1 dev: false - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.21.0: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.20.14 - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/compat-data': 7.21.0 + '@babel/core': 7.21.0 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.0 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12: + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.21.0: resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 - core-js-compat: 3.28.0 + '@babel/core': 7.21.0 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.0 + core-js-compat: 3.29.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12: + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.21.0: resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.20.12 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + '@babel/core': 7.21.0 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.21.0 transitivePeerDependencies: - supports-color dev: true @@ -2755,12 +2785,17 @@ packages: resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} dev: false + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + /bl/4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.1 dev: true /boolbase/1.0.0: @@ -2792,8 +2827,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001456 - electron-to-chromium: 1.4.302 + caniuse-lite: 1.0.30001460 + electron-to-chromium: 1.4.317 node-releases: 2.0.10 update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true @@ -2825,6 +2860,11 @@ packages: tslib: 2.5.0 dev: true + /camelcase-css/2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -2839,8 +2879,8 @@ packages: engines: {node: '>=6'} dev: true - /caniuse-lite/1.0.30001456: - resolution: {integrity: sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==} + /caniuse-lite/1.0.30001460: + resolution: {integrity: sha512-Bud7abqjvEjipUkpLs4D7gR0l8hBYBHoa+tGtKJHvT2AYzLp1z7EmVkUT4ERpVUfca8S2HGIVs883D8pUH1ZzQ==} dev: true /chalk/2.4.2: @@ -2863,6 +2903,21 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /classnames/2.3.2: resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} dev: false @@ -3038,7 +3093,7 @@ packages: dependencies: buffer-from: 1.1.2 inherits: 2.0.4 - readable-stream: 3.6.0 + readable-stream: 3.6.1 typedarray: 0.0.6 dev: true @@ -3243,14 +3298,14 @@ packages: toggle-selection: 1.0.6 dev: false - /core-js-compat/3.28.0: - resolution: {integrity: sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==} + /core-js-compat/3.29.0: + resolution: {integrity: sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==} dependencies: browserslist: 4.21.5 dev: true - /core-js/3.28.0: - resolution: {integrity: sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==} + /core-js/3.29.0: + resolution: {integrity: sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==} requiresBuild: true dev: true @@ -3258,7 +3313,7 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader/4.3.0_ipkhww4xc5z2tt2x53vp2mt2be: + /cosmiconfig-typescript-loader/4.3.0_v3kbstntxphny76zodmlbds7aa: resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -3267,9 +3322,9 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 18.14.0 - cosmiconfig: 8.0.0 - ts-node: 10.9.1_tncu2ai53lzgmizdedur7lbibe + '@types/node': 18.14.5 + cosmiconfig: 8.1.0 + ts-node: 10.9.1_2cogyjchoknpkalymtikkc6nay typescript: 4.9.5 dev: true @@ -3283,8 +3338,8 @@ packages: path-type: 4.0.0 yaml: 1.10.2 - /cosmiconfig/8.0.0: - resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==} + /cosmiconfig/8.1.0: + resolution: {integrity: sha512-0tLZ9URlPGU7JsKq0DQOQ3FoRsYX8xDZ7xMiATQfaiGMz7EHowNkbU9u1coAOmnh9p/1ySpm0RB3JNWRXM5GCg==} engines: {node: '>=14'} dependencies: import-fresh: 3.3.0 @@ -3335,6 +3390,12 @@ packages: engines: {node: '>= 6'} dev: true + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + /csstype/3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} @@ -3432,6 +3493,10 @@ packages: engines: {node: '>=8'} dev: true + /defined/1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + dev: true + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -3452,15 +3517,33 @@ packages: engines: {node: '>=8'} dev: true + /detective/5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.1 + minimist: 1.2.8 + dev: true + + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true + /dlv/1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + /dom-helpers/5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 csstype: 3.1.1 dev: false @@ -3535,8 +3618,8 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium/1.4.302: - resolution: {integrity: sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==} + /electron-to-chromium/1.4.317: + resolution: {integrity: sha512-JhCRm9v30FMNzQSsjl4kXaygU+qHBD0Yh7mKxyjmF0V8VwYVB6qpBRX28GyAucrM9wDCpSUctT6FpMUQxbyKuA==} dev: true /emoji-regex/10.2.1: @@ -3797,6 +3880,10 @@ packages: mime-types: 2.1.35 dev: false + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + /fs-extra/10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3912,6 +3999,13 @@ packages: is-glob: 4.0.3 dev: true + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -4032,7 +4126,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.16.4 + terser: 5.16.5 dev: true /https-proxy-agent/5.0.1: @@ -4172,6 +4266,13 @@ packages: /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + /is-core-module/2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: @@ -4371,6 +4472,11 @@ packages: - supports-color dev: true + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -4570,8 +4676,8 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.13 - '@mui/material': 5.11.9_xqeqsl5kvjjtyxwyi3jhw3yuli + '@babel/runtime': 7.21.0 + '@mui/material': 5.11.11_xqeqsl5kvjjtyxwyi3jhw3yuli classnames: 2.3.2 prop-types: 15.8.1 react: 18.2.0 @@ -4815,6 +4921,16 @@ packages: validate-npm-package-license: 3.0.4 dev: true + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + /normalize.css/8.0.1: resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} dev: false @@ -4837,6 +4953,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -4857,8 +4978,8 @@ packages: mimic-fn: 2.1.0 dev: true - /open/8.4.1: - resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} + /open/8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 @@ -5060,6 +5181,67 @@ packages: dev: true optional: true + /postcss-import/14.1.0_postcss@8.4.21: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.1 + dev: true + + /postcss-js/4.0.1_postcss@8.4.21: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.21 + dev: true + + /postcss-load-config/3.1.4_postcss@8.4.21: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.21 + yaml: 1.10.2 + dev: true + + /postcss-nested/6.0.0_postcss@8.4.21: + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: true + + /postcss-selector-parser/6.0.11: + resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + /postcss/8.4.21: resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} @@ -5113,6 +5295,11 @@ packages: engines: {node: '>=8'} dev: true + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + /raf-schd/4.0.3: resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} dev: false @@ -5140,8 +5327,8 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /react-intersection-observer/9.4.2_react@18.2.0: - resolution: {integrity: sha512-AdK+ryzZ7U9ZJYttDUZ8q2Am3nqE0exg5Ryl5Y124KeVsix/1hGZPbdu58EqA98TwnzwDNWHxg/kwNawmIiUig==} + /react-intersection-observer/9.4.3_react@18.2.0: + resolution: {integrity: sha512-WNRqMQvKpupr6MzecAQI0Pj0+JQong307knLP4g/nBex7kYfIaZsPpXaIhKHR+oV8z+goUbH9e10j6lGRnTzlQ==} peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: @@ -5187,7 +5374,7 @@ packages: redux: optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 '@types/hoist-non-react-statics': 3.3.1 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -5199,26 +5386,26 @@ packages: use-sync-external-store: 1.2.0_react@18.2.0 dev: false - /react-router-dom/6.8.1_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ==} + /react-router-dom/6.8.2_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-N/oAF1Shd7g4tWy+75IIufCGsHBqT74tnzHQhbiUTYILYF0Blk65cg+HPZqwC+6SqEyx033nKqU7by38v3lBZg==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.3.2 + '@remix-run/router': 1.3.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-router: 6.8.1_react@18.2.0 + react-router: 6.8.2_react@18.2.0 dev: false - /react-router/6.8.1_react@18.2.0: - resolution: {integrity: sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg==} + /react-router/6.8.2_react@18.2.0: + resolution: {integrity: sha512-lF7S0UmXI5Pd8bmHvMdPKI4u4S5McxmHnzJhrYi9ZQ6wE+DA8JN5BzVC5EEBuduWWDaiJ8u6YhVOCmThBli+rw==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.3.2 + '@remix-run/router': 1.3.3 react: 18.2.0 dev: false @@ -5228,7 +5415,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -5277,6 +5464,12 @@ packages: loose-envify: 1.4.0 dev: false + /read-cache/1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + /read-pkg-up/3.0.0: resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==} engines: {node: '>=4'} @@ -5313,8 +5506,8 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + /readable-stream/2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -5325,8 +5518,8 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + /readable-stream/3.6.1: + resolution: {integrity: sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -5334,6 +5527,13 @@ packages: util-deprecate: 1.0.2 dev: true + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -5353,7 +5553,7 @@ packages: /redux/4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 dev: false /regenerate-unicode-properties/10.1.0: @@ -5373,7 +5573,7 @@ packages: /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 dev: true /regexpu-core/5.3.1: @@ -5492,14 +5692,14 @@ packages: rollup: optional: true dependencies: - open: 8.4.1 + open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 - yargs: 17.7.0 + yargs: 17.7.1 dev: true - /rollup/3.17.1: - resolution: {integrity: sha512-8RnSms6rNqHmZK+wiqgnPCqen+rRnUHXkciGDirh7B00g1rX1vpKbPDhuxCvAG2bburoI+W4Q9/PlUB/zYkiYA==} + /rollup/3.18.0: + resolution: {integrity: sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -5509,7 +5709,7 @@ packages: /rtl-css-js/1.16.1: resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.21.0 dev: false /run-async/2.4.1: @@ -5670,7 +5870,7 @@ packages: /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.1 dev: true /stack-generator/2.0.10: @@ -5822,8 +6022,42 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /systemjs/6.13.0: - resolution: {integrity: sha512-P3cgh2bpaPvAO2NE3uRp/n6hmk4xPX4DQf+UzTlCAycssKdqhp6hjw+ENWe+aUS7TogKRFtptMosTSFeC6R55g==} + /systemjs/6.14.0: + resolution: {integrity: sha512-OMf+kFCYG9fLQerUyw/QVIPfZ+lo579R+usrDzSrZAkvMl6B0tHtc4rUP7DFaPCr7Sy6p5DYD4V9OCF1Sp6+vA==} + dev: true + + /tailwindcss/3.2.7_postcss@8.4.21: + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-import: 14.1.0_postcss@8.4.21 + postcss-js: 4.0.1_postcss@8.4.21 + postcss-load-config: 3.1.4_postcss@8.4.21 + postcss-nested: 6.0.0_postcss@8.4.21 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node dev: true /temp/0.9.4: @@ -5834,8 +6068,8 @@ packages: rimraf: 2.6.3 dev: true - /terser/5.16.4: - resolution: {integrity: sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==} + /terser/5.16.5: + resolution: {integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -5862,14 +6096,14 @@ packages: /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 xtend: 4.0.2 dev: true /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.1 dev: true /tmp/0.0.33: @@ -5911,7 +6145,7 @@ packages: resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} dev: false - /ts-node/10.9.1_tncu2ai53lzgmizdedur7lbibe: + /ts-node/10.9.1_2cogyjchoknpkalymtikkc6nay: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -5930,7 +6164,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.14.0 + '@types/node': 18.14.5 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -6061,7 +6295,7 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite-plugin-compression/0.5.1_vite@4.1.1: + /vite-plugin-compression/0.5.1_vite@4.1.4: resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} peerDependencies: vite: '>=2.0.0' @@ -6069,12 +6303,12 @@ packages: chalk: 4.1.2 debug: 4.3.4 fs-extra: 10.1.0 - vite: 4.1.1_ve7l6t5koctut52smtaue47xhi + vite: 4.1.4_pm537uckvxmam7hzwfdgs6yzna transitivePeerDependencies: - supports-color dev: true - /vite-plugin-html/3.2.0_vite@4.1.1: + /vite-plugin-html/3.2.0_vite@4.1.4: resolution: {integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==} peerDependencies: vite: '>=2.0.0' @@ -6091,24 +6325,24 @@ packages: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 4.1.1_ve7l6t5koctut52smtaue47xhi + vite: 4.1.4_pm537uckvxmam7hzwfdgs6yzna dev: true - /vite-plugin-sentry/1.1.7_vite@4.1.1: + /vite-plugin-sentry/1.1.7_vite@4.1.4: resolution: {integrity: sha512-V5WlWKbgul3udItDmvZHEzUw0TE2cehKLfcdR/G98PQ2LvweWDafVk4nmJpj1I7q70eeXWNoqmVq5Esde8c7XA==} engines: {node: '>= 12'} peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 dependencies: - '@sentry/cli': 2.13.0 - vite: 4.1.1_ve7l6t5koctut52smtaue47xhi + '@sentry/cli': 2.14.3 + vite: 4.1.4_pm537uckvxmam7hzwfdgs6yzna transitivePeerDependencies: - encoding - supports-color dev: true - /vite/4.1.1_ve7l6t5koctut52smtaue47xhi: - resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} + /vite/4.1.4_pm537uckvxmam7hzwfdgs6yzna: + resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -6132,13 +6366,13 @@ packages: terser: optional: true dependencies: - '@types/node': 18.14.0 + '@types/node': 18.14.5 esbuild: 0.16.17 less: 4.1.3 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.17.1 - terser: 5.16.4 + rollup: 3.18.0 + terser: 5.16.5 optionalDependencies: fsevents: 2.3.2 dev: true @@ -6242,8 +6476,8 @@ packages: yargs-parser: 20.2.9 dev: true - /yargs/17.7.0: - resolution: {integrity: sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==} + /yargs/17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/readme.md b/readme.md index 9d11e29..1ff2f42 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,17 @@ -# eoefans-web 端 +# eoefans-web + [![Deploy DEV EOEFANS WEB to Cloudflare pages](https://vlink.dev/EOEFANS/eoefans-web/actions/workflows/dev-cloudflare-pages.yml/badge.svg)](https://vlink.dev/EOEFANS/eoefans-web/actions/workflows/dev-cloudflare-pages.yml) [![EOEFANS-WEB-AZURE-DEPLOY](https://vlink.dev/EOEFANS/eoefans-web/actions/workflows/azure-staticwebapp.yml/badge.svg)](https://vlink.dev/EOEFANS/eoefans-web/actions/workflows/azure-staticwebapp.yml) +``` + ________ ______ +_____ ______ _____ ___ __/______ ________ ________ ___ _______ ___ /_ +_ _ \_ __ \_ _ \__ /_ _ __ `/__ __ \__ ___/ __ | /| / /_ _ \__ __ \ +/ __// /_/ // __/_ __/ / /_/ / _ / / /_(__ ) __ |/ |/ / / __/_ /_/ / +\___/ \____/ \___/ /_/ \__,_/ /_/ /_/ /____/ ____/|__/ \___/ /_.___/ + +``` + ## 目录结构(暂定) 1. component:存放组件 @@ -37,13 +47,13 @@ $ pnpm run commit - [x] 根据 tag 栏进行重新查询 - [x] 图片加载序列 - [x] header 栏根据滚动进行显示隐藏 +- [x] 搜索功能 ## TODO ### 目前未定论 - [ ] UI 设计 -- [ ] 搜索功能 ### 后续有空可以添加的 diff --git a/src/components/image/index.tsx b/src/components/image/index.tsx index b8e753c..844ee10 100644 --- a/src/components/image/index.tsx +++ b/src/components/image/index.tsx @@ -78,8 +78,10 @@ export function ImageBasic({ observer, callback, children, + title, ...resProps }: ImageProps & { + title: string; children?: ReactElement; [k: string]: any; }) { @@ -88,7 +90,7 @@ export function ImageBasic({ {({ inView, ref, entry }) => ( - + {title} <>{observer && inView && once_callback(inView)} {children} diff --git a/src/components/masonry/index.tsx b/src/components/masonry/index.tsx index 6583a97..5cd4871 100644 --- a/src/components/masonry/index.tsx +++ b/src/components/masonry/index.tsx @@ -2,7 +2,7 @@ import { FC, useState, useEffect, useCallback } from "react"; import { Masonry as Masonic_masonry } from "masonic"; import Image from "@components/image"; import { SingleRun, concurrencyRequest } from "@utils/index"; -import { fetchPhotos, fetchVideos } from "@utils/fetch"; +import { fetchPhotos } from "@utils/fetch"; import { nanoid } from "nanoid"; import { getImageSize } from "../image/tool"; export default function Masonry() { diff --git a/src/components/proview/themePreview.tsx b/src/components/proview/themePreview.tsx index 9f4886d..94ae2b6 100644 --- a/src/components/proview/themePreview.tsx +++ b/src/components/proview/themePreview.tsx @@ -1,6 +1,11 @@ //@ts-nocheck import React from "react"; -import { ThemeProvider, createTheme } from "@mui/material/styles"; +import ProximaSoft from "@assets/font/ProximaSoft-Regular.woff2"; +import { + ThemeProvider, + createTheme, + StyledEngineProvider, +} from "@mui/material/styles"; import { ReactChildrenType } from "./type"; declare module "@mui/material/styles" { interface Palette { @@ -36,6 +41,25 @@ declare module "@mui/material/Button" { } } const theme = createTheme({ + typography: { + fontFamily: "Proxima Soft, Segoe UI Tahoma, Geneva, Verdana, sans-serif", + }, + components: { + MuiCssBaseline: { + styleOverrides: ` + @font-face { + font-family: 'Proxima Soft'; + font-style: normal; + font-display: swap; + font-weight: 400; + src: local('Proxima Soft Regular'), local('Proxima-Soft-Regular'), + url('@assets/font/ProximaSoft-Regular.woff2') format('woff2'), + url('@assets/font/ProximaSoft-Regular.woff') format('woff'), + url('@assets/font/ProximaSoft-Regular.ttf') format('truetype'); + } + `, + }, + }, palette: { luzao: { main: "#3dff9e", contrastText: "#fff" }, luzaoRed: { main: "#A0191D", contrastText: "#fff" }, @@ -48,7 +72,11 @@ const theme = createTheme({ }); const MUIThemePreview = ({ children }: ReactChildrenType) => { - return {children}; + return ( + + {children} + + ); }; export default MUIThemePreview; diff --git a/src/components/proview/type.tsx b/src/components/proview/type.tsx index 080be35..47577e6 100644 --- a/src/components/proview/type.tsx +++ b/src/components/proview/type.tsx @@ -1,5 +1,5 @@ import { ReactElement } from "react"; export type ReactChildrenType = { - children: ReactElement; + children: ReactElement | ReactElement[]; }; diff --git a/src/index.less b/src/index.less index d9516ef..6c8d898 100644 --- a/src/index.less +++ b/src/index.less @@ -1,3 +1,25 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + + +@layer utilities { + + /* Hide scrollbar for Chrome, Safari and Opera */ + .no-scrollbar::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + .no-scrollbar { + -ms-overflow-style: none; + /* IE and Edge */ + scrollbar-width: none; + /* Firefox */ + } +} + + * { box-sizing: border-box; padding: 0; @@ -20,7 +42,13 @@ font-style: normal; } + + body, html { - font-family: 'Proxima Soft'; + font-family: 'Proxima Soft', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +body { + overflow-y: scroll; } \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index ffa31f5..26a7ab3 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -13,12 +13,14 @@ import { Provider } from "react-redux"; import store from "@store/index"; //ployfill import "intersection-observer"; -import "./normalize.css"; import "loading-attribute-polyfill"; +//css +import "./normalize.css"; import "./index.less"; // sentry import * as Sentry from "@sentry/react"; import { BrowserTracing } from "@sentry/tracing"; +import SearchPage, { loader as SearchLoader } from "@routers/search"; if (!isdev && isrelease) { Sentry.init({ dsn: "https://086f27258cce4d28aacc8c2719a683fb@sentry.vtb.link/3", @@ -59,6 +61,12 @@ const router = createBrowserRouter([ path: "photo", element: , }, + { + //视频搜索展示页面 + path: "search", + element: , + loader: SearchLoader, + }, ], }, ], diff --git a/src/routers/index.tsx b/src/routers/index.tsx index 5d66e97..fcd2c18 100644 --- a/src/routers/index.tsx +++ b/src/routers/index.tsx @@ -1,3 +1,7 @@ +/** + * 此页面作废 + */ + export default function Index() { return

这里是首页

; } diff --git a/src/routers/layout/header.tsx b/src/routers/layout/header.tsx index c153dfb..c7c1dc3 100644 --- a/src/routers/layout/header.tsx +++ b/src/routers/layout/header.tsx @@ -1,12 +1,13 @@ import styles from "./layout.module.less"; import LOGO from "./logo"; -import RouterNav from "./routernav"; import { useAppDispatch } from "@store/hooks"; import { useLocation } from "react-router-dom"; -import { useEffect, useMemo } from "react"; +import { memo, useEffect } from "react"; import { changeLoadingCauseByUrl } from "@store/loading"; import { routerNameToLoading } from "@utils/router"; import { styled } from "@mui/material"; +import Search from "./search"; +import PCRightMore from "./rightMore/index"; export default function Header() { const dispatch = useAppDispatch(), location = useLocation(); @@ -17,21 +18,33 @@ export default function Header() { }) ); }, [location.pathname]); - const JSXRes = useMemo( - () => ( - - - - - ), - [] - ); - return <>{JSXRes}; + return ; } -const Header_header = styled("header")(({ theme }) => ({ + +const ReactiveHeader = memo(() => { + return ( +
+ {/* 手机端 */} +
+ +
+ {/* pc端和平板端header部 */} + +
+ +
+
+ +
+
+ +
+
+
+ ); +}); + +const Header_content = styled("div")(({ theme }) => ({ flexDirection: "row", - [theme.breakpoints.down("sm")]: { - flexDirection: "row-reverse", - justifyContent: "flex-end", - }, + justifyContent: "space-between", })); diff --git a/src/routers/layout/index.tsx b/src/routers/layout/index.tsx index 78c1011..ffdf07c 100644 --- a/src/routers/layout/index.tsx +++ b/src/routers/layout/index.tsx @@ -1,10 +1,12 @@ import { Flipped, Flipper } from "react-flip-toolkit"; -import { Outlet } from "react-router-dom"; +import { Outlet, useMatch } from "react-router-dom"; import Header from "./header"; -import Header_Nav from "./nav"; import { useAppSelector } from "@store/hooks"; import { selectNavMoreShowed } from "@store/device/index"; +import ArrowOutwardIcon from "@mui/icons-material/ArrowOutward"; +import { Link } from "@mui/material"; import styles from "./layout.module.less"; +import Header_Nav from "./nav"; export default function Layout() { const showed = useAppSelector(selectNavMoreShowed); return ( @@ -21,12 +23,11 @@ export default function Layout() { }, }} > +
+ +
- - - +
@@ -36,3 +37,33 @@ export default function Layout() { ); } + +const useMatchUrls = (urls: string[]) => urls.map((item) => useMatch(item)); + +const FixedNav = () => { + const urls = useMatchUrls(["/", "/video", "/photo"]), + shouldShowNav = urls.some((item) => item !== null); + return ( + <> + {shouldShowNav && ( +
+ +
+ )} + + ); +}; + +export const ImportTantInfo = () => ( + <> + + 征集小队长生贺视频 + + + +); diff --git a/src/routers/layout/layout.module.less b/src/routers/layout/layout.module.less index 06ea5b4..0a22a97 100644 --- a/src/routers/layout/layout.module.less +++ b/src/routers/layout/layout.module.less @@ -1,6 +1,5 @@ .container { position: relative; - } .nav { @@ -13,7 +12,6 @@ .header { max-width: 1440px; margin: 0 auto; - padding-top: 10px; display: flex; align-items: center; background-color: #fff; diff --git a/src/routers/layout/logo/index.tsx b/src/routers/layout/logo/index.tsx index 61129b2..710cbc7 100644 --- a/src/routers/layout/logo/index.tsx +++ b/src/routers/layout/logo/index.tsx @@ -1,12 +1,16 @@ -import { Button, Badge } from "@mui/material"; +import { Button, Badge, Menu, MenuItem } from "@mui/material"; +import HelpOutlineIcon from "@mui/icons-material/HelpOutline"; import { useState, useMemo, FC } from "react"; -import { H1, Explain, Yituo } from "./modal"; +import { Explain, Yituo } from "./modal"; import styles from "./logo.module.less"; import { Storage } from "../tools"; - +import { useScreenSize } from "@components/proview/screenSize"; +import { Link, useMatch } from "react-router-dom"; +import { RouterList } from "../routernav/index"; +import React from "react"; const QAStorage = new Storage("QAUpdate"); //暂时先这样 -const _qa_update_time = `2023-2-2`; +const _qa_update_time = `2023-3-1`; const useCheckQANews = () => { const local_qa_value = useMemo(() => { return QAStorage.getLocalStorage(""); @@ -20,35 +24,123 @@ const useCheckQANews = () => { }; export default function LOGO() { + const { lg } = useScreenSize(); + return ( +
+ +
+ {lg && } + {!lg && } +
+
+ ); +} + +const LGRouterListAndQA = () => { + const [anchorEl, setAnchorEl] = React.useState(null), + handleClick = (event: React.MouseEvent) => + setAnchorEl(event.currentTarget), + handleClose = () => setAnchorEl(null); + const open = Boolean(anchorEl); + return ( + <> +
+ + + {RouterList.slice(0, 2).map((item) => ( + + + + ))} + +
+ + ); +}; +export const AboutUSButton = () => { const [open, set] = useState(false); const [shouldShowNews, handlerReadedNews] = useCheckQANews(); - const handlerClick = () => { + const handlerClick = (event: React.MouseEvent) => { + event.stopPropagation(); set((open) => !open); handlerReadedNews(); }; return ( -
-

- EOEfans-web端 - - -

- + <> + + void} /> + + ); +}; + +const useRouterMatchWithDefaultRouter = (urls: string[]) => { + const lists = urls.map((item) => useMatch(item)); + return lists.some((item) => item !== null); +}; +const RouterListAndQA = () => { + const isVideoPage = useRouterMatchWithDefaultRouter(["/", "/video"]), + isPhotoPage = useRouterMatchWithDefaultRouter(["/photo"]), + isActive = (label: string) => { + if ( + (label === "视频" && isVideoPage) || + (label === "图片" && isPhotoPage) + ) { + return true; + } + return false; + }; + return ( +
+ {RouterList.slice(0, 2).map((item) => ( + + + + ))}
); -} +}; const Show_news: FC<{ visible: boolean }> = ({ visible }) => ( void }> = ( @@ -25,142 +26,122 @@ export const Explain: FC<{ open: boolean; handlerClick: () => void }> = ( ); -export const H1 = styled("h1")(({ theme }) => ({ - fontSize: "24px", - [theme.breakpoints.down("sm")]: { - fontSize: "15px", +const QALists: { question: ReactElement; answer: ReactElement }[] = [ + { + question: <>露早tag为什么不是应援色?, + answer: ( + <> + 露早GOGO的应援色为 + + #3dff9e + + ,tag字面显示不明显,所以更换为黑露早形态的 + #A0191D + + ), + }, + { + question: <>如何进行用户反馈?, + answer: ( + <> + 请前往 + + eoefans反馈 + + + ), + }, + { + question: <>图片页图片太小了?, + answer: ( + <> + 图片页可点击图片进入放大镜模式,支持手势返回和空白处返回;可使用双指放大对图片大小进行调整。 + + ), }, -})); + { + question: <>搜索没有想要的结果?, + answer: ( + <> + 目前搜索仅支持全字匹配,请确保输入信息完整。另搜索结果已将某些视频过滤。 + + ), + }, +]; export const QA = () => (
    -
  • -

    - Q: - 为什么界面这么丑? -

    -

    - A: - web端没有UI捏🙇‍♂️🙇‍♂️🙇‍♂️果咩。 -

    -
  • -
  • -

    - Q: - 如何查找我想看的视频类型? -

    -

    - A: - - 😩目前只能通过点击下方tag栏进行查询,其中各分区、原创和转载、 - 最新发布和最多播放互斥外其他tag皆满足异或查询。 -
    - 🤔tag排序不是固定的,可以使用鼠标或者触摸按住tag半秒后进行移动。 -
    - 🤗可以自定义任何你想要的tag栏顺序,下一次访问也有效。 -
    -

    -
  • -
  • -

    - Q: - 露早tag为什么不是应援色? -

    -

    - A: - - 露早GOGO的应援色为 - - #3dff9e - - ,tag字面显示不明显,所以更换为黑露早形态的 - #A0191D - -

    -
  • -
  • -

    - Q: - 如何进行用户反馈? -

    -

    - A: - - 请前往 - - eoefans反馈 - - -

    -
  • -
  • -

    - Q: - 图片页图片太小了? -

    -

    - A: - - 图片页可点击图片进入放大镜模式,支持手势返回和空白处返回;可使用双指放大对图片大小进行调整。 - -

    -
  • + {QALists.map((item, index) => ( +
  • +

    + Q: + {item.question} +

    +

    + A: + {item.answer} +

    +
  • + ))}
); export const Yituo: FC<{ height: number | string; width: number | string; + children?: ReactElement; }> = ({ height, width }) => ( - - 芝士蛞蝓 - + + + 芝士蛞蝓 + + + + + + + - - - - - - - + + ); diff --git a/src/routers/layout/nav/VideoTools.ts b/src/routers/layout/nav/VideoTools.ts index 4b8c25e..10ee1c6 100644 --- a/src/routers/layout/nav/VideoTools.ts +++ b/src/routers/layout/nav/VideoTools.ts @@ -112,6 +112,18 @@ export type VideoNavQueryItemType = { }; export type NavListItemType = VideoNavQueryItemType | NavRouterItemType; const nav_tag_list_no_id: Omit[] = [ + { + type: "query", + query: "最新发布", + queryType: "order", + queryString: "pubdate", + }, + { + type: "query", + query: "最多播放", + queryType: "order", + queryString: "view", + }, { type: "query", query: "露早", @@ -184,18 +196,6 @@ const nav_tag_list_no_id: Omit[] = [ queryType: "copyright", queryString: "2", }, - { - type: "query", - query: "最新发布", - queryType: "order", - queryString: "pubdate", - }, - { - type: "query", - query: "最多播放", - queryType: "order", - queryString: "view", - }, ], video_query_nav_list = nav_tag_list_no_id.map((item) => ({ ...item, diff --git a/src/routers/layout/nav/index.tsx b/src/routers/layout/nav/index.tsx index 1375210..d9f6f5f 100644 --- a/src/routers/layout/nav/index.tsx +++ b/src/routers/layout/nav/index.tsx @@ -1,4 +1,4 @@ -import { Stack } from "@mui/material"; +import { Chip, Stack } from "@mui/material"; import Button from "@mui/lab/LoadingButton"; import { useInView } from "react-intersection-observer"; import SegmentIcon from "@mui/icons-material/Segment"; @@ -45,7 +45,7 @@ import { selectVideoActiveTags, } from "@store/tags/index"; -function useSelectList() { +export function useTagSelectList() { const { pathname } = useLocation(), flag = pathname === "/photo", storageSelect = flag ? PhotoNavStorage : VideoNavStorage; @@ -55,8 +55,13 @@ function useSelectList() { return { navLists, setLists, storageSelect }; } -export default function Header_Nav() { - const { navLists, setLists, storageSelect } = useSelectList(); +type HeaderNavType = { + shouldShow?: boolean; +}; + +export default function Header_Nav(props: HeaderNavType) { + const { shouldShow = false } = props; + const { navLists, setLists, storageSelect } = useTagSelectList(); //tag区是否展开 const showed = useAppSelector(selectNavMoreShowed); //拖拽事件绑定 @@ -114,9 +119,10 @@ export default function Header_Nav() { @@ -174,7 +180,7 @@ const NavItem: FC = memo( transition, }; return ( - +
@@ -213,35 +219,51 @@ const NavTagChipItem: FC = memo( dispatch(addTagFunc(props)); } }; - //@ts-ignore - const color = nameToColor[props.query] || "info"; + + const styleColor = handleSetSpecialProps( + props.query, + "rgb(55 65 81)", + "rgb(96 165 250)", + clicked + ); return ( - + /> ); } ); +/** + * +${ + loading ? "cursor-wait pointer-events-none" : "cursor-pointer" + } + */ + +const handleSetSpecialProps = ( + query: string, + defaultColor: string, + activeColor: string, + clicked: boolean +) => { + //@ts-ignore + const color = nameToColor[query] || defaultColor, + renderColor = (activecolor: string) => (clicked ? activecolor : color), + styleColor = color === defaultColor ? renderColor(activeColor) : color; + return styleColor; +}; + const nameToColor = { - 露早: "luzaoRed", - 柚恩: "youen", - 莞儿: "waner", - 米诺: "minuo", - 虞莫: "yumo", + 露早: "#A0191D", + 柚恩: "#EB6346", + 莞儿: "#1eafe4", + 米诺: "#f068B0", + 虞莫: "#b77fdd", }; diff --git a/src/routers/layout/nav/nav.module.less b/src/routers/layout/nav/nav.module.less index 9e58db2..91e2065 100644 --- a/src/routers/layout/nav/nav.module.less +++ b/src/routers/layout/nav/nav.module.less @@ -18,9 +18,6 @@ @itemMarginHalfWidth: 8px; @itemMarginHalfHeight: 4px; - &>* { - margin: @itemMarginHalfHeight @itemMarginHalfWidth; - } &[data-showed=true] { &>span:nth-last-child(2) { diff --git a/src/routers/layout/rightMore/index.tsx b/src/routers/layout/rightMore/index.tsx new file mode 100644 index 0000000..9d8991c --- /dev/null +++ b/src/routers/layout/rightMore/index.tsx @@ -0,0 +1,109 @@ +import React, { FC, ReactElement } from "react"; +import MoreVertIcon from "@mui/icons-material/MoreVert"; +import LaunchIcon from "@mui/icons-material/Launch"; +import { Button, Link, Popover } from "@mui/material"; +import { TabProps } from "../routernav"; +import { AboutUSButton } from "../logo"; +import { usePopoverConfig } from "@utils/hooks/popover"; +export default function PCRightMore() { + const { open, anchorEl, handleClick, handleClose } = + usePopoverConfig(); + return ( +
+ +
+ + +
+ 快捷跳转} + > +
+ {GroupLists.map((item, key) => ( + + {item.label} + + + ))} +
+
+ + + 敬请期待 + + +
+
+
+
+ ); +} +const GroupLists: TabProps[] = [ + { + label: "露早", + to: "1669777785", + }, + { + label: "虞莫", + to: "1811071010", + }, + { + label: "莞儿", + to: "1875044092", + }, + { + label: "柚恩", + to: "1795147802", + }, + { + label: "米诺", + to: "1778026586", + }, + { + label: "官号", + to: "2018113152", + }, + { + label: "录播组", + to: "3461563583302074", + }, +]; +type PopoverItemProps = { + title: string | ReactElement; + children: ReactElement; +}; +const PopoverItem: FC = (props) => ( +
+

+ {props.title} +

+ {props.children} +
+); diff --git a/src/routers/layout/rightSide/index.tsx b/src/routers/layout/rightSide/index.tsx deleted file mode 100644 index aeec436..0000000 --- a/src/routers/layout/rightSide/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { Avatar } from "@mui/material"; - -export default function RightSide() { - return App; -} diff --git a/src/routers/layout/routernav/index.tsx b/src/routers/layout/routernav/index.tsx index 88172e4..f4e672c 100644 --- a/src/routers/layout/routernav/index.tsx +++ b/src/routers/layout/routernav/index.tsx @@ -1,61 +1,146 @@ -import { Tab, Tabs } from "@mui/material"; -import { useState, useEffect, useCallback, memo } from "react"; -import { Link, useLocation } from "react-router-dom"; -import { useScreenSize } from "@components/proview/screenSize"; -import MenuRouter from "./menu"; - -export const RouterList: TabProps[] = [ +import { Drawer } from "@mui/material"; +import PhotoIcon from "@mui/icons-material/Photo"; +import VideoLibraryIcon from "@mui/icons-material/VideoLibrary"; +import { useState, FC, ReactElement } from "react"; +import { Link, useMatch } from "react-router-dom"; +import CloseIcon from "@mui/icons-material/Close"; +import Header_Nav from "../nav"; +import { ImportTantInfo } from ".."; +export const RouterList: (TabProps & { startICon: ReactElement })[] = [ { label: "视频", to: "/video", + startICon: , }, { label: "图片", to: "/photo", + startICon: , }, ]; export default function RouterNav() { - const { pathname } = useLocation(), - handler = () => (pathname === "/photo" ? 1 : 0); - const [value, set] = useState(handler), - changehandler = useCallback(() => set(handler), [handler]); - useEffect(() => { - changehandler(); - }, [pathname]); - const { sm } = useScreenSize(); + const [show, set] = useState(false), + handlerChangeShow = () => set((item) => !item); return ( <> - {sm ? ( - - ) : ( - - {RouterList.map((item, index) => ( - - ))} - - )} +
+ +
+ +
+
+ +
+ +
+ +
+
+ + + +
敬请期待
+
+
+
); } + +type DraerNavContentType = { + title: string; + children: React.ReactNode; +}; +type DrawerHrefItemType = { + onClose: () => void; + data: { + label: string; + to: string; + }[]; +} & Pick; + +const DrawerNavItem: FC> = ({ title }) => { + const shouldShow = ["/", "/video", "/photo"].includes( + window.location.pathname + ); + return ( + <> + {shouldShow && ( + + + + )} + + ); +}; + +const DrawerHrefLink: FC> = ( + props +) => { + const { to, onClose, label } = props; + const isMatch = useMatch(props.to); + return ( + + {label} + + ); +}; + +const DrawerHrefItem: FC = ({ title, data, onClose }) => ( + +
+ {data.map((item, key) => ( + + ))} +
+
+); + +const DrawerNavContent: FC = (props) => ( +
+

+ {props.title} +

+ {props.children} +
+); + export type TabProps = { label: string; to: string; }; -export function TabLink(props: TabProps) { - const { pathname } = useLocation(); - return ( - - ); -} + +const ConfigSVG = () => ( + + + +); diff --git a/src/routers/layout/routernav/menu.tsx b/src/routers/layout/routernav/menu.tsx deleted file mode 100644 index 3bb2b2d..0000000 --- a/src/routers/layout/routernav/menu.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { Menu, Button, MenuItem } from "@mui/material"; -import { Omit } from "@utils/index"; -import PopupState, { bindTrigger, bindMenu } from "material-ui-popup-state"; -import { RouterList, TabProps, TabLink } from "."; -export default function MenuRouter() { - return ( - - {(popupState) => ( - <> - - - {RouterList.map((item, index) => ( - - ))} - - - )} - - ); -} -function RouterItem(props: TabProps & { onClick: () => void }) { - return ( - - - - ); -} diff --git a/src/routers/layout/search/index.tsx b/src/routers/layout/search/index.tsx index 9cd32ff..f94e7cb 100644 --- a/src/routers/layout/search/index.tsx +++ b/src/routers/layout/search/index.tsx @@ -1,36 +1,16 @@ -import SearchSharpIcon from "@mui/icons-material/SearchSharp"; -import { Form } from "react-router-dom"; -import styles from "./search.module.less"; -import { useSearchFocus } from "@components/proview/searchFocus"; -import { Flipped } from "react-flip-toolkit"; +import { Form, useLocation, useNavigate } from "react-router-dom"; +import PCSearch from "./pc"; +import PhoneSearch from "./phone"; +// todo 增加高级搜索以及手机端的搜索 export default function Search() { - const { focused, bind } = useSearchFocus(); return ( <> - -
-
-
- -
-
- -
-
-
-
+
+ +
+
+ +
); } diff --git a/src/routers/layout/search/pc/context.tsx b/src/routers/layout/search/pc/context.tsx new file mode 100644 index 0000000..e467a6b --- /dev/null +++ b/src/routers/layout/search/pc/context.tsx @@ -0,0 +1,8 @@ +import { createContext, useContext } from "react"; +type InputWrapperContextType = { + anchorEl: HTMLElement | null; +}; +export const InputWrapperContext = createContext({ + anchorEl: null, +}); +export const useGetInputWrapper = () => useContext(InputWrapperContext); diff --git a/src/routers/layout/search/pc/data.ts b/src/routers/layout/search/pc/data.ts new file mode 100644 index 0000000..1a9839c --- /dev/null +++ b/src/routers/layout/search/pc/data.ts @@ -0,0 +1,28 @@ +import { phoneMoreNameAndFaceUrls } from "../phone/url"; + +export type renderSuggestItemLists = { label: string; value: string }[]; + +//tag列 +export const pcSuggestTagLists: renderSuggestItemLists = [ + "莞儿睡不醒", + "露早GOGO", + "米诺高分少女", + "虞莫MOMO", + "柚恩不加糖", + "EOE组合", + "早莞在一起", + "莞柚引力", + "一莞米", + "虞舟唱莞", + "早柚", + "西米露", + "早有虞谋", + "米哈柚", + "虞香柚丝", + "米虞说的道理", + "虞米之乡", +].map((item) => ({ label: item, value: item })); + +//up列 +export const pcSuggestNameLists: renderSuggestItemLists = + phoneMoreNameAndFaceUrls; diff --git a/src/routers/layout/search/pc/hooks.tsx b/src/routers/layout/search/pc/hooks.tsx new file mode 100644 index 0000000..e11d88d --- /dev/null +++ b/src/routers/layout/search/pc/hooks.tsx @@ -0,0 +1,28 @@ +import { + changeSearchMode, + SelectModeType, + selectSearchMode, +} from "@store/device"; +import { useAppDispatch, useAppSelector } from "@store/hooks"; +import { useRef, useImperativeHandle } from "react"; + +export const useSearchMode = () => { + const searchMode = useAppSelector(selectSearchMode); + const dispatch = useAppDispatch(), + handlerChangeSearchMode = (name: SelectModeType) => + dispatch(changeSearchMode(name)); + return { searchMode, handlerChangeSearchMode }; +}; +export const useBackRef = (ref: React.Ref) => { + const inputRef = useRef(null), + handerfocus = () => inputRef.current?.focus(); + //@ts-ignore + useImperativeHandle(ref, () => { + return { + getValue() { + return inputRef.current?.value; + }, + }; + }); + return { inputRef, handerfocus }; +}; diff --git a/src/routers/layout/search/pc/index.tsx b/src/routers/layout/search/pc/index.tsx new file mode 100644 index 0000000..09f4637 --- /dev/null +++ b/src/routers/layout/search/pc/index.tsx @@ -0,0 +1,30 @@ +import { useSearchFocus } from "@components/proview/searchFocus"; +import { useEffect } from "react"; +import SelectModeCom from "./selectModeNav"; +import Search from "./search"; + +export default function PCSearch() { + const { focused, bind } = useSearchFocus(), + { onBlur } = bind; + useEffect(() => { + if (focused) { + window.addEventListener("scroll", onBlur, { once: true }); + } + }, [focused]); + return ( +
+ + +
+
+ ); +} diff --git a/src/routers/layout/search/pc/modal.tsx b/src/routers/layout/search/pc/modal.tsx new file mode 100644 index 0000000..b3ad8b7 --- /dev/null +++ b/src/routers/layout/search/pc/modal.tsx @@ -0,0 +1 @@ +export default function PCSearchAdvanceLikeModal() {} diff --git a/src/routers/layout/search/pc/pc.module.less b/src/routers/layout/search/pc/pc.module.less new file mode 100644 index 0000000..d828f32 --- /dev/null +++ b/src/routers/layout/search/pc/pc.module.less @@ -0,0 +1,81 @@ +.advanceSearch { + display: flex; + flex-grow: 1; + + &.focus { + .itemPadding { + padding: 12px 32px; + } + + span+input { + width: 100%; + } + + .SearchItem:hover { + background-color: rgb(229, 231, 235); + } + } + + &.blur { + transition: all 300ms ease; + + .item { + align-items: center; + justify-content: center; + + span { + transition: all 300ms ease; + font-size: 12px; + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; + max-width: 75px; + white-space: nowrap; + } + + span+input { + height: 0%; + width: 0%; + } + } + } + + .itemPadding { + transition: all 300ms ease; + } + + .item { + display: flex; + flex-direction: column; + + span { + padding-bottom: 2px; + font-size: 14px; + font-weight: 600; + } + + span+input { + transition: all 300ms ease; + background-color: transparent; + + &:focus-within { + outline: none; + } + } + } + + .SearchItem { + flex-grow: 1; + display: flex; + border-radius: 40px; + // transition: all 300ms ease; + } +} + +.commonRounded { + border-radius: 40px; +} + +.suggestMaxHeight { + max-height: calc(100vh - 200px); +} \ No newline at end of file diff --git a/src/routers/layout/search/pc/search.tsx b/src/routers/layout/search/pc/search.tsx new file mode 100644 index 0000000..5abb2a1 --- /dev/null +++ b/src/routers/layout/search/pc/search.tsx @@ -0,0 +1,315 @@ +import { useSearchFocus } from "@components/proview/searchFocus"; +import HighlightOffIcon from "@mui/icons-material/HighlightOff"; +import { useURLParams } from "@utils/hooks/url"; +import SearchIcon from "@mui/icons-material/Search"; +import styles from "../search.module.less"; +import pcStyles from "./pc.module.less"; +import { useBackRef, useSearchMode } from "./hooks"; +import { useNavigate } from "react-router-dom"; +import React, { FC, forwardRef, ReactElement, useRef } from "react"; +export default function Search() { + const contentRef = useRef(null); + const { focused, bind } = useSearchFocus(); + const { onFocus } = bind; + const { searchMode } = useSearchMode(); + return ( + <> + {/* 包裹层 */} +
+ {/* 搜索栏内容层 */} +
+ + {searchMode === "搜索tag" && } + {searchMode === "搜索更多" && } + +
+
+ + ); +} + +const CloseSvg: FC<{ onClick: () => void; style?: React.CSSProperties }> = ( + props +) => ( +
+ + + + +
+); + +//通用按钮 +const SearchButton: FC<{ onSubmit?: () => void }> = ({ onSubmit }) => { + const { focused } = useSearchFocus(); + return ( + <> + + + ); +}; + +import { usePopoverConfig } from "@utils/hooks/popover"; +import { + addPCNameHistory, + addPCTagHistory, + PCNameSuggest, + PCTagSuggest, +} from "./searchSuggest"; +import { InputWrapperContext } from "./context"; + +//普通搜索 +const NormalSearch = () => { + const inputRef = useRef(null); + const { bind } = useSearchFocus(), + { onBlur } = bind; + const [tag] = useURLParams(["tag"]); + const { open, handleClick } = usePopoverConfig("target"); + const navigate = useNavigate(), + handlerNavigate = (value: string) => { + navigate(`/search?tag=${value}`); + onBlur(); + }, + handlerSubmit = () => { + const value = inputRef.current!.value; + handlerNavigate(value); + }, + handerHistorySubmit = (value: string) => { + handlerNavigate(value); + addPCTagHistory(value); + }; + return ( + <> + { + if (event.key === "Enter") { + handlerSubmit(); + } + }} + /> + + + + ); +}; + +//高级搜索 +const AdvanceSearch = forwardRef(function Advance(props, ref) { + const [tag, name] = useURLParams(["tag", "name"]); + const { focused, bind } = useSearchFocus(), + { onBlur } = bind; + const nameRef = useRef(null), + tagRef = useRef(null); + const navigate = useNavigate(), + handlerNavigate = (tag: string, name: string) => { + navigate(`/search?tag=${tag}&name=${name}`); + onBlur(); + }, //@ts-ignore + getTagValue = () => tagRef.current!.getValue(), + //@ts-ignore + getNameValue = () => nameRef.current!.getValue(), + handlerSubmit = () => { + navigate(`/search?tag=${getTagValue()}&name=${getNameValue()}`); + onBlur(); + }, + handlerTagHistorySubmit = (tag: string) => { + handlerNavigate(tag, getNameValue()); + addPCTagHistory(tag); + }, + handlerNameHistorySubmit = (name: string) => { + handlerNavigate(getTagValue(), name); + addPCNameHistory(name); + }; + const tagSuggestOption = usePopoverConfig("target"), + nameSuggestOption = usePopoverConfig("target"), + tagItemCallback = (event: React.MouseEvent) => { + nameSuggestOption.handleClose(); + tagSuggestOption.handleClick(event); + }, + nameItemCallback = (event: React.MouseEvent) => { + tagSuggestOption.handleClose(); + nameSuggestOption.handleClick(event); + }; + return ( +
+ + + + {/* 等待接口更新 */} + {/* */} + + + +
+ ); +}); + +type AdvanceItemProps = { + title: string; + inputDefaultValue: string; + onSubmit: () => void; + children?: ReactElement | ReactElement[]; + clickCallback?: (event: React.MouseEvent) => void; +}; + +const AdvanceSearchItem = forwardRef( + (props, ref) => { + const { inputRef, handerfocus } = useBackRef(ref); + const { focused } = useSearchFocus(); + return ( + <> +
{ + handerfocus(); + if (props.clickCallback) { + props.clickCallback(event); + } + }} + > + {props.title} + { + if (event.key === "Enter") { + props.onSubmit(); + } + }} + /> + {focused && ( + { + inputRef.current!.value = ""; + }} + style={{ + top: "50%", + right: "16px", + transform: "translateY(-12px)", + }} + /> + )} + + {props.children} +
+ + + ); + } +); +const AdvanceSearchLastItem = forwardRef< + HTMLInputElement, + AdvanceItemProps & { onSubmit: () => void } +>((props, ref) => { + const { inputRef, handerfocus } = useBackRef(ref); + const { focused } = useSearchFocus(); + return ( + <> +
{ + handerfocus(); + if (props.clickCallback) { + props.clickCallback(event); + } + }} + > +
+ {props.title} + { + if (event.key === "Enter") { + props.onSubmit(); + } + }} + /> + {focused && ( + { + inputRef.current!.value = ""; + }} + style={{ + top: "50%", + right: "16px", + transform: "translateY(-12px)", + }} + /> + )} + {props.children} +
+ +
+ + ); +}); diff --git a/src/routers/layout/search/pc/searchSuggest.tsx b/src/routers/layout/search/pc/searchSuggest.tsx new file mode 100644 index 0000000..ceb36b2 --- /dev/null +++ b/src/routers/layout/search/pc/searchSuggest.tsx @@ -0,0 +1,212 @@ +import { useSearchFocus } from "@components/proview/searchFocus"; +import HistoryToggleOffIcon from "@mui/icons-material/HistoryToggleOff"; +import TagIcon from "@mui/icons-material/Tag"; +import AccessibilityNewIcon from "@mui/icons-material/AccessibilityNew"; +import { Popper } from "@mui/material"; +import { Storage } from "@routers/layout/tools"; +import { useURLParams } from "@utils/hooks/url"; +import { FC, ReactElement, useEffect, useMemo, useState } from "react"; +import { useGetInputWrapper } from "./context"; +import styles from "./pc.module.less"; +import { + renderSuggestItemLists, + pcSuggestTagLists, + pcSuggestNameLists, +} from "./data"; +type PCTagSuggestProps = { + ClickCallback: (value: string) => void; +} & SuggestPopperProps; + +const PCTagStorage = new Storage("pcTagHistorys"); +export const addPCTagHistory = (value: string) => { + const oldHistory = PCTagStorage.getLocalStorage([]); + PCTagStorage.setLocalstorage([value, ...oldHistory.slice(0, 4)]); +}; +const usePCTagHistory = () => { + const local_history: renderSuggestItemLists = PCTagStorage.getLocalStorage( + [] + ).map((item) => ({ label: item, value: item })); + return local_history; +}; + +const useSuggestOption = (open: boolean) => { + const [fixedOpen, setOpen] = useState(false); + const { focused } = useSearchFocus(); + const handlerChangeOpen = useMemo(() => { + let flag = false; + return () => { + if (!flag) { + flag = true; + return setTimeout(() => { + setOpen(true); + }, 300); + } else { + setOpen(true); + } + }; + }, [focused]); + useEffect(() => { + //@ts-ignore + let setId; + if (focused && open) { + setId = handlerChangeOpen(); + } else { + clearTimeout(setId); + setOpen(false); + } + return () => { + //@ts-ignore + clearTimeout(setId); + }; + }, [focused, open]); + return [fixedOpen]; +}; + +export const PCTagSuggest: FC = ({ + open, + ClickCallback, +}) => { + const [tag] = useURLParams(["tag"]); + const history_tag = usePCTagHistory(); + const [fixedOpen] = useSuggestOption(open); + return ( + + + + 历史记录 + + } + dataList={history_tag} + feedbackMsg='暂无数据' + clickCallBack={ClickCallback} + activeValue={tag} + /> + + + tag + + } + dataList={pcSuggestTagLists} + clickCallBack={ClickCallback} + activeValue={tag} + /> + + ); +}; + +const PCNameStorage = new Storage("pcNameHistorys"); +export const addPCNameHistory = (value: string) => { + const oldHistory = PCNameStorage.getLocalStorage([]); + PCNameStorage.setLocalstorage([value, ...oldHistory.slice(0, 4)]); +}; +const usePCNameHistory = () => { + const local_history: renderSuggestItemLists = PCNameStorage.getLocalStorage( + [] + ).map((item) => ({ label: item, value: item })); + return local_history; +}; +export const PCNameSuggest: FC = ({ + open, + ClickCallback, +}) => { + const [name] = useURLParams(["name"]); + const history_name = usePCNameHistory(); + const [fixedOpen] = useSuggestOption(open); + return ( + + + + 历史记录 + + } + dataList={history_name} + feedbackMsg='暂无数据' + clickCallBack={ClickCallback} + activeValue={name} + /> + + + 作者 + + } + dataList={pcSuggestNameLists} + clickCallBack={ClickCallback} + activeValue={name} + /> + + ); +}; + +type SuggestPopperProps = { + open: boolean; + children?: ReactElement | ReactElement[]; +}; +const SuggestPopper: FC = (props) => { + const { anchorEl } = useGetInputWrapper(); + return ( + +
+ {props.children} +
+
+ ); +}; + +type SuggestItemProps = { + title: string | ReactElement; + dataList: renderSuggestItemLists; + feedbackMsg?: string; + activeValue: string; + clickCallBack: (value: string) => void; +}; +const SuggestItem: FC = ({ + title, + dataList, + clickCallBack, + activeValue, + feedbackMsg, +}) => { + const isActive = (value: string) => value === activeValue; + return ( +
+
+ {title} +
+
+ {dataList.map(({ label, value }, key) => ( + + ))} + {!dataList.length && ( +

+ {feedbackMsg} +

+ )} +
+
+ ); +}; diff --git a/src/routers/layout/search/pc/selectModeNav.tsx b/src/routers/layout/search/pc/selectModeNav.tsx new file mode 100644 index 0000000..db00d77 --- /dev/null +++ b/src/routers/layout/search/pc/selectModeNav.tsx @@ -0,0 +1,41 @@ +import { selectModeList } from "@store/device"; +import { FC } from "react"; +import styles from "../search.module.less"; +import { useSearchMode } from "./hooks"; +/** + * 搜索模式选择 + */ +export default function SelectModeCom() { + const { searchMode, handlerChangeSearchMode } = useSearchMode(); + return ( +
+ {selectModeList.map((item, key) => ( + + ))} +
+ ); +} + +type SelectButtonType = { + selected: boolean; + label: string; + onChange: () => void; +}; + +const SelectButton: FC = ({ selected, label, onChange }) => { + return ( +
+ +
+ ); +}; diff --git a/src/routers/layout/search/phone/index.tsx b/src/routers/layout/search/phone/index.tsx new file mode 100644 index 0000000..250a2dd --- /dev/null +++ b/src/routers/layout/search/phone/index.tsx @@ -0,0 +1,36 @@ +import RouterNav from "@routers/layout/routernav"; +import SearchIcon from "@mui/icons-material/Search"; +import PhotoModalSearch from "./modal"; +import { useState } from "react"; +export default function PhoneSearch() { + // 这个只作为因子引出真实的界面,不应该承担任何搜索功能 + const [open, setModal] = useState(false); + const SearchProps = { + open, + onClose: () => { + setTimeout(() => { + setModal(false); + }, 150); + }, + }; + return ( +
+ {/* 点击这里向下拉取搜索栏 */} + +
+ +
+ 想看什么 + 点击这里·马上看到 +
+
+ +
+ ); +} diff --git a/src/routers/layout/search/phone/item.tsx b/src/routers/layout/search/phone/item.tsx new file mode 100644 index 0000000..e39cbd1 --- /dev/null +++ b/src/routers/layout/search/phone/item.tsx @@ -0,0 +1,132 @@ +import SearchIcon from "@mui/icons-material/Search"; +import { FC, forwardRef, useState } from "react"; +import { NameAndFaceUrlsType } from "./url"; +type PhoneSearchItemProps = { + open: boolean; + onOpen?: () => void; + openTitle: string; + inputDefaultValue: string; + onCompleteSearch: (() => void) | false; + nextCallback: () => void; + closeTitle: string; + UrlLists: NameAndFaceUrlsType; +}; + +export const PhoneSearchItem = forwardRef< + HTMLInputElement, + PhoneSearchItemProps +>((props, ref) => { + const { + closeTitle, + inputDefaultValue, + onCompleteSearch, + nextCallback, + UrlLists, + open, + onOpen, + openTitle, + } = props; + const [inputvalue, setValue] = useState(inputDefaultValue); + const handerEnter = (callback?: Function) => { + callback && callback(); + setTimeout(() => { + Promise.resolve().then(() => { + if (onCompleteSearch) { + onCompleteSearch(); + } else { + nextCallback(); + } + }); + }, 0); + }; + const handlerImgClick = (label: string) => + handerEnter(() => setValue(() => label)); + return ( +
+
+ +
+
+
{openTitle}
+
+ + setValue(() => event.target.value)} + onKeyDown={(event) => { + if (event.key === "Enter") { + handerEnter(); + } + }} + /> +
+ +
+
+ ); +}); + +const ImgGally: FC< + Pick & { + onClick: (value: string) => void; + activeValue: string; + } +> = ({ UrlLists, onClick, activeValue }) => { + const isActive = (label: string) => label === activeValue; + return ( +
+ {UrlLists.map((item, index) => ( +
+ + + {item.label} + +
+ ))} +
+ ); +}; + +const CloseItem: FC<{ title: string; value: string; onClick?: () => void }> = ({ + title, + value, + onClick, +}) => { + return ( +
+

{title}

+

{value}

+
+ ); +}; diff --git a/src/routers/layout/search/phone/modal.tsx b/src/routers/layout/search/phone/modal.tsx new file mode 100644 index 0000000..839c5b1 --- /dev/null +++ b/src/routers/layout/search/phone/modal.tsx @@ -0,0 +1,150 @@ +import { Modal, Tab, Tabs } from "@mui/material"; +import { FC, useRef, useState } from "react"; +import { useSearchMode } from "../pc/hooks"; +import { PhoneSearchItem } from "./item"; +import { idolNameAndFaceUrls, phoneMoreNameAndFaceUrls } from "./url"; +import { useURLParams } from "@utils/hooks/url"; +import { useNavigate } from "react-router-dom"; +type PhotoModalSearchProps = { + open: boolean; + onClose: () => void; +}; +export default function PhotoModalSearch(props: PhotoModalSearchProps) { + const { open, onClose } = props; + const { searchMode } = useSearchMode(); + return ( + <> + + {/* 注意modal会把滚动条隐藏 */} +
+ {/* header */} +
+ + +
+ {/* content */} +
+ {searchMode === "搜索tag" && } + {searchMode === "搜索更多" && } +
+
+
+ + ); +} +type ModeComProps = { + onClose: () => void; +}; +const TagContentCom: FC = ({ onClose }) => { + const inputRef = useRef(null); + const [tag] = useURLParams(["tag"]); + const navigate = useNavigate(); + const handlerSubmit = () => { + const value = inputRef.current!.value; + navigate(`/search?tag=${value}`); + onClose(); + }; + const { searchMode } = useSearchMode(); + return ( +
+ {}} + closeTitle='标签' + UrlLists={idolNameAndFaceUrls} + /> +
+ ); +}; +const MoreContentCom: FC = ({ onClose }) => { + const [tag, name] = useURLParams(["tag", "name"]); + const { searchMode } = useSearchMode(); + const [activeLine, changeActiveLine] = useState("搜索tag"), + handerChangeActiveLine = (name: typeof searchMode) => + changeActiveLine(name); + const tagInputRef = useRef(null), + nameInputRef = useRef(null); + const navigate = useNavigate(); + const handlerSubmit = () => { + const tag = tagInputRef.current!.value, + name = nameInputRef.current!.value; + console.log({ tag, name }); + navigate(`/search?tag=${tag}&name=${name}`); + onClose(); + }; + return ( +
+ + {}} + closeTitle='用户' + UrlLists={phoneMoreNameAndFaceUrls} + /> +
+ ); +}; +// 选择栏 +const SearchHeader = () => { + const { searchMode, handlerChangeSearchMode } = useSearchMode(); + return ( + + + + + ); +}; +const CloseSVG: FC<{ onClose: () => void }> = ({ onClose }) => ( +
+ + + + +
+); diff --git a/src/routers/layout/search/phone/url.ts b/src/routers/layout/search/phone/url.ts new file mode 100644 index 0000000..a8fdf56 --- /dev/null +++ b/src/routers/layout/search/phone/url.ts @@ -0,0 +1,27 @@ +export const yumoFaceURL = `https://i2.hdslb.com/bfs/face/139f2dbd62f9f9343c1ace6c1b49c38a630bf0c7.jpg@240w_240h_1c_1s.webp`; +export const youenFaceURL = `https://i2.hdslb.com/bfs/face/388bb9976a9957aa9370e153e43b60111ef7ae1f.jpg@240w_240h_1c_1s.webp`; +export const luzaoFaceURL = `https://i0.hdslb.com/bfs/face/5d699ce6f66ce4770092ba19fcf7caec82e8f736.jpg@240w_240h_1c_1s.webp`; +export const wanerFaceURL = `https://i1.hdslb.com/bfs/face/4d36b041654ef91a0b2f7f34ca9ade33cdbf837e.jpg@240w_240h_1c_1s.webp`; +export const minuoFaceURl = `https://i2.hdslb.com/bfs/face/3da6145e81745cabd1f79b9c61772f884e783b7e.jpg@240w_240h_1c_1s.webp`; + +export type NameAndFaceUrlsType = { + label: string; + url: string; + value: string; +}[]; + +export const idolNameAndFaceUrls: NameAndFaceUrlsType = [ + { label: "露早", url: luzaoFaceURL, value: "露早GOGO" }, + { label: "虞莫", url: yumoFaceURL, value: "虞莫MOMO" }, + { label: "莞儿", url: wanerFaceURL, value: "莞儿睡不醒" }, + { label: "柚恩", url: youenFaceURL, value: "柚恩不加糖" }, + { label: "米诺", url: minuoFaceURl, value: "米诺高分少女" }, +]; + +export const lubozuFaceUrl = `https://i0.hdslb.com/bfs/face/4fb5beac7b6eff7981897176430df514b7201556.jpg@240w_240h_1c_1s.webp`; +const eoeGroupFaceUrl = `https://i0.hdslb.com/bfs/face/f0ac506bbfa4e4ce09729d424d28d2383e721ade.jpg@240w_240h_1c_1s.webp`; +export const phoneMoreNameAndFaceUrls: NameAndFaceUrlsType = [ + { label: "录播组", url: lubozuFaceUrl, value: "哎呀米诺录播组" }, + ...idolNameAndFaceUrls, + { label: "EOE组合", url: eoeGroupFaceUrl, value: "EOE组合" }, +]; diff --git a/src/routers/layout/search/search.module.less b/src/routers/layout/search/search.module.less index 98dd97f..a92fb52 100644 --- a/src/routers/layout/search/search.module.less +++ b/src/routers/layout/search/search.module.less @@ -1,80 +1,58 @@ .search-box { - position: relative; - z-index: 10; - margin: 0 8px; - min-width: 180px; - max-width: 500px; - width: 100%; + box-shadow: 0 1px 2px rgb(0 0 0 / 8%), 0 4px 12px rgb(0 0 0 / 5%); + border-radius: 40px; + border: 1px solid #DDD; + display: flex; + background-color: white; + max-width: 100%; + box-sizing: border-box; + justify-content: space-between; + align-items: stretch; + margin: auto; + width: 288px; + + &.focus { + width: 850px; + height: 65px; + } + - .search-form { - border-radius: 8px; + .search-button { + border-radius: 40px; + cursor: pointer; + color: white; + position: relative; + // margin: auto; + margin-top: auto; + margin-bottom: auto; display: flex; + justify-content: center; align-items: center; - height: 40px; - opacity: .9; - transition: background-color .3s; - background-color: #f1f2f3; - border: 1px solid #E3E5E7; - - &:hover { - background-color: #fff; - } - - .search-content { - flex: 1; - display: flex; - align-items: center; - position: relative; - padding: 0 8px; - margin-right: 8px; - height: 32px; - border: 2px solid transparent; - border-radius: 6px; - - .search-input { - flex: 1; - overflow: hidden; - padding-right: 8px; - border: none; - background-color: transparent; - box-shadow: none; - font-size: 14px; - line-height: 20px; - color: #61666D; - &:focus-visible { - outline: none; - } - } - } - - .search-btn { - display: flex; - margin: 0; - padding: 0; - align-items: center; - justify-content: center; - width: 32px; - height: 32px; - border: none; - border-radius: 6px; - cursor: pointer; - transition: background-color .3s; - - &:hover { - background-color: #E3E5E7; - } - } + } +} + +.pc-search { + transition-duration: 300ms; + display: flex; + flex-direction: column; + + &::after { + content: ''; + width: 100%; + max-width: 64px; + margin: 0 auto; + height: 2px; + background-color: currentColor; + transform: scaleX(0); + transition: transform 200ms ease; } - .form-active { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - background-color: #fff; - + &:hover::after { + transform: scaleX(1); + } - .search-content { - background-color: #f1f2f3; - } + &.active::after { + transform: scaleX(1); } } \ No newline at end of file diff --git a/src/routers/photo/item/index.tsx b/src/routers/photo/item/index.tsx index b507919..fd93a24 100644 --- a/src/routers/photo/item/index.tsx +++ b/src/routers/photo/item/index.tsx @@ -22,6 +22,7 @@ export default function PhotoCard(props: CardType) { url={`${images[0].src}@${250}w.webp`} {...Omit(images[0], "src")} {...resPorps} + title={"图片栏"} className={style["show-img"]} onClick={handlerChangeOpen} /> diff --git a/src/routers/search/hooks.tsx b/src/routers/search/hooks.tsx new file mode 100644 index 0000000..99297d1 --- /dev/null +++ b/src/routers/search/hooks.tsx @@ -0,0 +1,11 @@ +import { useScreenSize } from "@components/proview/screenSize"; +import { VideoListType } from "@routers/video/masonry"; +import { useAppSelector } from "@store/hooks"; +import { selectSearchingState } from "@store/loading"; +export const useSearchLoading = () => useAppSelector(selectSearchingState); + +export const useSearchShowState = (data: VideoListType) => { + const loading = useSearchLoading(), + isEmpty = data.length < 1; + return { loading, isEmpty }; +}; diff --git a/src/routers/search/index.tsx b/src/routers/search/index.tsx new file mode 100644 index 0000000..7fd2c8c --- /dev/null +++ b/src/routers/search/index.tsx @@ -0,0 +1,86 @@ +import { NormalVideoRes } from "@routers/video/masonry"; +import { + fetchVideohandler, + PickVideoRouterImageCardType, +} from "@routers/video/tools"; +import { useChangeLoading } from "@store/loading"; +import { nanoid } from "nanoid"; +import { useEffect, useState } from "react"; +import { useLoaderData } from "react-router-dom"; +import { useSearchShowState } from "./hooks"; +import { VideoListType } from "../video/masonry"; +import SelectNav from "./select"; +import { videoOrderType } from "@utils/fetch/fetchtype"; +import { OrderArr } from "./tool"; +type LoaderType = { + request: { + url: string; + }; +}; +export type PromiseType = Promise; +export type UnPromisify = T extends PromiseType ? U : never; +type LoaderReturnType = UnPromisify>; +export async function loader({ request }: LoaderType) { + let url = new URL(request.url), + tag = url.searchParams.get("tag"), + name = url.searchParams.get("name"); + let order = url.searchParams.get("order") as videoOrderType; + if (!OrderArr.includes(order)) { + order = "score"; + } + !tag && (tag = ""); + !name && (name = ""); + return [tag, name, order] as const; +} + +export default function SearchPage() { + const loaderData = useLoaderData() as LoaderReturnType, + [tagParam, nameParam, order] = loaderData; + { + } + const [lists, setLists] = useState([]); + const { handerChangeLoading } = useChangeLoading("searchIsloading"); + useEffect(() => { + setLists([]); + handerChangeLoading(true); + function handlerSetList( + datas: UnPromisify>["data"], + nextPage: number + ) { + setLists((lists) => [ + ...lists, + ...datas.map((item, index) => { + const itemRes = PickVideoRouterImageCardType(item); + if (index === datas.length - 5) { + return { + ...itemRes, + id: nanoid(4), + observer: true, + callback: (inView: boolean) => fetchHandler(nextPage), + }; + } + return { ...itemRes, id: nanoid(4) }; + }), + ]); + handerChangeLoading(false); + } + const fetchHandler = async (page: number = 1) => { + const { data, canceledByAxios } = await fetchVideohandler(page, { + order, + q: `tag.${tagParam}~name.${nameParam}`, + }); + if (!canceledByAxios) { + handlerSetList(data, page + 1); + } + }; + fetchHandler(1); + }, loaderData); + const { loading, isEmpty } = useSearchShowState(lists), + propsObj = { loading, isEmpty, data: lists }; + return ( +
+ + +
+ ); +} diff --git a/src/routers/search/select.tsx b/src/routers/search/select.tsx new file mode 100644 index 0000000..e4383a0 --- /dev/null +++ b/src/routers/search/select.tsx @@ -0,0 +1,72 @@ +import { videoOrderType } from "@utils/fetch/fetchtype"; +import { nanoid } from "nanoid"; +import { FC } from "react"; +import { useNavigate } from "react-router-dom"; +import { OrderArr, returnReplacedParmasURl } from "./tool"; +import { useURLParams } from "@utils/hooks/url"; + +export default function SelectNav() { + const navigate = useNavigate(), + handlerCilck = (queryString: videoOrderType) => { + const replacedUrl = returnReplacedParmasURl([ + { parmas: "order", replace: queryString }, + ]), + newQuerySrting = new URL(replacedUrl).search; + navigate(`/search${newQuerySrting}`); + }; + return ( +
+ {Search_Nav.map((item) => ( + + ))} +
+ ); +} + +const SearchNavItem: FC<{ + onClick: () => void; + label: string; + queryString: videoOrderType; +}> = ({ label, onClick, queryString }) => { + const [order] = useURLParams(["order"]), + isCurOrder = OrderArr.includes(order as videoOrderType) + ? order === queryString + : queryString === "score"; + return ( +
+ {label} +
+ ); +}; + +type searchNavType = { + id: string; + label: "综合排序" | "最多播放" | "最新发表"; + queryString: videoOrderType; +}; +const Search_Nav: searchNavType[] = [ + { + id: nanoid(4), + label: "综合排序", + queryString: "score", + }, + { + id: nanoid(4), + label: "最多播放", + queryString: "view", + }, + { + id: nanoid(4), + label: "最新发表", + queryString: "pubdate", + }, +]; diff --git a/src/routers/search/tool.ts b/src/routers/search/tool.ts new file mode 100644 index 0000000..e54ef24 --- /dev/null +++ b/src/routers/search/tool.ts @@ -0,0 +1,31 @@ +import { videoOrderType } from "@utils/fetch/fetchtype"; + +function ParseQueryString(queryString: string) { + const regExp = /([^&=]+)=([\w\W]*?)(&|$)/g; + let result = null, + ret: { [key: string]: string } = {}; + while ((result = regExp.exec(queryString)) != null) { + ret[result[1]] = result[2]; + } + return ret; +} +export const parseURL = (url = window.location.href) => { + const objUrl = new URL(url), + params = objUrl.search.slice(1); + return ParseQueryString(params); +}; + +export const returnReplacedParmasURl = ( + input: { parmas: string; replace: string }[] +) => { + const originUrl = window.location.href, + paramsObj = parseURL(originUrl); + input.forEach(({ parmas, replace }) => (paramsObj[parmas] = replace)); + return originUrl.replace( + window.location.search, + `?${Object.entries(paramsObj) + .map(([key, value]) => `${key}=${value}`) + .join("&")}` + ); +}; +export const OrderArr: videoOrderType[] = ["pubdate", "score", "view"]; diff --git a/src/routers/video/hooks.tsx b/src/routers/video/hooks.tsx new file mode 100644 index 0000000..56dd2a1 --- /dev/null +++ b/src/routers/video/hooks.tsx @@ -0,0 +1,22 @@ +import { useScreenSize } from "@components/proview/screenSize"; +import { useAppSelector } from "@store/hooks"; +import { + selectVideoLoadingState, + useChangeLoading, +} from "@store/loading/index"; +import { VideoListType } from "./masonry"; +export const useVideoLoading = () => useAppSelector(selectVideoLoadingState); + +export const useChangeVideoLoading = () => { + const { handerChangeLoading } = useChangeLoading("videoIsLoading"); + return { handerChangeLoading }; +}; + +export const useVideoShowState = (data: VideoListType) => { + const { lg, md, sm } = useScreenSize(), + rightLen = (lg ? (md ? (sm ? 0 : 2) : 4) : 6) + 1; + const loading = useVideoLoading(), + isEmpty = data.length < 1, + shouldNoShowHeroLine = data.length < rightLen + 1 + 10; + return { loading, rightLen, isEmpty, shouldNoShowHeroLine }; +}; diff --git a/src/routers/video/item/index.tsx b/src/routers/video/item/index.tsx index 773f4e7..20f9d52 100644 --- a/src/routers/video/item/index.tsx +++ b/src/routers/video/item/index.tsx @@ -24,6 +24,7 @@ export const VideoRouterImageCard: FC<{ data: VideoRouterImageCardType }> = ({ ([]); - const isLoading = useAppSelector(selectVideoLoadingState), - dispatch = useAppDispatch(), - handerChangeLoading = (state: boolean) => - dispatch(changeLoading({ stateName: "videoIsLoading", Tostate: state })); + const [lists, setLists] = useState([]); + const { handerChangeLoading } = useChangeVideoLoading(); useEffect(() => { + setLists([]); + handerChangeLoading(true); // 在内部定义fetchHandler,保证拿到的是同步的 const fetchHandler = async (page: number = 1) => { - const data = await fetchVideohandler(page, props); + const { data, canceledByAxios } = await fetchVideohandler(page, props); setLists((lists) => [ ...lists, ...data.map((item, index) => { const itemRes = PickVideoRouterImageCardType(item); - if (index === data.length - 3) { + if (index === data.length - 5) { return { ...itemRes, id: nanoid(4), @@ -40,38 +38,133 @@ export default function VideoMasonry(props: VideoRouterMasonryType) { return { ...itemRes, id: nanoid(4) }; }), ]); + if (!canceledByAxios) { + handerChangeLoading(false); + } }; - setLists([]); - handerChangeLoading(true); - fetchHandler(1).then(() => handerChangeLoading(false)); + fetchHandler(1); }, [props]); return (
+ +
+ ); +} + +const LoadingItems: FC<{ length?: number }> = ({ length = 20 }) => ( + <> + {Array.from({ length }, (value, key) => ( + + + + ))} + +); + +const VideoContent: FC<{ data: VideoListType }> = memo((props) => { + const { loading, rightLen, isEmpty, shouldNoShowHeroLine } = + useVideoShowState(props.data); + const { sm } = useScreenSize(); + const data = props.data; + const heroItem = data.slice(0, 1), + rightItem = data.slice(1, rightLen), + resItems = shouldNoShowHeroLine ? data : data.slice(rightLen); + return ( + <> - {lists.map((item) => ( - - ))} - {isLoading && } + + {loading ? ( + + ) : shouldNoShowHeroLine ? ( + <> + ) : ( + + )} + + {!sm && ( + + + {loading ? ( + + ) : shouldNoShowHeroLine ? ( + <> + ) : ( + rightItem.map((item) => ( + + )) + )} + + + )} -
+ + ); -} +}); + +export const NormalVideoRes: FC<{ + loading: boolean; + isEmpty: boolean; + data: VideoListType; +}> = ({ loading, isEmpty, data }) => { + useEffect(() => { + if (loading) { + window.scrollTo({ top: 0 }); + } + }, [loading]); + return ( + + {loading ? ( + + ) : isEmpty ? ( + + ) : ( + data.map((item) => ) + )} + + ); +}; +const EmptyItem = () => ( +
暂无数据
+); + const MemoItems: FC = memo((props) => { return ( @@ -80,24 +173,18 @@ const MemoItems: FC = memo((props) => { ); }); -const LoadingSkeleton: FC<{ num: number }> = ({ num = 0 }) => { - return ( - <> - {...Array.from({ length: num }, (v, key) => ( - - - - -
- - -
-
- ))} - - ); -}; +const LoadingSkeleton = () => ( + <> + + + +
+ + +
+ +); diff --git a/src/routers/video/tools.ts b/src/routers/video/tools.ts index ee6cd2d..8322c5e 100644 --- a/src/routers/video/tools.ts +++ b/src/routers/video/tools.ts @@ -2,9 +2,18 @@ import { VideoRouterMasonryType, VideoRouterImageCardType } from "./videotype"; import { fetchVideos } from "@utils/fetch/index"; import message from "@components/message"; import { Pick } from "@utils/index"; +import { RFetchVideoRes } from "@utils/fetch/fetchtype"; -export const fetchVideohandler = async ( - page: number = 1, +type fetchVideohandlerType = ( + page: number, + props: VideoRouterMasonryType +) => Promise<{ + data: RFetchVideoRes["data"]["result"]; + canceledByAxios: boolean; +}>; + +export const fetchVideohandler: fetchVideohandlerType = async ( + page = 1, props: VideoRouterMasonryType ) => { const res = await fetchVideos({ @@ -16,11 +25,14 @@ export const fetchVideohandler = async ( if (res.code !== 0) { res.code === 400 && message.info("参数错误,请尝试其他tag"); res.code === 500 && message.info(res.message); - return []; + if (res.code === 403) { + return { data: [], canceledByAxios: true }; + } + return { data: [], canceledByAxios: false }; } else if (res.data.result.length < 1) { message.info("没有更多数据了,请尝试其他tag"); } - return res.data.result; + return { data: res.data.result, canceledByAxios: false }; }; export function PickVideoRouterImageCardType< diff --git a/src/routers/video/video.module.less b/src/routers/video/video.module.less index 670ea5d..bfce141 100644 --- a/src/routers/video/video.module.less +++ b/src/routers/video/video.module.less @@ -13,13 +13,39 @@ } } -.container:empty { - display: flex; - justify-content: center; +.hero-content { + &>section:only-child { + &>a:first-child { + flex-grow: 1; + + img { + height: 100%; + } + + img+div { + padding: 8px; + + span { + font-size: 14px !important; + } + } + } + + &>div:last-child { + justify-content: flex-start; + + } - &::before { - margin-top: 50px; - content: "暂无数据"; - color: #c1c1c1; } -} \ No newline at end of file +} + +// .container:empty { +// display: flex; +// justify-content: center; + +// &::before { +// margin-top: 50px; +// content: "暂无数据"; +// color: #c1c1c1; +// } +// } \ No newline at end of file diff --git a/src/store/device/index.ts b/src/store/device/index.ts index 8a2f145..3bff900 100644 --- a/src/store/device/index.ts +++ b/src/store/device/index.ts @@ -1,15 +1,23 @@ -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import type { RootState } from ".."; +export type SelectModeType = typeof selectModeList[number]; +export const selectModeList = ["搜索tag", "搜索更多"] as const; + interface DeviceState { /** * @description nav栏是否展开 */ navMoreShowed: boolean; + /** + * + */ + selectSearchMode: SelectModeType; } const initialState: DeviceState = { navMoreShowed: false, + selectSearchMode: "搜索tag", }; export const DeviceSlice = createSlice({ name: "device", @@ -21,14 +29,22 @@ export const DeviceSlice = createSlice({ changeNavMoreShowed: (state) => { state.navMoreShowed = !state.navMoreShowed; }, + /** + * @description 修改搜索模式 + */ + changeSearchMode: (state, action: PayloadAction) => { + state.selectSearchMode = action.payload; + }, }, }); -export const { changeNavMoreShowed } = DeviceSlice.actions; +export const { changeNavMoreShowed, changeSearchMode } = DeviceSlice.actions; /** * @description 获取nav是否展开 */ export const selectNavMoreShowed = (state: RootState) => state.device.navMoreShowed; +export const selectSearchMode = (state: RootState) => + state.device.selectSearchMode; export default DeviceSlice.reducer; diff --git a/src/store/loading/index.ts b/src/store/loading/index.ts index e26d5c9..86564b7 100644 --- a/src/store/loading/index.ts +++ b/src/store/loading/index.ts @@ -1,4 +1,5 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; +import { useAppDispatch } from "@store/hooks"; import type { RootState } from ".."; @@ -11,6 +12,10 @@ export interface LoadingState { * @description 图片接口是否正在获取 */ photoIsloading: boolean; + /** + *@description 搜索接口是否正在获取 + */ + searchIsloading: boolean; } interface IchangeLoadingItem { stateName: keyof LoadingState; @@ -20,6 +25,7 @@ interface IchangeLoadingItem { const initialState: LoadingState = { videoIsLoading: true, photoIsloading: true, + searchIsloading: true, }; export const LoadingSlice = createSlice({ name: "loading", @@ -50,14 +56,23 @@ export const LoadingSlice = createSlice({ }, }, }); - -const selectLoadingState = (state: RootState, name: keyof LoadingState) => +type LoadingTypes = keyof LoadingState; +const selectLoadingState = (state: RootState, name: LoadingTypes) => state.loading[name]; export const { changeLoading, changeLoadingCauseByUrl } = LoadingSlice.actions; export const selectVideoLoadingState = (state: RootState) => selectLoadingState(state, "videoIsLoading"), selectPhotoLoadingState = (state: RootState) => - selectLoadingState(state, "photoIsloading"); + selectLoadingState(state, "photoIsloading"), + selectSearchingState = (state: RootState) => + selectLoadingState(state, "searchIsloading"); export default LoadingSlice.reducer; + +export const useChangeLoading = (name: LoadingTypes) => { + const dispatch = useAppDispatch(), + handerChangeLoading = (state: boolean) => + dispatch(changeLoading({ stateName: name, Tostate: state })); + return { handerChangeLoading }; +}; diff --git a/src/store/tags/index.ts b/src/store/tags/index.ts index 803ef06..293211f 100644 --- a/src/store/tags/index.ts +++ b/src/store/tags/index.ts @@ -8,6 +8,7 @@ import { PhotoQueryNavList, } from "@routers/layout/nav/photoTools"; import type { RootState } from ".."; +import { useAppDispatch, useAppSelector } from "@store/hooks"; const Photo_Topic_id_all = PhotoQueryNavList.find( (item) => item.queryString === 0 @@ -23,12 +24,16 @@ interface TagStates { /** * @description video页面点击tags */ - VideoActiveTags: VideoNavQueryItemType[]; + VideoActiveTags: VideoTagsType; /** * @description photo page active tags */ - PhotoActivetags: PhotoNavQueryItemType[]; + PhotoActivetags: photoTagsType; } + +type VideoTagsType = VideoNavQueryItemType[]; +type photoTagsType = PhotoNavQueryItemType[]; + const initialState: TagStates = { VideoActiveTags: [Video_default_show], PhotoActivetags: [Photo_Topic_id_all, Photo_type_default], @@ -122,3 +127,37 @@ export const selectVideoActiveTags = (state: RootState) => selectPhotoActiveTags = (state: RootState) => state.ActiveTags.PhotoActivetags; export default ActiveTagsSlice.reducer; + +export const useSelectVideoActiveTags = () => + useAppSelector(selectVideoActiveTags), + useSelectPhotoActiveTags = () => useAppSelector(selectPhotoActiveTags); +export const useStoreVideoTags = () => { + const activeTags = useSelectVideoActiveTags(); + const dispath = useAppDispatch(), + handerChangeActiveTags = ( + type: "add" | "delete", + data: VideoNavQueryItemType + ) => { + if (type === "add") { + dispath(handerVideoAddTag(data)); + } else { + dispath(handerVideoDeleteTag(data)); + } + }; + return [activeTags, handerChangeActiveTags]; + }, + useStorePhotoTags = () => { + const activeTags = useSelectPhotoActiveTags(); + const dispath = useAppDispatch(), + handerChangeActiveTags = ( + type: "add" | "delete", + data: PhotoNavQueryItemType + ) => { + if (type === "add") { + dispath(handerPhotoAddTag(data)); + } else { + dispath(handerPhotoDeleteTag(data)); + } + }; + return [activeTags, handerChangeActiveTags]; + }; diff --git a/src/utils/fetch/fetchtype.ts b/src/utils/fetch/fetchtype.ts index 6d05df3..238986a 100644 --- a/src/utils/fetch/fetchtype.ts +++ b/src/utils/fetch/fetchtype.ts @@ -1,3 +1,4 @@ +export type videoOrderType = "pubdate" | "view" | "score"; /** *@description video接口的请求参数类型 */ @@ -7,7 +8,7 @@ export interface IFetchVideoParams { * pubdate为最新发布排序,view为最多播放排序,score为最高得分排序 * @example pubdate | view | score */ - order: "pubdate" | "view" | "score"; + order: videoOrderType; /** * @description 分页,每页返回20个;从1开始,自然数递增 * @example 1 @@ -170,7 +171,7 @@ type CustomFetchRes = { /** * @example 0 */ - code: 0 | 400 | 500; + code: 0 | 400 | 500 | 403; /** * @example "ok" */ diff --git a/src/utils/fetch/index.ts b/src/utils/fetch/index.ts index 30b2043..38a872d 100644 --- a/src/utils/fetch/index.ts +++ b/src/utils/fetch/index.ts @@ -1,4 +1,4 @@ -import axios from "axios"; +import axios, { AxiosError } from "axios"; import JSONBigInt from "json-bigint"; /** * 类型文件导入 @@ -37,14 +37,21 @@ BackEndAxios.interceptors.request.use((config) => { return config; }); +let VideoSource: AbortController | null = null; + /** * video视频数据获取接口 */ export async function fetchVideos( params: IFetchVideoParams ): Promise { + if (VideoSource) { + VideoSource.abort(); + } + VideoSource = new AbortController(); try { const res = await BackEndAxios.get("/video-interface/advanced-search", { + signal: VideoSource.signal, params: { order: params.order || "score", page: params.page, @@ -53,9 +60,23 @@ export async function fetchVideos( tname: params.tname, }, }); + VideoSource = null; return res.data; - } catch (e) { - // console.log({ e }); + } catch (err) { + if (axios.isAxiosError(err)) { + if (err.code === "ERR_CANCELED") { + return { + code: 403, + message: "已取消", + ttl: 0, + data: { + page: 0, + numResults: 0, + result: [], + }, + }; + } + } return { code: 500, message: "网络请求错误,您似乎处于断网状态", @@ -68,19 +89,39 @@ export async function fetchVideos( }; } } +let PhotoSource: AbortController | null = null; /** * photo图片数据获取接口 */ export async function fetchPhotos( params: IFetchPhotoParams ): Promise { - // console.log({ params }); + if (PhotoSource) { + PhotoSource.abort(); + } + PhotoSource = new AbortController(); try { const res = await BackEndAxios.get(`/pic/${params.type}`, { + signal: PhotoSource.signal, params: Omit(params, "type"), }); + PhotoSource.abort(); return res.data; - } catch (e) { + } catch (err) { + if (axios.isAxiosError(err)) { + if (err.code === "ERR_CANCELED") { + return { + code: 403, + message: "已取消", + ttl: 0, + data: { + page: 0, + total: 0, + result: [], + }, + }; + } + } return { code: 500, message: "网络请求错误,您似乎处于断网状态", diff --git a/src/utils/hooks/match.ts b/src/utils/hooks/match.ts index 252268d..95a9eca 100644 --- a/src/utils/hooks/match.ts +++ b/src/utils/hooks/match.ts @@ -10,14 +10,6 @@ export const useScreenMatchSize = (size: Breakpoint) => { const matchSize = useMediaQuery(theme.breakpoints.down(size)); return matchSize; }; -//个人主页头像大小 -`@240w_240h_1c_1s.webp`; -//移动平台首页图片大小 -`@480w_270h_1c`; -//电脑平台首页图片大小 -`@672w_378h_1c_!web-search-common-cover`; -//首页up头像大小 -`@96w_96h_1s.webp`; export const useBodyScrollHide = (hidden: boolean) => { useEffect(() => { diff --git a/src/utils/hooks/popover.ts b/src/utils/hooks/popover.ts new file mode 100644 index 0000000..6744e65 --- /dev/null +++ b/src/utils/hooks/popover.ts @@ -0,0 +1,20 @@ +import React from "react"; + +export function usePopoverConfig( + target: "target" | "currentTaarget" = "currentTaarget" +) { + const [anchorEl, setAnchorEl] = React.useState(null); + const handleClick = (event: React.MouseEvent) => { + if (target === "currentTaarget") { + setAnchorEl(event.currentTarget); + } else { + //@ts-ignore + setAnchorEl(event.target); + } + }, + handleClose = () => { + setAnchorEl(null); + }; + const open = Boolean(anchorEl); + return { anchorEl, handleClick, handleClose, open }; +} diff --git a/src/utils/hooks/url.ts b/src/utils/hooks/url.ts new file mode 100644 index 0000000..96c9c61 --- /dev/null +++ b/src/utils/hooks/url.ts @@ -0,0 +1,5 @@ +export const useURLParams = (searchList: string[]) => { + const originURl = window.location.href; + const url = new URL(originURl); + return searchList.map((item) => url.searchParams.get(item) || ""); +}; diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100644 index 0000000..c5e0829 --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], + theme: { + extend: { + screens: { + xs: "500px", + }, + }, + }, + plugins: [], +};