diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f59bebaea4..d380f44a25 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -295,3 +295,37 @@ updates: day: "saturday" timezone: "Europe/Berlin" time: "03:00" + +- package-ecosystem: npm + open-pull-requests-limit: 99 + directory: "/tests" + rebase-strategy: "disabled" + schedule: + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + groups: + cypress: + applies-to: version-updates + patterns: + - "*cypress*" + - "*cucumber*" + linting: + applies-to: version-updates + patterns: + - "@eslint-community/eslint-plugin-eslint-comments" + - "@typescript-eslint/*" + - "eslint-*" + - "prettier" + exclude-patterns: + - "eslint" + typescript: + applies-to: version-updates + patterns: + - "typescript" + - "ts*" + vuepress: + applies-to: version-updates + patterns: + - "*vuepress*" diff --git a/.github/file-filters.yml b/.github/file-filters.yml index 84eebd0cc7..d4bfce2842 100644 --- a/.github/file-filters.yml +++ b/.github/file-filters.yml @@ -120,4 +120,15 @@ backend-test-build-docs: &backend-test-build-docs - '.github/file-filters.yml' - 'backend/**/*.md' - 'backend/.vuepress/*' - - 'backend/package.json' \ No newline at end of file + - 'backend/package.json' + +# e2e - TODO refine separation of docs from code-related files +e2e-all: + - 'tests/**/*' + +e2e-docs: + - 'tests/**/*.md' + - '.github/workflows/e2e.test.build.docs.yml' + - '.github/file-filter.yml' + - '.vuepress/*' + - 'package.json' \ No newline at end of file diff --git a/.github/workflows/e2e.run.tests.yml b/.github/workflows/e2e.run.tests.yml new file mode 100644 index 0000000000..f7fcca84b8 --- /dev/null +++ b/.github/workflows/e2e.run.tests.yml @@ -0,0 +1,60 @@ +name: e2e:test:all test the application end to end + +on: push + +jobs: + e2e-tests: + name: Run all E2E tests + runs-on: ubuntu-latest + steps: + - name: Set Node version + uses: actions/setup-node@v4 + with: + node-version: 21 + + - name: Checkout + uses: actions/checkout@master + + - name: E2E | Boot up test system + run: | + cd authentik/ + ./database.unpack.sh + docker compose up -d + cd ../frontend + cp .env.dist .env + docker compose -f docker-compose.test.yml up -d frontend + cd ../presenter + cp .env.dist .env + docker compose -f docker-compose.test.yml up -d presenter + sleep 4m + + - name: Install cucumber-json-formatter + run: | + wget --no-verbose -O /opt/cucumber-json-formatter "https://github.com/cucumber/json-formatter/releases/download/v19.0.0/cucumber-json-formatter-linux-386" + chmod +x /opt/cucumber-json-formatter + sudo ln -fs /opt/cucumber-json-formatter /usr/bin/cucumber-json-formatter + + - name: E2E | Run all tests + id: e2e-run + uses: cypress-io/github-action@v6 + with: + working-directory: tests + + - name: E2E | if tests failed, compile html report + if: ${{ failure() && steps.e2e-run.conclusion == 'failure' }} + run: | + cd cypress/ + npx tsx create-cucumber-html-report.ts + working-directory: tests + + - name: Get PR number + if: ${{ failure() && steps.e2e-run.conclusion == 'failure' }} + uses: jwalton/gh-find-current-pr@master + id: pr-number + + - name: E2E | if tests failed, upload report + if: ${{ failure() && steps.e2e-run.conclusion == 'failure' }} + uses: actions/upload-artifact@v4 + with: + name: boilerplate-e2e-test-report-pr-${{ steps.pr-number.outputs.pr }} + path: /home/runner/work/dreammall.earth/dreammall.earth/tests/cypress/reports/dreammall-e2e_html_report \ No newline at end of file diff --git a/.github/workflows/e2e.test.build.docs.yml b/.github/workflows/e2e.test.build.docs.yml new file mode 100644 index 0000000000..91f488c7f6 --- /dev/null +++ b/.github/workflows/e2e.test.build.docs.yml @@ -0,0 +1,40 @@ +name: e2e:test:build test docs + +on: push + +jobs: + files-changed: + name: Detect File Changes + runs-on: ubuntu-latest + outputs: + changes: ${{ steps.changes.outputs.e2e-docs }} + steps: + - uses: actions/checkout@master + + - name: Check for e2e docs file changes + uses: dorny/paths-filter@v3.0.2 + id: changes + with: + token: ${{ github.token }} + filters: .github/file-filters.yml + list-files: shell + + build: + if: needs.files-changed.outputs.changes == 'true' + name: Build Docs - E2E Testing + needs: files-changed + runs-on: ubuntu-latest + env: + WORKING_DIRECTORY: ./tests + steps: + - name: Set Node version + uses: actions/setup-node@v4 + with: + node-version: '>=21' + + - name: Checkout code + uses: actions/checkout@master + + - name: E2E Testing | Build Docs + run: npm install && npm run docs:build + working-directory: ${{env.WORKING_DIRECTORY}} \ No newline at end of file diff --git a/.github/workflows/e2e.test.lint.yml b/.github/workflows/e2e.test.lint.yml new file mode 100644 index 0000000000..352b7c875e --- /dev/null +++ b/.github/workflows/e2e.test.lint.yml @@ -0,0 +1,40 @@ +name: e2e:test:lint code with defined linters + +on: push + +jobs: + files-changed: + name: Detect File Changes + runs-on: ubuntu-latest + outputs: + changes: ${{ steps.changes.outputs.e2e-all }} + steps: + - uses: actions/checkout@master + + - name: Check for frontend file changes + uses: dorny/paths-filter@v3.0.2 + id: changes + with: + token: ${{ github.token }} + filters: .github/file-filters.yml + list-files: shell + + lint: + if: needs.files-changed.outputs.changes == 'true' + name: Lint - E2E files + needs: files-changed + runs-on: ubuntu-latest + env: + WORKING_DIRECTORY: ./tests + steps: + - name: Set Node version + uses: actions/setup-node@v4 + with: + node-version: '>=21' + + - name: Checkout code + uses: actions/checkout@master + + - name: E2E files | Lint + run: npm install && npm run test:lint + working-directory: ${{env.WORKING_DIRECTORY}} \ No newline at end of file diff --git a/admin/package-lock.json b/admin/package-lock.json index c8fe270246..111f0d6b56 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -15,7 +15,7 @@ "@types/express": "^4.17.21", "@types/node": "^20.14.2", "@vitejs/plugin-vue": "^5.0.5", - "@vue/compiler-sfc": "^3.4.27", + "@vue/compiler-sfc": "^3.4.29", "@vue/server-renderer": "3.4.27", "@vuepress/theme-default": "^2.0.0-rc.35", "compression": "^1.7.4", @@ -23,13 +23,13 @@ "express": "^4.19.2", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", - "sass": "^1.77.4", + "sass": "^1.77.5", "sass-loader": "^14.2.1", "sirv": "^2.0.4", "ts-node": "^10.9.2", "typescript": "^5.4.5", - "vike": "^0.4.174", - "vite": "^5.2.13", + "vike": "^0.4.176", + "vite": "^5.3.1", "vue": "3.4.27", "vue-i18n": "^9.13.1", "vuetify": "^3.5.15" @@ -38,20 +38,20 @@ "@eslint-community/eslint-plugin-eslint-comments": "^4.3.0", "@intlify/eslint-plugin-vue-i18n": "^2.0.0", "@pinia/testing": "^0.1.3", - "@storybook/addon-essentials": "^8.1.6", - "@storybook/addon-interactions": "^8.1.6", - "@storybook/addon-links": "^8.1.6", - "@storybook/blocks": "^8.0.10", + "@storybook/addon-essentials": "^8.1.9", + "@storybook/addon-interactions": "^8.1.9", + "@storybook/addon-links": "^8.1.9", + "@storybook/blocks": "^8.1.9", "@storybook/test-runner": "^0.18.2", "@storybook/testing-library": "^0.2.2", - "@storybook/vue3": "^8.1.6", - "@storybook/vue3-vite": "^8.1.6", - "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", + "@storybook/vue3": "^8.1.9", + "@storybook/vue3-vite": "^8.1.9", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "@vitest/coverage-v8": "^1.6.0", "@vue/test-utils": "^2.4.6", "@vuepress/bundler-vite": "^2.0.0-rc.9", - "chromatic": "^11.5.3", + "chromatic": "^11.5.4", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", @@ -60,14 +60,14 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-storybook": "^0.8.0", "eslint-plugin-vitest": "^0.4.1", "eslint-plugin-vue": "^9.26.0", "eslint-plugin-vuetify": "^2.4.0", "eslint-plugin-yml": "^1.14.0", "happy-dom": "^14.12.0", - "prettier": "^3.3.1", + "prettier": "^3.3.2", "react": "^18.3.1", "react-dom": "^18.3.1", "remark-cli": "^12.0.1", @@ -75,14 +75,14 @@ "remark-preset-lint-consistent": "^6.0.0", "remark-preset-lint-markdown-style-guide": "^6.0.0", "remark-preset-lint-recommended": "^7.0.0", - "storybook": "^8.1.6", + "storybook": "^8.1.9", "stylelint": "^16.6.1", "stylelint-config-css-modules": "^4.4.0", "stylelint-config-recess-order": "^5.0.1", "stylelint-config-recommended-vue": "^1.5.0", "stylelint-config-standard": "^36.0.0", "stylelint-config-standard-scss": "^13.1.0", - "tsx": "^4.15.1", + "tsx": "^4.15.6", "vite-plugin-checker": "^0.6.4", "vite-plugin-compression": "^0.5.1", "vite-plugin-vuetify": "^2.0.3", @@ -5005,12 +5005,12 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.6.tgz", - "integrity": "sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.9.tgz", + "integrity": "sha512-7ZefE9AER42htn4McqMXcL2RDnflesIf4SxY7pCHpL7rUoldxfZ1DGGRgyKen00H6vx1LGzLRBN9fhBUf9XqCA==", "dev": true, "dependencies": { - "@storybook/core-events": "8.1.6", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -5023,9 +5023,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.6.tgz", - "integrity": "sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.9.tgz", + "integrity": "sha512-k2s7PNwy1ND7eJ7N2DnG508fztuXNH5Jq6Vbk8aoXPPRXfwybel299WRb4WJl7ZvZKcGtBoZ+mciopPkho3Lpg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5038,12 +5038,12 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.6.tgz", - "integrity": "sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.9.tgz", + "integrity": "sha512-B5+UFAnlu82QHX8bOHj022f3zi9rbqGxBqgLnx54ebl6ZgMEe9IGaOnGWyHjpFofy9yBX2Ti5+7ClvFhmyjAig==", "dev": true, "dependencies": { - "@storybook/blocks": "8.1.6", + "@storybook/blocks": "8.1.9", "dequal": "^2.0.2", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" @@ -5054,24 +5054,24 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.6.tgz", - "integrity": "sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.9.tgz", + "integrity": "sha512-dRSG54gSVn4qQc6u9ROYeDu4B0wJkr+fpS2AGwav2+KAM5kNw2ecsyhyreUhc4e/AwhAhGc49d7iQ3rjOHR//A==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", - "@storybook/csf-plugin": "8.1.6", - "@storybook/csf-tools": "8.1.6", + "@storybook/blocks": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/components": "8.1.9", + "@storybook/csf-plugin": "8.1.9", + "@storybook/csf-tools": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/react-dom-shim": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/react-dom-shim": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "fs-extra": "^11.1.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", @@ -5086,24 +5086,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.6.tgz", - "integrity": "sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "8.1.6", - "@storybook/addon-backgrounds": "8.1.6", - "@storybook/addon-controls": "8.1.6", - "@storybook/addon-docs": "8.1.6", - "@storybook/addon-highlight": "8.1.6", - "@storybook/addon-measure": "8.1.6", - "@storybook/addon-outline": "8.1.6", - "@storybook/addon-toolbars": "8.1.6", - "@storybook/addon-viewport": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.9.tgz", + "integrity": "sha512-VpEG+qmj7vKPMUSPKsGFwZgbm4QVM2bTqZEbW9zvPOFIbTKtrGaq/n/O0LhMramPkoQZKYKs/0i7OsEoZaOybQ==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "8.1.9", + "@storybook/addon-backgrounds": "8.1.9", + "@storybook/addon-controls": "8.1.9", + "@storybook/addon-docs": "8.1.9", + "@storybook/addon-highlight": "8.1.9", + "@storybook/addon-measure": "8.1.9", + "@storybook/addon-outline": "8.1.9", + "@storybook/addon-toolbars": "8.1.9", + "@storybook/addon-viewport": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/manager-api": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", "ts-dedent": "^2.0.0" }, "funding": { @@ -5112,9 +5112,9 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.6.tgz", - "integrity": "sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.9.tgz", + "integrity": "sha512-7jcjepeP/Z6XhKXKIfMqrM72tsTwo3wAaytuVWG9mHeNTTphepqO0YXZphaEh5EhupaT0DOYWT6jVxOkiw+xpA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5125,15 +5125,15 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.1.6.tgz", - "integrity": "sha512-/5i3wXuNnduTN807BNSX7nJ0a3eQPjN49yUAfLtYtIoNCEsLAza2F5yt8aadKOj1rR6xqROc7y8NMhhC5Cp50A==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.1.9.tgz", + "integrity": "sha512-R916xLxWrhNPujo63JHIn8pcwR9KpaME/WH1PGLFsvVS7R7gcTNsa/ZL2LanuG8tHtEcLAoGufXaeoZGmTCTIQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.1.6", - "@storybook/test": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/instrumenter": "8.1.9", + "@storybook/test": "8.1.9", + "@storybook/types": "8.1.9", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -5143,9 +5143,9 @@ } }, "node_modules/@storybook/addon-links": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.6.tgz", - "integrity": "sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.9.tgz", + "integrity": "sha512-gawakQHokGDLEDIyyJzxHB0d5AJi2sSLzoNc0cvewEE55i6T7jvpXpVqTu6/ZtVFZ+3x3gLIQ6Q3krNNIz6W2A==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -5166,9 +5166,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.6.tgz", - "integrity": "sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.9.tgz", + "integrity": "sha512-YHU4XQkpA1WxAOLeqnHdX9g0ubuHHDIqLkVjixt/BHejDwLcLzfSyKiX6o4xy+0MUilFDQD2Q/psiDHkLrvnVQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5180,9 +5180,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.6.tgz", - "integrity": "sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.9.tgz", + "integrity": "sha512-Y1jgsVtW87qBQfKFMFk8vinsjQq7/yOGygtj2PHIgZO4foOaqwVDq7ioHCogmrdOycfpeByCtT3nUFAXxZxMsw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5194,9 +5194,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.6.tgz", - "integrity": "sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.9.tgz", + "integrity": "sha512-aW+HsuC0iWjPSbJtxdbdGdCLXzV0dxPp8e4TPugT084ImTp+i+77xXUTl+PCylld8a51ulEssOxARewGN/QMsw==", "dev": true, "funding": { "type": "opencollective", @@ -5204,9 +5204,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.6.tgz", - "integrity": "sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.9.tgz", + "integrity": "sha512-ZCoqzNWp2w9TLJL8RC0fjv1RQcuGhwI64jjlGvszZm7TxP82C1SS71X/jbx5LWc2Dyl5xMt1/yOGFXvkAB2SUg==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -5217,23 +5217,23 @@ } }, "node_modules/@storybook/blocks": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.6.tgz", - "integrity": "sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.9.tgz", + "integrity": "sha512-AB7icCijK2rft5kmzFF7bHuTdVIf6u5r26r4auqYxxVsHV87+k12kLvC8AyEssVIKMo+2vzImmdlhIScpCjrdQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/components": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", - "@storybook/docs-tools": "8.1.6", + "@storybook/docs-tools": "8.1.9", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/manager-api": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/manager-api": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -5265,15 +5265,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.6.tgz", - "integrity": "sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.9.tgz", + "integrity": "sha512-CmDXVrx3moUde6VWmdb49eCYHNu4e2wxeANKSsW1yEC0OLysQ9N6W9B5CuVWeoV3axVX/tKDqC83YY/008/4Qg==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "8.1.6", - "@storybook/manager": "8.1.6", - "@storybook/node-logger": "8.1.6", + "@storybook/core-common": "8.1.9", + "@storybook/manager": "8.1.9", + "@storybook/node-logger": "8.1.9", "@types/ejs": "^3.1.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", "browser-assert": "^1.2.1", @@ -5291,20 +5291,20 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.1.6.tgz", - "integrity": "sha512-xbGxI7aVMNuLcAB41Z+Vjr+M1Kznvw/jJ8HP9cfmUl1cO7ysF8R9opVG1C+kMIXUIQAVeND+DUZgmUg2zGzH6A==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/csf-plugin": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.1.9.tgz", + "integrity": "sha512-OqjJne7x3l8yPMB3VTc9zbKYN5+9Yw/8cW9vK3N0rMObQa6be76JfJAgTFUGujp/GdVjYEiFI1Pu3b1wf5loWQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/csf-plugin": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^1.5.0", @@ -5337,13 +5337,13 @@ } }, "node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -5354,22 +5354,22 @@ } }, "node_modules/@storybook/cli": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.6.tgz", - "integrity": "sha512-xsFdBoAbo+2h/UCWuVXiH4Tu49iQ6d+3R1J8F2n4N6rAKxMqAb6fzYnH1GeRYeZk0HGqb2iNc4kBkxj0jW0rKw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.9.tgz", + "integrity": "sha512-+4DQJf5yrdmKrAs8sx0WvKu/ja49oOLQU2MxRPKhXW3bxDFjkTYvWuCKwSbMwUa7Npt96CK3bwAPP53jz/+mXA==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/types": "^7.24.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/core-server": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/codemod": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/core-server": "8.1.9", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/telemetry": "8.1.9", + "@storybook/types": "8.1.9", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -5568,9 +5568,9 @@ } }, "node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5581,18 +5581,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.6.tgz", - "integrity": "sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.9.tgz", + "integrity": "sha512-thTdwiAO/eUUyiCzgkyGjA4fE3BAdXqf3WdTRjH4Vqk4yby9EalwcBitkj/M6bCDGjdoxU2q2ByUDD9opwyMiw==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/types": "^7.24.0", "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/types": "8.1.9", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^14.0.1", @@ -5652,19 +5652,19 @@ } }, "node_modules/@storybook/components": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.6.tgz", - "integrity": "sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.9.tgz", + "integrity": "sha512-YGDYTJfobtNDBJrvXNgmExX3LGnb9jGPGdroS4uHewLFaqEI3Fqu3RiFLaJf40TlZ27uWLprysdLRol8j+wYEw==", "dev": true, "dependencies": { "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "memoizerific": "^1.11.3", "util-deprecate": "^1.0.2" }, @@ -5678,15 +5678,15 @@ } }, "node_modules/@storybook/core-common": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.6.tgz", - "integrity": "sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.9.tgz", + "integrity": "sha512-+KReoo41FUknTxk3fbnoul995SnZdKAVSK6MuqKOQnC9PH6bh864k6i1LShVZx/wk3n25h9xorD3UgyRI6sZ0w==", "dev": true, "dependencies": { - "@storybook/core-events": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/core-events": "8.1.9", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/types": "8.1.9", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", @@ -5760,9 +5760,9 @@ "dev": true }, "node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -5774,29 +5774,29 @@ } }, "node_modules/@storybook/core-server": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.6.tgz", - "integrity": "sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.9.tgz", + "integrity": "sha512-bn3M264vr3GY9kgAdRRIUdVV4PcUqtYvttQ/h6XDVJWC1UYUQW49zQNxQLQUXSQo4KLISnvTKHmP5qgbY6BASQ==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "8.1.6", - "@storybook/channels": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/builder-manager": "8.1.9", + "@storybook/channels": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.6", + "@storybook/csf-tools": "8.1.9", "@storybook/docs-mdx": "3.1.0-next.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/manager": "8.1.9", + "@storybook/manager-api": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/telemetry": "8.1.9", + "@storybook/types": "8.1.9", "@types/detect-port": "^1.3.0", "@types/diff": "^5.0.9", "@types/node": "^18.0.0", @@ -5914,12 +5914,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.6.tgz", - "integrity": "sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.9.tgz", + "integrity": "sha512-OC3Z7lx5Tt3iNqVpfAykCKhmHyWXwjPvK0C0RubmKLRWdH66aKp2SzvqJSFppRGZySWKKJqSBGtjB/AsG/Do4Q==", "dev": true, "dependencies": { - "@storybook/csf-tools": "8.1.6", + "@storybook/csf-tools": "8.1.9", "unplugin": "^1.3.1" }, "funding": { @@ -5928,9 +5928,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.6.tgz", - "integrity": "sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.9.tgz", + "integrity": "sha512-nCYGNJOoBZjAdD1blTgS8/O0HwXaZ4cwUd8G9pQbsyt/cSW65clATeEV1rTTcR+G9JHnZBQ3jLAnH2dbFY0c8w==", "dev": true, "dependencies": { "@babel/generator": "^7.24.4", @@ -5938,7 +5938,7 @@ "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "@storybook/csf": "^0.1.7", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "fs-extra": "^11.1.0", "recast": "^0.23.5", "ts-dedent": "^2.0.0" @@ -5955,15 +5955,15 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.6.tgz", - "integrity": "sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.9.tgz", + "integrity": "sha512-ZGtlldQARXG+v8KtNq5dxtAfPLsaLFuV4gJQ4MHXcspQSKtQ6fq5k2IkxhKhDg4EEQ/lhSl8vUxws+W79xWbbg==", "dev": true, "dependencies": { - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -5994,16 +5994,16 @@ } }, "node_modules/@storybook/instrumenter": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.6.tgz", - "integrity": "sha512-BoNu0QaD5hhcbEVUsvmYDqUOu4HItNBMPUkj6aDCfpLxae5vstH3zsCRVqRcElbfqVhmRzD23w8+9In9M0Fajg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.9.tgz", + "integrity": "sha512-R4L//OeQzLiVHkMLJcQ387aaOEXjP28m5sLJZIPI97PQNCrY/vD+aMWGDb4f5DOgCT7e248BEfpnlW5ZwZnnRA==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.1.6", + "@storybook/preview-api": "8.1.9", "@vitest/utils": "^1.3.1", "util": "^0.12.4" }, @@ -6013,9 +6013,9 @@ } }, "node_modules/@storybook/manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.6.tgz", - "integrity": "sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.9.tgz", + "integrity": "sha512-sp1N7ZgOtGK5uhCgwuPQlJ4JYKr3TyNeahotwAf2FUb5n70YyXDzqoqO8q8H0y9NarX+EcP1gJ4GmpT9+qTxsQ==", "dev": true, "funding": { "type": "opencollective", @@ -6023,20 +6023,20 @@ } }, "node_modules/@storybook/manager-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.6.tgz", - "integrity": "sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.9.tgz", + "integrity": "sha512-iafn/C9Bg9UHae7FoL5rNLCeQQnzvm+kKRlQzP5iVSJurnaYnajzej4baoZmF/eZJTFLdyp8klsqcl+NLJh8iA==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/router": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/router": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -6050,9 +6050,9 @@ } }, "node_modules/@storybook/node-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.6.tgz", - "integrity": "sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.9.tgz", + "integrity": "sha512-X5YGkJOui+m3TXqbf7HODzrf4VdzamtlUXlD08Qm36JJD/qJJZVhSivzkQR4uom/VW+ejChM2ETgw41SrK0vJA==", "dev": true, "funding": { "type": "opencollective", @@ -6060,9 +6060,9 @@ } }, "node_modules/@storybook/preview": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.6.tgz", - "integrity": "sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.9.tgz", + "integrity": "sha512-yLwe9RJRlF+h9D73pyo4fUXFxN/krTgLKT08IoyWwq7/onzVlujYdDl56EsM+Aw5OktBuwAvTiaw0WCdiFP4sA==", "dev": true, "funding": { "type": "opencollective", @@ -6070,17 +6070,17 @@ } }, "node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6096,9 +6096,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.6.tgz", - "integrity": "sha512-qP5nkAmpGFy/gshO+bVjRo1rgo/6UVDElgOd2dlUtYnfdPONiOfWko2XGYKKfxa6Cp7KU35JlZz/kHGqWG31zQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.9.tgz", + "integrity": "sha512-nRpw1SxkSCf8+MrsgL37lpihcr0fwtG0tHShW6F2+Lrx0nlzaOTH/VOvAwZJLNYpqddqln6vQ6Yk7Wxvw2IIkw==", "dev": true, "funding": { "type": "opencollective", @@ -6110,12 +6110,12 @@ } }, "node_modules/@storybook/router": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.6.tgz", - "integrity": "sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.9.tgz", + "integrity": "sha512-b7e/pnqfYLD3oxdStnAZI+Gxp0Bodk3q5Jo9FUoiSNZaa3Pu8conq+jsyyXT19uDZtWwOursBKVvDM2/dtHGLg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -6125,14 +6125,14 @@ } }, "node_modules/@storybook/telemetry": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.6.tgz", - "integrity": "sha512-qNWjQPF6ufRvLCAavulhNYoqldDIeBvioFuCjLlwbw3BZw3ck7pwh1vZg4AJ0SAfzbnpnXPGrHe31gnxV0D6tw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.9.tgz", + "integrity": "sha512-ayNt4g6MKIQCj5fPmB2WhYbEEH+AMVswUOedFp2DtPojeDnVJMp38lSFykTbjaq+/HrDpnoZn6fG4pd+05N+dg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/csf-tools": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/csf-tools": "8.1.9", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -6145,15 +6145,15 @@ } }, "node_modules/@storybook/test": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.6.tgz", - "integrity": "sha512-tyexfYPtOHP83pMHggoGdHadfqh/veLdS+APHxt12zmCNUobxOxnuWmImXThQiyLlXTWecreLvlMvgAIjziBsA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.9.tgz", + "integrity": "sha512-7b9PFHh+1XJz2Cge6FZTyZZHJfGelr7GB7RtTvsWY17+gYBzhbiv1Oqrj0+RKRZtyjfG0lAJ6fiyXETBevXmDw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/instrumenter": "8.1.6", - "@storybook/preview-api": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/instrumenter": "8.1.9", + "@storybook/preview-api": "8.1.9", "@testing-library/dom": "^9.3.4", "@testing-library/jest-dom": "^6.4.2", "@testing-library/user-event": "^14.5.2", @@ -6214,13 +6214,13 @@ } }, "node_modules/@storybook/theming": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", - "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.9.tgz", + "integrity": "sha512-CVM3F4Fa9cIFL4u/BhbANWytShBFeFBZeCFwvcJizJUL+nSgVlxeYilxwQB/1AxyJn/+OprW3nCw5aSbui/EEA==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -6242,12 +6242,12 @@ } }, "node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -6257,15 +6257,15 @@ } }, "node_modules/@storybook/vue3": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-8.1.6.tgz", - "integrity": "sha512-akftOru2PN7WXd7LClOlovhPz6iZaS+bxAACdeBnBwvhNTlaN9bWc/pbLEFk6BisVXMKNPzW3XgTb9XN+QRZdA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-8.1.9.tgz", + "integrity": "sha512-i63cwrPWYPMW7tGmWsVdlda3qJb9UGTt6Vl+HJ2Pirx0mJ+x2o0LA2fIyHyaFZf9wCu4bG1dkSmg7k3zag6I7g==", "dev": true, "dependencies": { - "@storybook/docs-tools": "8.1.6", + "@storybook/docs-tools": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@vue/compiler-core": "^3.0.0", "lodash": "^4.17.21", "ts-dedent": "^2.0.0", @@ -6284,15 +6284,15 @@ } }, "node_modules/@storybook/vue3-vite": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-8.1.6.tgz", - "integrity": "sha512-laxxfpjtWyW1lgHlqxsq5UXvWXr7X5MC3SYhndRa+0WWIo7/eWfl8C/lO0abdSbvV3s+KeS5xhAky4WOf7W37Q==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-8.1.9.tgz", + "integrity": "sha512-75tn8OIAIUDNLqlX8kGdzmaAiBC4pKS17JyBPEFm/EXdsfuLcq7LMzwWkr50x1dOxs3D6nNN1tRZyftU8uA1rA==", "dev": true, "dependencies": { - "@storybook/builder-vite": "8.1.6", - "@storybook/core-server": "8.1.6", - "@storybook/types": "8.1.6", - "@storybook/vue3": "8.1.6", + "@storybook/builder-vite": "8.1.9", + "@storybook/core-server": "8.1.9", + "@storybook/types": "8.1.9", + "@storybook/vue3": "8.1.9", "find-package-json": "^1.2.0", "magic-string": "^0.30.0", "typescript": "^5.0.0", @@ -6549,12 +6549,12 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", - "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.6.tgz", + "integrity": "sha512-8qpnGVincVDLEcQXWaHOf6zmlbwTKc6Us6PPu4CRnPXCzo2OGBS5cwgMMOWdxDpEz1mkbvXHpEy99M5Yvt682w==", "dev": true, "dependencies": { - "@adobe/css-tools": "^4.3.2", + "@adobe/css-tools": "^4.4.0", "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", @@ -6953,9 +6953,9 @@ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" }, "node_modules/@types/lodash": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", - "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==", "dev": true }, "node_modules/@types/markdown-it": { @@ -7050,9 +7050,9 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -7152,21 +7152,19 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", - "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/type-utils": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { @@ -7186,72 +7184,16 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.0.tgz", + "integrity": "sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4" }, "engines": { @@ -7294,13 +7236,13 @@ "dev": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7311,13 +7253,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", - "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -7338,9 +7280,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -7361,9 +7303,9 @@ "dev": true }, "node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7374,13 +7316,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7402,9 +7344,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -7418,18 +7360,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7437,13 +7367,10 @@ "dev": true }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7451,25 +7378,16 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7482,46 +7400,13 @@ "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/types": "7.13.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -7911,21 +7796,56 @@ } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", - "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.29.tgz", + "integrity": "sha512-zygDcEtn8ZimDlrEQyLUovoWgKQic6aEQqRXce2WXBvSeHbEbcAsXyCk9oG33ZkyWH4sl9D3tkYc1idoOkdqZQ==", "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.27", - "@vue/compiler-dom": "3.4.27", - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27", + "@babel/parser": "^7.24.7", + "@vue/compiler-core": "3.4.29", + "@vue/compiler-dom": "3.4.29", + "@vue/compiler-ssr": "3.4.29", + "@vue/shared": "3.4.29", "estree-walker": "^2.0.2", "magic-string": "^0.30.10", "postcss": "^8.4.38", "source-map-js": "^1.2.0" } }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-core": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.29.tgz", + "integrity": "sha512-TFKiRkKKsRCKvg/jTSSKK7mYLJEQdUiUfykbG49rubC9SfDyvT2JrzTReopWlz2MxqeLyxh9UZhvxEIBgAhtrg==", + "dependencies": { + "@babel/parser": "^7.24.7", + "@vue/shared": "3.4.29", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-dom": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.29.tgz", + "integrity": "sha512-A6+iZ2fKIEGnfPJejdB7b1FlJzgiD+Y/sxxKwJWg1EbJu6ZPgzaPQQ51ESGNv0CP6jm6Z7/pO6Ia8Ze6IKrX7w==", + "dependencies": { + "@vue/compiler-core": "3.4.29", + "@vue/shared": "3.4.29" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-ssr": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.29.tgz", + "integrity": "sha512-rFbwCmxJ16tDp3N8XCx5xSQzjhidYjXllvEcqX/lopkoznlNPz3jyy0WGJCyhAaVQK677WWFt3YO/WUEkMMUFQ==", + "dependencies": { + "@vue/compiler-dom": "3.4.29", + "@vue/shared": "3.4.29" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/shared": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.29.tgz", + "integrity": "sha512-hQ2gAQcBO/CDpC82DCrinJNgOHI2v+FA7BDW4lMSPeBpQ7sRe2OLHWe5cph1s7D8DUQAwRt18dBDfJJ220APEA==" + }, "node_modules/@vue/compiler-ssr": { "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", @@ -8004,40 +7924,478 @@ "vue": "3.4.27" } }, - "node_modules/@vue/shared": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" - }, - "node_modules/@vue/test-utils": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", - "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", - "dev": true, - "dependencies": { - "js-beautify": "^1.14.9", - "vue-component-type-helpers": "^2.0.0" + "node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + }, + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, + "dependencies": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, + "node_modules/@vuepress/bundler-vite": { + "version": "2.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.13.tgz", + "integrity": "sha512-dzBM0eH0VvdsMB0+Y1sMpEfTz/elWytTNdjon7LUbda3oHMQOO+IwP0PcA7VNAqqnvMplMhawocaMC+STupymA==", + "devOptional": true, + "dependencies": { + "@vitejs/plugin-vue": "^5.0.5", + "@vuepress/client": "2.0.0-rc.13", + "@vuepress/core": "2.0.0-rc.13", + "@vuepress/shared": "2.0.0-rc.13", + "@vuepress/utils": "2.0.0-rc.13", + "autoprefixer": "^10.4.19", + "connect-history-api-fallback": "^2.0.0", + "postcss": "^8.4.38", + "postcss-load-config": "^5.1.0", + "rollup": "^4.18.0", + "vite": "5.2.11 || >5.2.12 <5.3.0", + "vue": "^3.4.27", + "vue-router": "^4.3.2" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "devOptional": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, - "node_modules/@vuepress/bundler-vite": { - "version": "2.0.0-rc.13", - "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.13.tgz", - "integrity": "sha512-dzBM0eH0VvdsMB0+Y1sMpEfTz/elWytTNdjon7LUbda3oHMQOO+IwP0PcA7VNAqqnvMplMhawocaMC+STupymA==", + "node_modules/@vuepress/bundler-vite/node_modules/vite": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz", + "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==", "devOptional": true, "dependencies": { - "@vitejs/plugin-vue": "^5.0.5", - "@vuepress/client": "2.0.0-rc.13", - "@vuepress/core": "2.0.0-rc.13", - "@vuepress/shared": "2.0.0-rc.13", - "@vuepress/utils": "2.0.0-rc.13", - "autoprefixer": "^10.4.19", - "connect-history-api-fallback": "^2.0.0", + "esbuild": "^0.20.1", "postcss": "^8.4.38", - "postcss-load-config": "^5.1.0", - "rollup": "^4.18.0", - "vite": "5.2.11 || >5.2.12 <5.3.0", - "vue": "^3.4.27", - "vue-router": "^4.3.2" + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, "node_modules/@vuepress/cli": { @@ -10612,9 +10970,9 @@ } }, "node_modules/chromatic": { - "version": "11.5.3", - "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.5.3.tgz", - "integrity": "sha512-EtDDXA4OdhsjE0IuLr5AZvOX+ZYXgqdRPtdTAQrM3nImjlteQ5biBmdEEEcdAXDTPU881rEUaUIy2owecB0wYg==", + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.5.4.tgz", + "integrity": "sha512-+J+CopeUSyGUIQJsU6X7CfvSmeVBs0j6LZ9AgF4+XTjI4pFmUiUXsTc00rH9x9W1jCppOaqDXv2kqJJXGDK3mA==", "dev": true, "bin": { "chroma": "dist/bin.js", @@ -10709,9 +11067,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz", - "integrity": "sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "dependencies": { "string-width": "^4.2.0" @@ -11708,9 +12066,9 @@ } }, "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", "dev": true, "dependencies": { "address": "^1.0.1", @@ -11719,12 +12077,15 @@ "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/detect-port/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -12905,15 +13266,18 @@ } }, "node_modules/eslint-plugin-security": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.0.tgz", - "integrity": "sha512-2Ij7PkmXIF2cKwoVkEgemwoXbOnxg5UfdhdcpNxZwJxC/10dbsdhHISrTyJ/n8DUkt3yiN6P1ywEgcMGjIwHIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz", + "integrity": "sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==", "dev": true, "dependencies": { "safe-regex": "^2.1.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-plugin-storybook": { @@ -14054,9 +14418,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.237.2", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.237.2.tgz", - "integrity": "sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.238.0.tgz", + "integrity": "sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==", "dev": true, "engines": { "node": ">=0.4.0" @@ -21005,9 +21369,9 @@ } }, "node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -21195,12 +21559,12 @@ "peer": true }, "node_modules/pug": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", - "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", "dev": true, "dependencies": { - "pug-code-gen": "^3.0.2", + "pug-code-gen": "^3.0.3", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", "pug-linker": "^4.0.0", @@ -21222,25 +21586,25 @@ } }, "node_modules/pug-code-gen": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", - "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", "dev": true, "dependencies": { "constantinople": "^4.0.1", "doctypes": "^1.1.0", "js-stringify": "^1.0.2", "pug-attrs": "^3.0.0", - "pug-error": "^2.0.0", - "pug-runtime": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", "void-elements": "^3.1.0", "with": "^7.0.0" } }, "node_modules/pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", "dev": true }, "node_modules/pug-filters": { @@ -23335,9 +23699,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.77.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.4.tgz", - "integrity": "sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.5.tgz", + "integrity": "sha512-oDfX1mukIlxacPdQqNb6mV2tVCrnE+P3nVYioy72V5tlk56CPNcO4TCuFcaCRKKfJ1M3lH95CleRS+dVKL2qMg==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -23893,12 +24257,12 @@ "dev": true }, "node_modules/storybook": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.6.tgz", - "integrity": "sha512-qouQEB+sSb9ktE6fGVoBy6CLEUq4NOqDUpt/EhnITaWqzUeAZSQXTcoHg9DXhTMiynnbfqsUcZuK9PZOjgt7/w==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.9.tgz", + "integrity": "sha512-Jymrfn299+MJBIZVDYPJlIGJMZM33udFCjbeRdOHIXF2BfpqOSS2FoEfmlp3zya3gwyZDq/BE7uiBc7HIVZa4g==", "dev": true, "dependencies": { - "@storybook/cli": "8.1.6" + "@storybook/cli": "8.1.9" }, "bin": { "sb": "index.js", @@ -25253,9 +25617,9 @@ } }, "node_modules/tocbot": { - "version": "4.27.19", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.27.19.tgz", - "integrity": "sha512-0yu8k0L3gCQ1OVNZnKqpbZp+kLd6qtlNEBxsb+e0G/bS0EXMl2tWqWi1Oy9knRX8rTPYfOxd/sI/OzAj3JowGg==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", + "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==", "dev": true }, "node_modules/toidentifier": { @@ -25465,9 +25829,9 @@ "dev": true }, "node_modules/tsx": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.1.tgz", - "integrity": "sha512-k/6h17jA1KfUR7SpcteOa880zGmF56s8gMIcSqUR5avyNFi9nlCEKpMiHLrzrqyARGr52A/JablmGey1DEWbCA==", + "version": "4.15.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.6.tgz", + "integrity": "sha512-is0VQQlfNZRHEuSSTKA6m4xw74IU4AizmuB6lAYLRt9XtuyeQnyJYexhNZOPCB59SqC4JzmSzPnHGBXxf3k0hA==", "devOptional": true, "dependencies": { "esbuild": "~0.21.4", @@ -26776,9 +27140,9 @@ } }, "node_modules/vike": { - "version": "0.4.174", - "resolved": "https://registry.npmjs.org/vike/-/vike-0.4.174.tgz", - "integrity": "sha512-RgicUKxcm6SsOoyJWx3W853qvS8vigZjdKc2OzrGMxSfmvwHAzWtYO69MELWB8jZRDmALwDOuzCpmHUV2n2fbw==", + "version": "0.4.176", + "resolved": "https://registry.npmjs.org/vike/-/vike-0.4.176.tgz", + "integrity": "sha512-myaTgwzeNOeC/ZrNrrJrPbzJrTNj/d/sTD1h7oXaqYUdNEaYDAJrZBWerIZXPRyDfH6GW+Mxby4bTthAq3Uovw==", "dependencies": { "@brillout/import": "^0.2.3", "@brillout/json-serializer": "^0.5.10", @@ -26822,11 +27186,11 @@ } }, "node_modules/vite": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz", - "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", "dependencies": { - "esbuild": "^0.20.1", + "esbuild": "^0.21.3", "postcss": "^8.4.38", "rollup": "^4.13.0" }, @@ -27131,9 +27495,9 @@ "devOptional": true }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -27146,9 +27510,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -27161,9 +27525,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -27176,9 +27540,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -27191,9 +27555,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -27206,9 +27570,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -27221,9 +27585,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -27236,9 +27600,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -27251,9 +27615,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -27266,9 +27630,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -27281,9 +27645,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -27296,9 +27660,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -27311,9 +27675,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -27326,9 +27690,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -27341,9 +27705,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -27356,9 +27720,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -27371,9 +27735,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -27386,9 +27750,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -27401,9 +27765,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -27416,9 +27780,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -27431,9 +27795,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -27446,9 +27810,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -27461,9 +27825,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -27476,9 +27840,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -27487,29 +27851,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/vitest": { @@ -28242,6 +28606,22 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/vue/node_modules/@vue/compiler-sfc": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", + "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/compiler-core": "3.4.27", + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, "node_modules/vuepress": { "version": "2.0.0-rc.13", "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.13.tgz", diff --git a/admin/package.json b/admin/package.json index 062e76c547..81389a4d16 100644 --- a/admin/package.json +++ b/admin/package.json @@ -67,7 +67,7 @@ "@types/express": "^4.17.21", "@types/node": "^20.14.2", "@vitejs/plugin-vue": "^5.0.5", - "@vue/compiler-sfc": "^3.4.27", + "@vue/compiler-sfc": "^3.4.29", "@vue/server-renderer": "3.4.27", "@vuepress/theme-default": "^2.0.0-rc.35", "compression": "^1.7.4", @@ -75,13 +75,13 @@ "express": "^4.19.2", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", - "sass": "^1.77.4", + "sass": "^1.77.5", "sass-loader": "^14.2.1", "sirv": "^2.0.4", "ts-node": "^10.9.2", "typescript": "^5.4.5", - "vike": "^0.4.174", - "vite": "^5.2.13", + "vike": "^0.4.176", + "vite": "^5.3.1", "vue": "3.4.27", "vue-i18n": "^9.13.1", "vuetify": "^3.5.15" @@ -90,20 +90,20 @@ "@eslint-community/eslint-plugin-eslint-comments": "^4.3.0", "@intlify/eslint-plugin-vue-i18n": "^2.0.0", "@pinia/testing": "^0.1.3", - "@storybook/addon-essentials": "^8.1.6", - "@storybook/addon-interactions": "^8.1.6", - "@storybook/addon-links": "^8.1.6", - "@storybook/blocks": "^8.0.10", + "@storybook/addon-essentials": "^8.1.9", + "@storybook/addon-interactions": "^8.1.9", + "@storybook/addon-links": "^8.1.9", + "@storybook/blocks": "^8.1.9", "@storybook/test-runner": "^0.18.2", "@storybook/testing-library": "^0.2.2", - "@storybook/vue3": "^8.1.6", - "@storybook/vue3-vite": "^8.1.6", - "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", + "@storybook/vue3": "^8.1.9", + "@storybook/vue3-vite": "^8.1.9", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "@vitest/coverage-v8": "^1.6.0", "@vue/test-utils": "^2.4.6", "@vuepress/bundler-vite": "^2.0.0-rc.9", - "chromatic": "^11.5.3", + "chromatic": "^11.5.4", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", @@ -112,14 +112,14 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-storybook": "^0.8.0", "eslint-plugin-vitest": "^0.4.1", "eslint-plugin-vue": "^9.26.0", "eslint-plugin-vuetify": "^2.4.0", "eslint-plugin-yml": "^1.14.0", "happy-dom": "^14.12.0", - "prettier": "^3.3.1", + "prettier": "^3.3.2", "react": "^18.3.1", "react-dom": "^18.3.1", "remark-cli": "^12.0.1", @@ -127,14 +127,14 @@ "remark-preset-lint-consistent": "^6.0.0", "remark-preset-lint-markdown-style-guide": "^6.0.0", "remark-preset-lint-recommended": "^7.0.0", - "storybook": "^8.1.6", + "storybook": "^8.1.9", "stylelint": "^16.6.1", "stylelint-config-css-modules": "^4.4.0", "stylelint-config-recess-order": "^5.0.1", "stylelint-config-recommended-vue": "^1.5.0", "stylelint-config-standard": "^36.0.0", "stylelint-config-standard-scss": "^13.1.0", - "tsx": "^4.15.1", + "tsx": "^4.15.6", "vite-plugin-checker": "^0.6.4", "vite-plugin-compression": "^0.5.1", "vite-plugin-vuetify": "^2.0.3", diff --git a/backend/jest.config.json b/backend/jest.config.json index 9a5b9b93cd..3f2fd5d188 100644 --- a/backend/jest.config.json +++ b/backend/jest.config.json @@ -14,9 +14,9 @@ "coverageThreshold": { "global": { "statements": 96, - "branches": 89, - "functions": 95, - "lines": 96 + "branches": 87, + "functions": 94, + "lines": 97 } }, "modulePathIgnorePatterns": ["/build/"], diff --git a/backend/package-lock.json b/backend/package-lock.json index a6b4e2450f..4702f7f16f 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -17,16 +17,16 @@ "class-validator": "^0.14.1", "dotenv": "^16.4.5", "fast-xml-parser": "^4.4.0", - "graphql": "^16.8.1", + "graphql": "^16.8.2", "graphql-scalars": "^1.23.0", "jsonwebtoken": "^9.0.2", "prisma": "^5.15.0", "prisma-extension-soft-delete": "^1.0.1", "reflect-metadata": "^0.2.2", "tsconfig-paths": "^4.2.0", - "tslog": "^4.9.2", + "tslog": "^4.9.3", "type-graphql": "^2.0.0-rc.1", - "uuid": "^9.0.1" + "uuid": "^10.0.0" }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.3.0", @@ -34,25 +34,26 @@ "@types/jsonwebtoken": "^9.0.6", "@types/node": "^20.14.2", "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^7.10.0", - "@typescript-eslint/parser": "^7.10.0", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "@vuepress/bundler-vite": "^2.0.0-rc.9", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jest": "^28.6.0", "eslint-plugin-json": "^3.1.0", "eslint-plugin-n": "^16.6.2", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-promise": "^6.2.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-type-graphql": "^1.0.0", "eslint-plugin-yml": "^1.14.0", + "graphql-tag": "^2.12.6", "jest": "^29.7.0", "nodemon": "^3.1.3", - "prettier": "^3.3.1", + "prettier": "^3.3.2", "remark-cli": "^12.0.1", "remark-gfm": "^4.0.0", "remark-preset-lint-consistent": "^6.0.0", @@ -332,6 +333,18 @@ "node": ">=12" } }, + "node_modules/@apollo/server/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@apollo/server/node_modules/value-or-promise": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", @@ -3131,16 +3144,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz", - "integrity": "sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/type-utils": "7.10.0", - "@typescript-eslint/utils": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3164,15 +3177,15 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.10.0.tgz", - "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/typescript-estree": "7.10.0" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3205,15 +3218,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz", - "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.0.tgz", + "integrity": "sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/typescript-estree": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4" }, "engines": { @@ -3233,13 +3246,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", - "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0" + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3250,13 +3263,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz", - "integrity": "sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.10.0", - "@typescript-eslint/utils": "7.10.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3277,15 +3290,15 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.10.0.tgz", - "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.10.0", - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/typescript-estree": "7.10.0" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3299,9 +3312,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", - "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3312,13 +3325,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", - "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.10.0", - "@typescript-eslint/visitor-keys": "7.10.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3486,12 +3499,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", - "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/types": "7.13.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4764,11 +4777,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -6367,9 +6380,9 @@ } }, "node_modules/eslint-plugin-jest": { - "version": "28.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.5.0.tgz", - "integrity": "sha512-6np6DGdmNq/eBbA7HOUNV8fkfL86PYwBfwyb8n23FXgJNTR8+ot3smRHjza9LGsBBZRypK3qyF79vMjohIL8eQ==", + "version": "28.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", + "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" @@ -6587,27 +6600,33 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz", + "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-security": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.0.tgz", - "integrity": "sha512-2Ij7PkmXIF2cKwoVkEgemwoXbOnxg5UfdhdcpNxZwJxC/10dbsdhHISrTyJ/n8DUkt3yiN6P1ywEgcMGjIwHIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz", + "integrity": "sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==", "dev": true, "dependencies": { "safe-regex": "^2.1.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-plugin-type-graphql": { @@ -7025,9 +7044,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7477,9 +7496,9 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "version": "16.8.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.2.tgz", + "integrity": "sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -7509,6 +7528,22 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -11259,9 +11294,9 @@ } }, "node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -13921,9 +13956,9 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tslog": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/tslog/-/tslog-4.9.2.tgz", - "integrity": "sha512-wBM+LRJoNl34Bdu8mYEFxpvmOUedpNUwMNQB/NcuPIZKwdDde6xLHUev3bBjXQU7gdurX++X/YE7gLH8eXYsiQ==", + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-4.9.3.tgz", + "integrity": "sha512-oDWuGVONxhVEBtschLf2cs/Jy8i7h1T+CpdkTNWQgdAF7DhRo2G8vMCgILKe7ojdEkLhICWgI1LYSSKaJsRgcw==", "engines": { "node": ">=16" }, @@ -14598,9 +14633,9 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" diff --git a/backend/package.json b/backend/package.json index 91a8841643..74e32ab889 100644 --- a/backend/package.json +++ b/backend/package.json @@ -43,16 +43,16 @@ "class-validator": "^0.14.1", "dotenv": "^16.4.5", "fast-xml-parser": "^4.4.0", - "graphql": "^16.8.1", + "graphql": "^16.8.2", "graphql-scalars": "^1.23.0", "jsonwebtoken": "^9.0.2", "prisma": "^5.15.0", "prisma-extension-soft-delete": "^1.0.1", "reflect-metadata": "^0.2.2", "tsconfig-paths": "^4.2.0", - "tslog": "^4.9.2", + "tslog": "^4.9.3", "type-graphql": "^2.0.0-rc.1", - "uuid": "^9.0.1" + "uuid": "^10.0.0" }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.3.0", @@ -60,25 +60,26 @@ "@types/jsonwebtoken": "^9.0.6", "@types/node": "^20.14.2", "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^7.10.0", - "@typescript-eslint/parser": "^7.10.0", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "@vuepress/bundler-vite": "^2.0.0-rc.9", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jest": "^28.6.0", "eslint-plugin-json": "^3.1.0", "eslint-plugin-n": "^16.6.2", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-promise": "^6.2.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-type-graphql": "^1.0.0", "eslint-plugin-yml": "^1.14.0", + "graphql-tag": "^2.12.6", "jest": "^29.7.0", "nodemon": "^3.1.3", - "prettier": "^3.3.1", + "prettier": "^3.3.2", "remark-cli": "^12.0.1", "remark-gfm": "^4.0.0", "remark-preset-lint-consistent": "^6.0.0", @@ -95,6 +96,7 @@ "#config/*": "./src/config/*", "#graphql/*": "./src/graphql/*", "#inputs/*": "./src/graphql/inputs/*", + "#models/*": "./src/graphql/models/*", "#src/*": "./src/*", "#test/*": "./test/*", "#types/*": "./src/graphql/types/*" diff --git a/backend/src/api/BBB.spec.ts b/backend/src/api/BBB.spec.ts index 8c78de8a69..3544887775 100644 --- a/backend/src/api/BBB.spec.ts +++ b/backend/src/api/BBB.spec.ts @@ -2,8 +2,23 @@ import { AxiosHeaders, InternalAxiosRequestConfig } from 'axios' import { CONFIG } from '#config/config' +import logger from '#src/logger' -import { createChecksum, addChecksumParam, joinMeetingLink } from './BBB' +import { + createChecksum, + addChecksumParam, + joinMeetingLink, + axiosInstance, + getMeetings, + MeetingInfo, + createMeeting, +} from './BBB' + +jest.mock('#src/logger', () => { + return { + error: jest.fn(), + } +}) // values taken form https://docs.bigbluebutton.org/development/api/#usage CONFIG.BBB_SHARED_SECRET = '639259d4-9dd8-4b25-bf01-95f9567eaf4b' @@ -100,3 +115,426 @@ describe('joinMeetingLink', () => { ) }) }) + +describe('getMeetings', () => { + const axiosInstanceGetSpy = jest.spyOn(axiosInstance, 'get') + + let result: MeetingInfo[] + + beforeEach(() => { + jest.clearAllMocks() + }) + + describe('with axios error', () => { + beforeEach(async () => { + axiosInstanceGetSpy.mockRejectedValue('Ouch!') + await getMeetings() + }) + + it('logs get meetings error', () => { + // eslint-disable-next-line @typescript-eslint/unbound-method + expect(logger.error).toBeCalledWith('getMeetings with error', 'Ouch!') + }) + }) + + describe('with parser error', () => { + beforeEach(async () => { + axiosInstanceGetSpy.mockResolvedValue({ data: 'No XML!' }) + await getMeetings() + }) + + it('logs get meetings error with type error', () => { + // eslint-disable-next-line @typescript-eslint/unbound-method + expect(logger.error).toBeCalledWith( + 'getMeetings with error', + new TypeError(`Cannot read properties of undefined (reading 'returncode')`), + ) + }) + }) + + describe('with no meeting', () => { + beforeEach(async () => { + axiosInstanceGetSpy.mockResolvedValue({ + data: ` + + SUCCESS + + noMeetings + no meetings were found on this server + +`, + }) + result = await getMeetings() + }) + + it('logs get meetings error with type error', () => { + expect(result).toEqual([]) + }) + }) + + describe('with one meeting', () => { + beforeEach(async () => { + axiosInstanceGetSpy.mockResolvedValue({ + data: ` + + SUCCESS + + + Dreammall Entwicklung + Dreammall-Entwicklung + 258ea7269760758304b6b8494f17e9bf69dc1efe-1718196455938 + 1718196455938 + Wed Jun 12 12:47:35 UTC 2024 + 29682 + 613-555-1234 + 2HZnUWpn + sVNzFAOV + true + 0 + true + false + false + 1718196455941 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + + + w_wqbogvg9stgr + Peter Lustig + MODERATOR + true + true + false + false + HTML5 + + + + + false + + + +`, + }) + result = await getMeetings() + }) + + it('returns the meeting', () => { + expect(result).toEqual([ + { + attendeePW: '2HZnUWpn', + attendees: { + attendee: { + clientType: 'HTML5', + fullName: 'Peter Lustig', + hasJoinedVoice: false, + hasVideo: false, + isListeningOnly: true, + isPresenter: true, + role: 'MODERATOR', + userID: 'w_wqbogvg9stgr', + }, + }, + createDate: 'Wed Jun 12 12:47:35 UTC 2024', + createTime: 1718196455938, + dialNumber: '613-555-1234', + duration: 0, + endTime: 0, + hasBeenForciblyEnded: false, + hasUserJoined: true, + internalMeetingID: '258ea7269760758304b6b8494f17e9bf69dc1efe-1718196455938', + isBreakout: false, + listenerCount: 1, + maxUsers: 0, + meetingID: 'Dreammall-Entwicklung', + meetingName: 'Dreammall Entwicklung', + metadata: '', + moderatorCount: 1, + moderatorPW: 'sVNzFAOV', + participantCount: 1, + recording: false, + running: true, + startTime: 1718196455941, + videoCount: 0, + voiceBridge: 29682, + voiceParticipantCount: 0, + }, + ]) + }) + }) + + describe('with two meetings', () => { + beforeEach(async () => { + axiosInstanceGetSpy.mockResolvedValue({ + data: ` + + SUCCESS + + + Dreammall Entwicklung + Dreammall-Entwicklung + 258ea7269760758304b6b8494f17e9bf69dc1efe-1718196455938 + 1718196455938 + Wed Jun 12 12:47:35 UTC 2024 + 29682 + 613-555-1234 + 2HZnUWpn + sVNzFAOV + true + 0 + true + false + false + 1718196455941 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + + + w_wqbogvg9stgr + Peter Lustig + MODERATOR + true + true + false + false + HTML5 + + + + + false + + + Dreammall Entwicklung + Dreammall-Entwicklung + 258ea7269760758304b6b8494f17e9bf69dc1efe-1718196455938 + 1718196455938 + Wed Jun 12 12:47:35 UTC 2024 + 29682 + 613-555-1234 + 2HZnUWpn + sVNzFAOV + true + 0 + true + false + false + 1718196455941 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + + + w_wqbogvg9stgr + Peter Lustig + MODERATOR + true + true + false + false + HTML5 + + + + + false + + + +`, + }) + result = await getMeetings() + }) + + it('returns the meeting', () => { + expect(result).toEqual([ + { + attendeePW: '2HZnUWpn', + attendees: { + attendee: { + clientType: 'HTML5', + fullName: 'Peter Lustig', + hasJoinedVoice: false, + hasVideo: false, + isListeningOnly: true, + isPresenter: true, + role: 'MODERATOR', + userID: 'w_wqbogvg9stgr', + }, + }, + createDate: 'Wed Jun 12 12:47:35 UTC 2024', + createTime: 1718196455938, + dialNumber: '613-555-1234', + duration: 0, + endTime: 0, + hasBeenForciblyEnded: false, + hasUserJoined: true, + internalMeetingID: '258ea7269760758304b6b8494f17e9bf69dc1efe-1718196455938', + isBreakout: false, + listenerCount: 1, + maxUsers: 0, + meetingID: 'Dreammall-Entwicklung', + meetingName: 'Dreammall Entwicklung', + metadata: '', + moderatorCount: 1, + moderatorPW: 'sVNzFAOV', + participantCount: 1, + recording: false, + running: true, + startTime: 1718196455941, + videoCount: 0, + voiceBridge: 29682, + voiceParticipantCount: 0, + }, + { + attendeePW: '2HZnUWpn', + attendees: { + attendee: { + clientType: 'HTML5', + fullName: 'Peter Lustig', + hasJoinedVoice: false, + hasVideo: false, + isListeningOnly: true, + isPresenter: true, + role: 'MODERATOR', + userID: 'w_wqbogvg9stgr', + }, + }, + createDate: 'Wed Jun 12 12:47:35 UTC 2024', + createTime: 1718196455938, + dialNumber: '613-555-1234', + duration: 0, + endTime: 0, + hasBeenForciblyEnded: false, + hasUserJoined: true, + internalMeetingID: '258ea7269760758304b6b8494f17e9bf69dc1efe-1718196455938', + isBreakout: false, + listenerCount: 1, + maxUsers: 0, + meetingID: 'Dreammall-Entwicklung', + meetingName: 'Dreammall Entwicklung', + metadata: '', + moderatorCount: 1, + moderatorPW: 'sVNzFAOV', + participantCount: 1, + recording: false, + running: true, + startTime: 1718196455941, + videoCount: 0, + voiceBridge: 29682, + voiceParticipantCount: 0, + }, + ]) + }) + }) + + describe('with returncode ERROR', () => { + beforeEach(async () => { + axiosInstanceGetSpy.mockResolvedValue({ + data: ` + + ERROR + Something went wrong + +`, + }) + await getMeetings() + }) + + it('logs parser error', () => { + // eslint-disable-next-line @typescript-eslint/unbound-method + expect(logger.error).toBeCalledWith('parse getMeetings with error', { + response: { + message: 'Something went wrong', + returncode: 'ERROR', + }, + }) + }) + }) +}) + +describe('createMeeting', () => { + const axiosInstancePostSpy = jest.spyOn(axiosInstance, 'post') + + describe('with success', () => { + beforeEach(() => { + jest.clearAllMocks() + axiosInstancePostSpy.mockResolvedValue({ + data: ` + + SUCCESS + Dreammall-Entwicklung + 258ea7269760758304b6b8494f17e9bf69dc1efe-1718289413143 + bbb-none + 5ixnD4hJ + cakLrzBr + 1718289413143 + 09746 + 613-555-1234 + Thu Jun 13 14:36:53 UTC 2024 + false + 0 + false + + + +`, + }) + }) + + it('returns create meeting response', async () => { + await expect( + createMeeting({ + name: 'Peter Lustig', + meetingID: 'Peters Raum', + }), + ).resolves.toEqual({ + returncode: 'SUCCESS', + meetingID: 'Dreammall-Entwicklung', + internalMeetingID: '258ea7269760758304b6b8494f17e9bf69dc1efe-1718289413143', + parentMeetingID: 'bbb-none', + attendeePW: '5ixnD4hJ', + moderatorPW: 'cakLrzBr', + createTime: 1718289413143, + voiceBridge: 9746, + dialNumber: '613-555-1234', + createDate: 'Thu Jun 13 14:36:53 UTC 2024', + hasUserJoined: false, + duration: 0, + hasBeenForciblyEnded: false, + messageKey: '', + message: '', + }) + }) + }) + + describe('with error', () => { + beforeEach(() => { + axiosInstancePostSpy.mockRejectedValue('Aua!') + }) + + it('logs create meeting error', async () => { + await createMeeting({ + name: 'Peter Lustig', + meetingID: 'Peters Raum', + }) + // eslint-disable-next-line @typescript-eslint/unbound-method + expect(logger.error).toBeCalledWith('createMeeting with error', 'Aua!') + }) + }) +}) diff --git a/backend/src/api/BBB.ts b/backend/src/api/BBB.ts index 06cf9c43e8..34cea1c296 100644 --- a/backend/src/api/BBB.ts +++ b/backend/src/api/BBB.ts @@ -5,10 +5,11 @@ import axios, { InternalAxiosRequestConfig } from 'axios' import { XMLParser } from 'fast-xml-parser' import { CONFIG } from '#config/config' +import logger from '#src/logger' const parser = new XMLParser() -const axiosInstance = axios.create({ +export const axiosInstance = axios.create({ baseURL: CONFIG.BBB_URL, timeout: 25000, headers: { @@ -64,7 +65,18 @@ interface CreateMeetingResponse { message: string } -interface MeetingInfo { +export type AttendeeInfo = { + userID: string + fullName: string + role: string + isPresenter: boolean + isListeningOnly: boolean + hasJoinedVoice: boolean + hasVideo: boolean + clientType: string +} + +export type MeetingInfo = { meetingName: string meetingID: string internalMeetingID: string @@ -87,17 +99,17 @@ interface MeetingInfo { videoCount: number maxUsers: number moderatorCount: number - attendees: string + attendees: string | { attendee: AttendeeInfo[] | AttendeeInfo } metadata: string - isBreakout: string + isBreakout: boolean } -interface GetMeetingsResponse { +type GetMeetingsResponse = { returncode: string - meetings: string | { meeting: MeetingInfo[] } + meetings: { meeting: MeetingInfo[] } | string } -export const getMeetings = async () => { +export const getMeetings = async (): Promise => { try { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { data } = await axiosInstance.get('/getMeetings') @@ -105,11 +117,20 @@ export const getMeetings = async () => { const parsed: { response: GetMeetingsResponse } = parser.parse(data as string) - return parsed.response + if (parsed.response.returncode === 'SUCCESS') { + if (typeof parsed.response.meetings === 'string') return [] + if (Array.isArray(parsed.response.meetings?.meeting)) { + return parsed.response.meetings.meeting + } else { + return [parsed.response.meetings.meeting] + } + } else { + logger.error('parse getMeetings with error', parsed) + } } catch (err) { - // eslint-disable-next-line no-console - console.log(err) + logger.error('getMeetings with error', err) } + return [] } interface CreateMeetingOptions { @@ -118,7 +139,9 @@ interface CreateMeetingOptions { // welcome?: string } -export const createMeeting = async (options: CreateMeetingOptions) => { +export const createMeeting = async ( + options: CreateMeetingOptions, +): Promise => { const { name, meetingID /*, welcome */ } = options try { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -139,8 +162,8 @@ export const createMeeting = async (options: CreateMeetingOptions) => { } = parser.parse(data as string) return parsed.response } catch (err) { - // eslint-disable-next-line no-console - console.log(err) + logger.error('createMeeting with error', err) + return null } } @@ -162,6 +185,17 @@ export const joinMeetingLink = (options: JoinMeetinLinkOptions): string => { return CONFIG.BBB_URL + 'join?' + params + '&checksum=' + checksum } +const handleOpenRomms = async (): Promise => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const rooms = await getMeetings() + // console.log(rooms.map((m) => m.attendees?.attendee)) +} + +export const checkForOpenRooms = (): void => { + void handleOpenRomms() + setTimeout(checkForOpenRooms, 60 * 1000) +} + /* export const listHooks = async () => { try { @@ -172,4 +206,5 @@ export const listHooks = async () => { } } + */ diff --git a/backend/src/graphql/models/AttendeeModel.ts b/backend/src/graphql/models/AttendeeModel.ts new file mode 100644 index 0000000000..80bc7949b4 --- /dev/null +++ b/backend/src/graphql/models/AttendeeModel.ts @@ -0,0 +1,13 @@ +import { ObjectType, Field } from 'type-graphql' + +import { AttendeeInfo } from '#src/api/BBB' + +@ObjectType() +export class Attendee { + constructor(attendee: AttendeeInfo) { + this.fullName = attendee.fullName + } + + @Field() + fullName: string +} diff --git a/backend/src/graphql/models/RoomModel.ts b/backend/src/graphql/models/RoomModel.ts new file mode 100644 index 0000000000..d9032688cb --- /dev/null +++ b/backend/src/graphql/models/RoomModel.ts @@ -0,0 +1,55 @@ +import { Meeting } from '@prisma/client' +import { ObjectType, Field, Int } from 'type-graphql' + +import { MeetingInfo, AttendeeInfo } from '#src/api/BBB' + +import { Attendee } from './AttendeeModel' + +@ObjectType() +export class Room { + constructor(meeting: Meeting) { + this.id = meeting.id + this.name = meeting.name + } + + @Field(() => Int) + id: number + + @Field() + name: string +} + +@ObjectType() +export class OpenRoom { + constructor(meeting: MeetingInfo, link: string) { + this.meetingID = meeting.meetingID + this.meetingName = meeting.meetingName + this.startTime = meeting.startTime + this.participantCount = meeting.participantCount + this.attendees = + typeof meeting.attendees !== 'string' + ? Array.isArray(meeting.attendees.attendee) + ? meeting.attendees.attendee.map((a: AttendeeInfo) => new Attendee(a)) + : [meeting.attendees.attendee] + : [] + this.joinLink = link + } + + @Field() + meetingID: string + + @Field() + meetingName: string + + @Field(() => Int) + startTime: number + + @Field(() => Int) + participantCount: number + + @Field(() => [Attendee]) + attendees: Attendee[] + + @Field() + joinLink: string +} diff --git a/backend/src/graphql/resolvers/RoomResolver.spec.ts b/backend/src/graphql/resolvers/RoomResolver.spec.ts index df0f4fc641..fd0ceb482c 100644 --- a/backend/src/graphql/resolvers/RoomResolver.spec.ts +++ b/backend/src/graphql/resolvers/RoomResolver.spec.ts @@ -1,6 +1,8 @@ import { ApolloServer } from '@apollo/server' +// eslint-disable-next-line n/no-unpublished-import +import { gql } from 'graphql-tag' -import { createMeeting, joinMeetingLink } from '#api/BBB' +import { createMeeting, joinMeetingLink, getMeetings } from '#api/BBB' import { prisma } from '#src/prisma' import { createTestServer } from '#src/server/server' @@ -8,6 +10,7 @@ jest.mock('#api/BBB') const createMeetingMock = createMeeting as jest.MockedFunction const joinMeetingLinkMock = joinMeetingLink as jest.MockedFunction +const getMeetingsMock = getMeetings as jest.MockedFunction let testServer: ApolloServer @@ -63,6 +66,113 @@ describe('RoomResolver', () => { }) }) }) + + describe('openRooms', () => { + it('throws access denied', async () => { + await expect( + testServer.executeOperation({ + query: 'query { openRooms { meetingName } }', + }), + ).resolves.toMatchObject({ + body: { + kind: 'single', + singleResult: { + data: null, + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + errors: expect.arrayContaining([ + expect.objectContaining({ + message: 'Access denied! You need to be authenticated to perform this action!', + }), + ]), + }, + }, + }) + }) + }) + + describe('joinRoom', () => { + const query = gql` + query ($roomId: Int!, $userName: String!) { + joinRoom(roomId: $roomId, userName: $userName) + } + ` + describe('No room in DB', () => { + it('returns null', async () => { + await expect( + testServer.executeOperation({ + query, + variables: { + userName: 'Pinky Pie', + roomId: 25, + }, + }), + ).resolves.toMatchObject({ + body: { + kind: 'single', + singleResult: { + data: { joinRoom: null }, + + errors: undefined, + }, + }, + }) + }) + }) + + describe('room in DB', () => { + let roomId: number + beforeEach(async () => { + joinMeetingLinkMock.mockReturnValue('https://my-link') + const meeting = await prisma.meeting.create({ + data: { + name: 'Pony Ville', + meetingID: 'Pony Ville', + }, + }) + roomId = meeting.id + }) + + afterEach(async () => { + await prisma.meeting.deleteMany() + }) + + it('returns link to room', async () => { + await expect( + testServer.executeOperation({ + query, + variables: { + userName: 'Pinky Pie', + roomId, + }, + }), + ).resolves.toMatchObject({ + body: { + kind: 'single', + singleResult: { + data: { joinRoom: 'https://my-link' }, + + errors: undefined, + }, + }, + }) + }) + + it('calls join meeting link', async () => { + await testServer.executeOperation({ + query, + variables: { + userName: 'Pinky Pie', + roomId, + }, + }) + expect(joinMeetingLinkMock).toHaveBeenCalledWith({ + fullName: 'Pinky Pie', + meetingID: 'Pony Ville', + password: '', + }) + }) + }) + }) }) describe('authorized', () => { @@ -180,7 +290,7 @@ describe('RoomResolver', () => { describe('joinMyRoom', () => { describe('createMeeting returns undefined', () => { it('returns null', async () => { - createMeetingMock.mockResolvedValue(undefined) + createMeetingMock.mockResolvedValue(null) await expect( testServer.executeOperation( { @@ -248,5 +358,288 @@ describe('RoomResolver', () => { }) }) }) + + describe('openRooms', () => { + describe('no meetings', () => { + beforeEach(() => { + getMeetingsMock.mockResolvedValue([]) + }) + + it('returns empty array', async () => { + await expect( + testServer.executeOperation( + { + query: 'query { openRooms { meetingName } }', + }, + { + contextValue: { + token: 'token', + }, + }, + ), + ).resolves.toMatchObject({ + body: { + kind: 'single', + singleResult: { + data: { openRooms: [] }, + errors: undefined, + }, + }, + }) + }) + }) + + describe('no attendees', () => { + beforeEach(() => { + getMeetingsMock.mockResolvedValue([ + { + meetingName: 'Dreammall Entwicklung', + meetingID: 'Dreammall-Entwicklung', + internalMeetingID: '258ea7269760758304b6b8494f17e9bf69dc1efe-1718189921310', + createTime: 1718189921310, + createDate: new Date('Wed Jun 12 10:58:41 UTC 2024'), + voiceBridge: 96378, + dialNumber: '613-555-1234', + attendeePW: 'MqgUFwdD', + moderatorPW: 'mTtxYGo2', + running: true, + duration: 0, + hasUserJoined: true, + recording: false, + hasBeenForciblyEnded: false, + startTime: 1718189, + endTime: 0, + participantCount: 0, + listenerCount: 1, + voiceParticipantCount: 0, + videoCount: 0, + maxUsers: 0, + moderatorCount: 1, + attendees: '', + metadata: '', + isBreakout: false, + }, + ]) + }) + + it('returns empty array', async () => { + await expect( + testServer.executeOperation( + { + query: + 'query { openRooms { meetingName meetingID participantCount startTime joinLink attendees { fullName } } }', + }, + { + contextValue: { + token: 'token', + }, + }, + ), + ).resolves.toMatchObject({ + body: { + kind: 'single', + singleResult: { + data: { + openRooms: [ + { + meetingName: 'Dreammall Entwicklung', + meetingID: 'Dreammall-Entwicklung', + participantCount: 0, + startTime: 1718189, + attendees: [], + joinLink: 'https://my-link', + }, + ], + }, + errors: undefined, + }, + }, + }) + }) + }) + + describe('one attendee', () => { + beforeEach(() => { + getMeetingsMock.mockResolvedValue([ + { + meetingName: 'Dreammall Entwicklung', + meetingID: 'Dreammall-Entwicklung', + internalMeetingID: '258ea7269760758304b6b8494f17e9bf69dc1efe-1718189921310', + createTime: 1718189921310, + createDate: new Date('Wed Jun 12 10:58:41 UTC 2024'), + voiceBridge: 96378, + dialNumber: '613-555-1234', + attendeePW: 'MqgUFwdD', + moderatorPW: 'mTtxYGo2', + running: true, + duration: 0, + hasUserJoined: true, + recording: false, + hasBeenForciblyEnded: false, + startTime: 1718189, + endTime: 0, + participantCount: 0, + listenerCount: 1, + voiceParticipantCount: 0, + videoCount: 0, + maxUsers: 0, + moderatorCount: 1, + attendees: { + attendee: { + userID: '1234', + fullName: 'Peter Lustig', + role: 'moderator', + isPresenter: false, + isListeningOnly: false, + hasJoinedVoice: true, + hasVideo: true, + clientType: 'html5', + }, + }, + metadata: '', + isBreakout: false, + }, + ]) + }) + + it('returns empty array', async () => { + await expect( + testServer.executeOperation( + { + query: + 'query { openRooms { meetingName meetingID participantCount startTime joinLink attendees { fullName } } }', + }, + { + contextValue: { + token: 'token', + }, + }, + ), + ).resolves.toMatchObject({ + body: { + kind: 'single', + singleResult: { + data: { + openRooms: [ + { + meetingName: 'Dreammall Entwicklung', + meetingID: 'Dreammall-Entwicklung', + participantCount: 0, + startTime: 1718189, + joinLink: 'https://my-link', + attendees: [ + { + fullName: 'Peter Lustig', + }, + ], + }, + ], + }, + errors: undefined, + }, + }, + }) + }) + }) + + describe('some attendee', () => { + beforeEach(() => { + getMeetingsMock.mockResolvedValue([ + { + meetingName: 'Dreammall Entwicklung', + meetingID: 'Dreammall-Entwicklung', + internalMeetingID: '258ea7269760758304b6b8494f17e9bf69dc1efe-1718189921310', + createTime: 1718189921310, + createDate: new Date('Wed Jun 12 10:58:41 UTC 2024'), + voiceBridge: 96378, + dialNumber: '613-555-1234', + attendeePW: 'MqgUFwdD', + moderatorPW: 'mTtxYGo2', + running: true, + duration: 0, + hasUserJoined: true, + recording: false, + hasBeenForciblyEnded: false, + startTime: 1718189, + endTime: 0, + participantCount: 0, + listenerCount: 1, + voiceParticipantCount: 0, + videoCount: 0, + maxUsers: 0, + moderatorCount: 1, + attendees: { + attendee: [ + { + userID: '1234', + fullName: 'Peter Lustig', + role: 'moderator', + isPresenter: false, + isListeningOnly: false, + hasJoinedVoice: true, + hasVideo: true, + clientType: 'html5', + }, + { + userID: '4321', + fullName: 'Bibi Bloxberg', + role: 'attendee', + isPresenter: false, + isListeningOnly: false, + hasJoinedVoice: true, + hasVideo: true, + clientType: 'html5', + }, + ], + }, + metadata: '', + isBreakout: false, + }, + ]) + }) + + it('returns empty array', async () => { + await expect( + testServer.executeOperation( + { + query: + 'query { openRooms { meetingName meetingID participantCount startTime joinLink attendees { fullName } } }', + }, + { + contextValue: { + token: 'token', + }, + }, + ), + ).resolves.toMatchObject({ + body: { + kind: 'single', + singleResult: { + data: { + openRooms: [ + { + meetingName: 'Dreammall Entwicklung', + meetingID: 'Dreammall-Entwicklung', + participantCount: 0, + startTime: 1718189, + joinLink: 'https://my-link', + attendees: [ + { + fullName: 'Peter Lustig', + }, + { + fullName: 'Bibi Bloxberg', + }, + ], + }, + ], + }, + errors: undefined, + }, + }, + }) + }) + }) + }) }) }) diff --git a/backend/src/graphql/resolvers/RoomResolver.ts b/backend/src/graphql/resolvers/RoomResolver.ts index 2a7d8cb10b..4c7e9676a9 100644 --- a/backend/src/graphql/resolvers/RoomResolver.ts +++ b/backend/src/graphql/resolvers/RoomResolver.ts @@ -1,38 +1,12 @@ -import { Meeting } from '@prisma/client' -import { - ObjectType, - Field, - Int, - Resolver, - Mutation, - Query, - Authorized, - Ctx, - Arg, -} from 'type-graphql' +import { Resolver, Mutation, Query, Authorized, Ctx, Arg, Int } from 'type-graphql' // eslint-disable-next-line import/named import { v4 as uuidv4 } from 'uuid' -// import { createMeeting, getMeetings } from '#api/BBB' -import { createMeeting, joinMeetingLink } from '#api/BBB' +import { createMeeting, joinMeetingLink, getMeetings, MeetingInfo } from '#api/BBB' +import { Room, OpenRoom } from '#models/RoomModel' import { prisma } from '#src/prisma' import { Context } from '#src/server/context' -@ObjectType() -class Room { - constructor(meeting: Meeting) { - this.id = meeting.id - this.name = meeting.name - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - @Field((type) => Int) - id: number - - @Field() - name: string -} - @Resolver() export class RoomResolver { @Authorized() @@ -95,6 +69,43 @@ export class RoomResolver { }) } + @Authorized() + @Query(() => [OpenRoom]) + async openRooms(@Ctx() context: Context): Promise { + const { user } = context + if (!user) return [] + const meetings = await getMeetings() + return meetings.map( + (m: MeetingInfo) => + new OpenRoom( + m, + joinMeetingLink({ + fullName: user.name, + meetingID: m.meetingID, + password: '', + }), + ), + ) + } + + @Query(() => String, { nullable: true }) + async joinRoom( + @Arg('userName') userName: string, + @Arg('roomId', () => Int) roomId: number, + ): Promise { + const meeting = await prisma.meeting.findUnique({ + where: { + id: roomId, + }, + }) + if (!meeting) return null + return joinMeetingLink({ + fullName: userName, + meetingID: meeting.meetingID, + password: meeting.attendeePW ? meeting.attendeePW : '', + }) + } + /* @Query(() => Boolean) async test(): Promise { diff --git a/backend/src/index.ts b/backend/src/index.ts index 989709d679..14101b73f2 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,5 +1,7 @@ // eslint-disable-next-line import/no-unassigned-import import 'reflect-metadata' +// import { checkForOpenRooms } from '#api/BBB' + import logger from './logger' import { prisma } from './prisma' import { listen } from './server/server' @@ -7,6 +9,7 @@ import { listen } from './server/server' export const main = async (): Promise => { const url = await listen(4000) logger.info(`🚀 Server is ready at ${url}`) + // checkForOpenRooms() } void main() diff --git a/backend/tsconfig.json b/backend/tsconfig.json index bb2f2c6800..a468f2eb68 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -12,6 +12,7 @@ "#config/*": ["./src/config/*"], "#graphql/*": ["./src/graphql/*"], "#inputs/*": ["./src/graphql/inputs/*"], + "#models/*": ["./src/graphql/models/*"], "#src/*": ["./src/*"], "#test/*": ["./test/*"], "#types/*": ["./src/graphql/types/*"] diff --git a/frontend/.env.dist b/frontend/.env.dist index 6d21aeb2d5..97f0160a29 100644 --- a/frontend/.env.dist +++ b/frontend/.env.dist @@ -6,7 +6,7 @@ PUBLIC_ENV__AUTH__CLIENT_ID="G3g0sjCjph1NAyGeeu5Te5ltx1I7WZ0DGB8i6vOI" PUBLIC_ENV__AUTH__REDIRECT_URI="http://localhost:3000/auth" PUBLIC_ENV__AUTH__SILENT_REDIRECT_URI="http://localhost:3000/silent-refresh" PUBLIC_ENV__AUTH__RESPONSE_TYPE="code" -PUBLIC_ENV__AUTH__SCOPE="openid profile posts offline_access" +PUBLIC_ENV__AUTH__SCOPE="openid profile posts" PUBLIC_ENV__AUTH__UNAUTHORIZED_REDIRECT_URI="http://localhost:3001/" PUBLIC_ENV__AUTH__ADMIN_GROUP="authentik Admins" PUBLIC_ENV__AUTH__ADMIN_REDIRECT_URI="http://localhost:3002/signin" diff --git a/frontend/.storybook/ApolloWrapper.vue b/frontend/.storybook/ApolloWrapper.vue new file mode 100644 index 0000000000..63494c7c98 --- /dev/null +++ b/frontend/.storybook/ApolloWrapper.vue @@ -0,0 +1,33 @@ + + + diff --git a/frontend/.storybook/main.ts b/frontend/.storybook/main.ts index 508b3bc466..6a8696b9b8 100644 --- a/frontend/.storybook/main.ts +++ b/frontend/.storybook/main.ts @@ -6,6 +6,7 @@ const config: StorybookConfig = { '@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-interactions', + '@storybook/addon-viewport', ], framework: { name: '@storybook/vue3-vite', diff --git a/frontend/.storybook/preview.ts b/frontend/.storybook/preview.ts index ecbeb66cd9..3cf49fa6f0 100644 --- a/frontend/.storybook/preview.ts +++ b/frontend/.storybook/preview.ts @@ -9,6 +9,8 @@ import { withVuetifyTheme } from './withVuetifyTheme.decorator' import type { Preview } from '@storybook/vue3' +import { INITIAL_VIEWPORTS } from '@storybook/addon-viewport' + setup((app) => { // Registers your app's plugins into Storybook const pinia = createPinia() @@ -48,6 +50,9 @@ const preview: Preview = { date: /Date$/i, }, }, + viewport: { + viewports: INITIAL_VIEWPORTS, + }, }, } diff --git a/frontend/.storybook/withApollo.decorator.ts b/frontend/.storybook/withApollo.decorator.ts new file mode 100644 index 0000000000..834c136592 --- /dev/null +++ b/frontend/.storybook/withApollo.decorator.ts @@ -0,0 +1,14 @@ +import { h } from 'vue' + +import ApolloWrapper from './ApolloWrapper.vue' + +export const withApollo = (storyFn: () => any, context: { args: object }) => { + const story = storyFn() + + return () => { + return h(ApolloWrapper, null, { + // Puts your story into the wrapper's slot with your story args + story: () => h(story, { ...context.args }), + }) + } +} diff --git a/frontend/Dockerfile b/frontend/Dockerfile index dae836bb6d..e06183e001 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -93,13 +93,16 @@ RUN npm run build ################################################################################## # TEST ########################################################################### ################################################################################## -#FROM build as test +FROM base as test -# Install Additional Software -# RUN apk add --no-cache bash jq +# Copy everything +COPY . . +# npm install +RUN npm install --include=dev --frozen-lockfile --non-interactive +RUN npm run build # Run command -#CMD /bin/sh -c "yarn run dev" +CMD /bin/sh -c "npm run server:prod" ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # diff --git a/frontend/docker-compose.test.yml b/frontend/docker-compose.test.yml new file mode 100644 index 0000000000..591ff68002 --- /dev/null +++ b/frontend/docker-compose.test.yml @@ -0,0 +1,29 @@ +version: '3.4' + +services: + ####################################################### + # FRONTEND ############################################ + ####################################################### + frontend: + image: dreammall/frontend:local-test + build: + context: . + target: test + networks: + - external-net + - internal-net + ports: + - 3000:3000 + environment: + # Envs used in Dockerfile + # - DOCKER_WORKDIR="/app" + # - PORT=3000 + # - BUILD_DATE="1970-01-01T00:00:00.00Z" + # - BUILD_VERSION="0.0.0.0" + # - BUILD_COMMIT="0000000" + - NODE_ENV=production + +networks: + external-net: + internal-net: + internal: true diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 8ced061e12..6d549e59fd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@apollo/client": "^3.10.4", + "@apollo/client": "^3.10.5", "@intlify/unplugin-vue-i18n": "^4.0.0", "@mdi/font": "^7.4.47", "@types/compression": "^1.7.5", @@ -19,7 +19,7 @@ "@vue/apollo-composable": "^4.0.2", "@vue/apollo-option": "^4.0.0", "@vue/apollo-ssr": "^4.0.0", - "@vue/compiler-sfc": "^3.4.27", + "@vue/compiler-sfc": "^3.4.29", "@vue/server-renderer": "3.4.27", "@vuepress/theme-default": "^2.0.0-rc.35", "compression": "^1.7.4", @@ -31,38 +31,39 @@ "oidc-client-ts": "^3.0.1", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", - "sass": "^1.77.4", + "sass": "^1.77.5", "sass-loader": "^14.2.1", "sirv": "^2.0.4", "ts-node": "^10.9.2", "typescript": "^5.4.5", "vike": "^0.4.174", - "vite": "^5.2.13", + "vite": "^5.3.1", "vite-svg-loader": "^5.1.0", "vue": "3.4.27", "vue-i18n": "^9.13.1", + "vue3-toastify": "^0.2.1", "vuetify": "^3.5.17" }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.3.0", "@intlify/eslint-plugin-vue-i18n": "^2.0.0", "@pinia/testing": "^0.1.3", - "@storybook/addon-essentials": "^8.1.6", - "@storybook/addon-interactions": "^8.1.6", - "@storybook/addon-links": "^8.1.6", - "@storybook/blocks": "^8.0.10", + "@storybook/addon-essentials": "^8.1.9", + "@storybook/addon-interactions": "^8.1.9", + "@storybook/addon-links": "^8.1.9", + "@storybook/blocks": "^8.1.9", "@storybook/test-runner": "^0.18.2", "@storybook/testing-library": "^0.2.2", - "@storybook/vue3": "^8.1.6", - "@storybook/vue3-vite": "^8.1.6", + "@storybook/vue3": "^8.1.9", + "@storybook/vue3-vite": "^8.1.9", "@types/cookie": "^0.6.0", "@types/js-cookie": "^3.0.6", - "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "@vitest/coverage-v8": "^1.6.0", "@vue/test-utils": "^2.4.6", "@vuepress/bundler-vite": "^2.0.0-rc.9", - "chromatic": "^11.5.3", + "chromatic": "^11.5.4", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", @@ -71,7 +72,7 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-storybook": "^0.8.0", "eslint-plugin-vitest": "^0.4.1", "eslint-plugin-vue": "^9.26.0", @@ -79,7 +80,7 @@ "eslint-plugin-yml": "^1.14.0", "happy-dom": "^14.12.0", "mock-apollo-client": "^1.3.1", - "prettier": "^3.3.1", + "prettier": "^3.3.2", "react": "^18.3.1", "react-dom": "^18.3.1", "remark-cli": "^12.0.1", @@ -87,14 +88,14 @@ "remark-preset-lint-consistent": "^6.0.0", "remark-preset-lint-markdown-style-guide": "^6.0.0", "remark-preset-lint-recommended": "^7.0.0", - "storybook": "^8.1.6", + "storybook": "^8.1.9", "stylelint": "^16.6.1", "stylelint-config-css-modules": "^4.4.0", "stylelint-config-recess-order": "^5.0.1", "stylelint-config-recommended-vue": "^1.5.0", "stylelint-config-standard": "^36.0.0", "stylelint-config-standard-scss": "^13.1.0", - "tsx": "^4.15.1", + "tsx": "^4.15.5", "vite-plugin-checker": "^0.6.4", "vite-plugin-compression": "^0.5.1", "vite-plugin-vuetify": "^2.0.3", @@ -132,9 +133,9 @@ } }, "node_modules/@apollo/client": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.10.4.tgz", - "integrity": "sha512-51gk0xOwN6Ls1EbTG5svFva1kdm2APHYTzmFhaAdvUQoJFDxfc0UwQgDxGptzH84vkPlo1qunY1FuboyF9LI3Q==", + "version": "3.10.5", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.10.5.tgz", + "integrity": "sha512-bZh5wLAT8b4KdEmqnqiQeDUttnR+NJ+gDYSN8T+U0uFGN++5LO5PTwySih6kIU5ErGGGw4NHI94YdSET3uLuBA==", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "@wry/caches": "^1.0.0", @@ -5067,12 +5068,12 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.6.tgz", - "integrity": "sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.1.9.tgz", + "integrity": "sha512-7ZefE9AER42htn4McqMXcL2RDnflesIf4SxY7pCHpL7rUoldxfZ1DGGRgyKen00H6vx1LGzLRBN9fhBUf9XqCA==", "dev": true, "dependencies": { - "@storybook/core-events": "8.1.6", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -5085,9 +5086,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.6.tgz", - "integrity": "sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.1.9.tgz", + "integrity": "sha512-k2s7PNwy1ND7eJ7N2DnG508fztuXNH5Jq6Vbk8aoXPPRXfwybel299WRb4WJl7ZvZKcGtBoZ+mciopPkho3Lpg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5100,12 +5101,12 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.6.tgz", - "integrity": "sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.1.9.tgz", + "integrity": "sha512-B5+UFAnlu82QHX8bOHj022f3zi9rbqGxBqgLnx54ebl6ZgMEe9IGaOnGWyHjpFofy9yBX2Ti5+7ClvFhmyjAig==", "dev": true, "dependencies": { - "@storybook/blocks": "8.1.6", + "@storybook/blocks": "8.1.9", "dequal": "^2.0.2", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" @@ -5116,24 +5117,24 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.6.tgz", - "integrity": "sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.1.9.tgz", + "integrity": "sha512-dRSG54gSVn4qQc6u9ROYeDu4B0wJkr+fpS2AGwav2+KAM5kNw2ecsyhyreUhc4e/AwhAhGc49d7iQ3rjOHR//A==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", - "@storybook/csf-plugin": "8.1.6", - "@storybook/csf-tools": "8.1.6", + "@storybook/blocks": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/components": "8.1.9", + "@storybook/csf-plugin": "8.1.9", + "@storybook/csf-tools": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/react-dom-shim": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/react-dom-shim": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "fs-extra": "^11.1.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", @@ -5148,24 +5149,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.6.tgz", - "integrity": "sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "8.1.6", - "@storybook/addon-backgrounds": "8.1.6", - "@storybook/addon-controls": "8.1.6", - "@storybook/addon-docs": "8.1.6", - "@storybook/addon-highlight": "8.1.6", - "@storybook/addon-measure": "8.1.6", - "@storybook/addon-outline": "8.1.6", - "@storybook/addon-toolbars": "8.1.6", - "@storybook/addon-viewport": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.1.9.tgz", + "integrity": "sha512-VpEG+qmj7vKPMUSPKsGFwZgbm4QVM2bTqZEbW9zvPOFIbTKtrGaq/n/O0LhMramPkoQZKYKs/0i7OsEoZaOybQ==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "8.1.9", + "@storybook/addon-backgrounds": "8.1.9", + "@storybook/addon-controls": "8.1.9", + "@storybook/addon-docs": "8.1.9", + "@storybook/addon-highlight": "8.1.9", + "@storybook/addon-measure": "8.1.9", + "@storybook/addon-outline": "8.1.9", + "@storybook/addon-toolbars": "8.1.9", + "@storybook/addon-viewport": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/manager-api": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", "ts-dedent": "^2.0.0" }, "funding": { @@ -5174,9 +5175,9 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.6.tgz", - "integrity": "sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.1.9.tgz", + "integrity": "sha512-7jcjepeP/Z6XhKXKIfMqrM72tsTwo3wAaytuVWG9mHeNTTphepqO0YXZphaEh5EhupaT0DOYWT6jVxOkiw+xpA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5187,15 +5188,15 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.1.6.tgz", - "integrity": "sha512-/5i3wXuNnduTN807BNSX7nJ0a3eQPjN49yUAfLtYtIoNCEsLAza2F5yt8aadKOj1rR6xqROc7y8NMhhC5Cp50A==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.1.9.tgz", + "integrity": "sha512-R916xLxWrhNPujo63JHIn8pcwR9KpaME/WH1PGLFsvVS7R7gcTNsa/ZL2LanuG8tHtEcLAoGufXaeoZGmTCTIQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.1.6", - "@storybook/test": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/instrumenter": "8.1.9", + "@storybook/test": "8.1.9", + "@storybook/types": "8.1.9", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -5205,9 +5206,9 @@ } }, "node_modules/@storybook/addon-links": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.6.tgz", - "integrity": "sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.1.9.tgz", + "integrity": "sha512-gawakQHokGDLEDIyyJzxHB0d5AJi2sSLzoNc0cvewEE55i6T7jvpXpVqTu6/ZtVFZ+3x3gLIQ6Q3krNNIz6W2A==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -5228,9 +5229,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.6.tgz", - "integrity": "sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.1.9.tgz", + "integrity": "sha512-YHU4XQkpA1WxAOLeqnHdX9g0ubuHHDIqLkVjixt/BHejDwLcLzfSyKiX6o4xy+0MUilFDQD2Q/psiDHkLrvnVQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5242,9 +5243,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.6.tgz", - "integrity": "sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.1.9.tgz", + "integrity": "sha512-Y1jgsVtW87qBQfKFMFk8vinsjQq7/yOGygtj2PHIgZO4foOaqwVDq7ioHCogmrdOycfpeByCtT3nUFAXxZxMsw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5256,9 +5257,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.6.tgz", - "integrity": "sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.1.9.tgz", + "integrity": "sha512-aW+HsuC0iWjPSbJtxdbdGdCLXzV0dxPp8e4TPugT084ImTp+i+77xXUTl+PCylld8a51ulEssOxARewGN/QMsw==", "dev": true, "funding": { "type": "opencollective", @@ -5266,9 +5267,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.6.tgz", - "integrity": "sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.1.9.tgz", + "integrity": "sha512-ZCoqzNWp2w9TLJL8RC0fjv1RQcuGhwI64jjlGvszZm7TxP82C1SS71X/jbx5LWc2Dyl5xMt1/yOGFXvkAB2SUg==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -5279,23 +5280,23 @@ } }, "node_modules/@storybook/blocks": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.6.tgz", - "integrity": "sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.1.9.tgz", + "integrity": "sha512-AB7icCijK2rft5kmzFF7bHuTdVIf6u5r26r4auqYxxVsHV87+k12kLvC8AyEssVIKMo+2vzImmdlhIScpCjrdQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/components": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/components": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", - "@storybook/docs-tools": "8.1.6", + "@storybook/docs-tools": "8.1.9", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/manager-api": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/manager-api": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -5327,15 +5328,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.6.tgz", - "integrity": "sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.1.9.tgz", + "integrity": "sha512-CmDXVrx3moUde6VWmdb49eCYHNu4e2wxeANKSsW1yEC0OLysQ9N6W9B5CuVWeoV3axVX/tKDqC83YY/008/4Qg==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "8.1.6", - "@storybook/manager": "8.1.6", - "@storybook/node-logger": "8.1.6", + "@storybook/core-common": "8.1.9", + "@storybook/manager": "8.1.9", + "@storybook/node-logger": "8.1.9", "@types/ejs": "^3.1.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", "browser-assert": "^1.2.1", @@ -5353,20 +5354,20 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.1.6.tgz", - "integrity": "sha512-xbGxI7aVMNuLcAB41Z+Vjr+M1Kznvw/jJ8HP9cfmUl1cO7ysF8R9opVG1C+kMIXUIQAVeND+DUZgmUg2zGzH6A==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/csf-plugin": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.1.9.tgz", + "integrity": "sha512-OqjJne7x3l8yPMB3VTc9zbKYN5+9Yw/8cW9vK3N0rMObQa6be76JfJAgTFUGujp/GdVjYEiFI1Pu3b1wf5loWQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/csf-plugin": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^1.5.0", @@ -5399,13 +5400,13 @@ } }, "node_modules/@storybook/channels": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.6.tgz", - "integrity": "sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.1.9.tgz", + "integrity": "sha512-7dvzoHBJQDvG1PMJVLnsPw3xuQ6KMZBSOgzVrkFWi4f3j6zXjs7ADVo/uqIoLq8inziupz2himWFnUtl5moIUw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -5416,22 +5417,22 @@ } }, "node_modules/@storybook/cli": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.6.tgz", - "integrity": "sha512-xsFdBoAbo+2h/UCWuVXiH4Tu49iQ6d+3R1J8F2n4N6rAKxMqAb6fzYnH1GeRYeZk0HGqb2iNc4kBkxj0jW0rKw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.1.9.tgz", + "integrity": "sha512-+4DQJf5yrdmKrAs8sx0WvKu/ja49oOLQU2MxRPKhXW3bxDFjkTYvWuCKwSbMwUa7Npt96CK3bwAPP53jz/+mXA==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/types": "^7.24.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/core-server": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/codemod": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/core-server": "8.1.9", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/telemetry": "8.1.9", + "@storybook/types": "8.1.9", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -5630,9 +5631,9 @@ } }, "node_modules/@storybook/client-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.6.tgz", - "integrity": "sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.1.9.tgz", + "integrity": "sha512-sHX0UhAquhVCtbRtDNN5Ura8hUxRjZWKgQKt8NWQIt9hOSSurGJE3+93OzNAYDp54kh77QKY3qdZCgAJZuWZPw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5643,18 +5644,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.6.tgz", - "integrity": "sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.1.9.tgz", + "integrity": "sha512-thTdwiAO/eUUyiCzgkyGjA4fE3BAdXqf3WdTRjH4Vqk4yby9EalwcBitkj/M6bCDGjdoxU2q2ByUDD9opwyMiw==", "dev": true, "dependencies": { "@babel/core": "^7.24.4", "@babel/preset-env": "^7.24.4", "@babel/types": "^7.24.0", "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/types": "8.1.9", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^14.0.1", @@ -5714,19 +5715,19 @@ } }, "node_modules/@storybook/components": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.6.tgz", - "integrity": "sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.1.9.tgz", + "integrity": "sha512-YGDYTJfobtNDBJrvXNgmExX3LGnb9jGPGdroS4uHewLFaqEI3Fqu3RiFLaJf40TlZ27uWLprysdLRol8j+wYEw==", "dev": true, "dependencies": { "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "memoizerific": "^1.11.3", "util-deprecate": "^1.0.2" }, @@ -5740,15 +5741,15 @@ } }, "node_modules/@storybook/core-common": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.6.tgz", - "integrity": "sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.1.9.tgz", + "integrity": "sha512-+KReoo41FUknTxk3fbnoul995SnZdKAVSK6MuqKOQnC9PH6bh864k6i1LShVZx/wk3n25h9xorD3UgyRI6sZ0w==", "dev": true, "dependencies": { - "@storybook/core-events": "8.1.6", - "@storybook/csf-tools": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/core-events": "8.1.9", + "@storybook/csf-tools": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/types": "8.1.9", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", @@ -5822,9 +5823,9 @@ "dev": true }, "node_modules/@storybook/core-events": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.6.tgz", - "integrity": "sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.1.9.tgz", + "integrity": "sha512-c8MnBqUtTvIBNoDBBQQrFEy8pNAagcDryh5FM+T1SPBsH6j3fRSZwXMc6vvW2BYkQxJ67kpd7xrH7uapqhNEcg==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.7", @@ -5836,29 +5837,29 @@ } }, "node_modules/@storybook/core-server": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.6.tgz", - "integrity": "sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.1.9.tgz", + "integrity": "sha512-bn3M264vr3GY9kgAdRRIUdVV4PcUqtYvttQ/h6XDVJWC1UYUQW49zQNxQLQUXSQo4KLISnvTKHmP5qgbY6BASQ==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "8.1.6", - "@storybook/channels": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/builder-manager": "8.1.9", + "@storybook/channels": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", - "@storybook/csf-tools": "8.1.6", + "@storybook/csf-tools": "8.1.9", "@storybook/docs-mdx": "3.1.0-next.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "8.1.6", - "@storybook/manager-api": "8.1.6", - "@storybook/node-logger": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/telemetry": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/manager": "8.1.9", + "@storybook/manager-api": "8.1.9", + "@storybook/node-logger": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/telemetry": "8.1.9", + "@storybook/types": "8.1.9", "@types/detect-port": "^1.3.0", "@types/diff": "^5.0.9", "@types/node": "^18.0.0", @@ -5976,12 +5977,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.6.tgz", - "integrity": "sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.1.9.tgz", + "integrity": "sha512-OC3Z7lx5Tt3iNqVpfAykCKhmHyWXwjPvK0C0RubmKLRWdH66aKp2SzvqJSFppRGZySWKKJqSBGtjB/AsG/Do4Q==", "dev": true, "dependencies": { - "@storybook/csf-tools": "8.1.6", + "@storybook/csf-tools": "8.1.9", "unplugin": "^1.3.1" }, "funding": { @@ -5990,9 +5991,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.6.tgz", - "integrity": "sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.1.9.tgz", + "integrity": "sha512-nCYGNJOoBZjAdD1blTgS8/O0HwXaZ4cwUd8G9pQbsyt/cSW65clATeEV1rTTcR+G9JHnZBQ3jLAnH2dbFY0c8w==", "dev": true, "dependencies": { "@babel/generator": "^7.24.4", @@ -6000,7 +6001,7 @@ "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "@storybook/csf": "^0.1.7", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "fs-extra": "^11.1.0", "recast": "^0.23.5", "ts-dedent": "^2.0.0" @@ -6017,15 +6018,15 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.6.tgz", - "integrity": "sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.1.9.tgz", + "integrity": "sha512-ZGtlldQARXG+v8KtNq5dxtAfPLsaLFuV4gJQ4MHXcspQSKtQ6fq5k2IkxhKhDg4EEQ/lhSl8vUxws+W79xWbbg==", "dev": true, "dependencies": { - "@storybook/core-common": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/core-common": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -6056,16 +6057,16 @@ } }, "node_modules/@storybook/instrumenter": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.6.tgz", - "integrity": "sha512-BoNu0QaD5hhcbEVUsvmYDqUOu4HItNBMPUkj6aDCfpLxae5vstH3zsCRVqRcElbfqVhmRzD23w8+9In9M0Fajg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.1.9.tgz", + "integrity": "sha512-R4L//OeQzLiVHkMLJcQ387aaOEXjP28m5sLJZIPI97PQNCrY/vD+aMWGDb4f5DOgCT7e248BEfpnlW5ZwZnnRA==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.1.6", + "@storybook/preview-api": "8.1.9", "@vitest/utils": "^1.3.1", "util": "^0.12.4" }, @@ -6075,9 +6076,9 @@ } }, "node_modules/@storybook/manager": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.6.tgz", - "integrity": "sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.1.9.tgz", + "integrity": "sha512-sp1N7ZgOtGK5uhCgwuPQlJ4JYKr3TyNeahotwAf2FUb5n70YyXDzqoqO8q8H0y9NarX+EcP1gJ4GmpT9+qTxsQ==", "dev": true, "funding": { "type": "opencollective", @@ -6085,20 +6086,20 @@ } }, "node_modules/@storybook/manager-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.6.tgz", - "integrity": "sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.1.9.tgz", + "integrity": "sha512-iafn/C9Bg9UHae7FoL5rNLCeQQnzvm+kKRlQzP5iVSJurnaYnajzej4baoZmF/eZJTFLdyp8klsqcl+NLJh8iA==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/router": "8.1.6", - "@storybook/theming": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/router": "8.1.9", + "@storybook/theming": "8.1.9", + "@storybook/types": "8.1.9", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -6112,9 +6113,9 @@ } }, "node_modules/@storybook/node-logger": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.6.tgz", - "integrity": "sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.1.9.tgz", + "integrity": "sha512-X5YGkJOui+m3TXqbf7HODzrf4VdzamtlUXlD08Qm36JJD/qJJZVhSivzkQR4uom/VW+ejChM2ETgw41SrK0vJA==", "dev": true, "funding": { "type": "opencollective", @@ -6122,9 +6123,9 @@ } }, "node_modules/@storybook/preview": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.6.tgz", - "integrity": "sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.1.9.tgz", + "integrity": "sha512-yLwe9RJRlF+h9D73pyo4fUXFxN/krTgLKT08IoyWwq7/onzVlujYdDl56EsM+Aw5OktBuwAvTiaw0WCdiFP4sA==", "dev": true, "funding": { "type": "opencollective", @@ -6132,17 +6133,17 @@ } }, "node_modules/@storybook/preview-api": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.6.tgz", - "integrity": "sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.1.9.tgz", + "integrity": "sha512-deZoKsTHMbpzGOhboVdT/MHhafPKQyxo2tj1Zrb0GFfpabAUnJzVXRr93P5qCOKCuPQEwQyZx0ScW5qzY2JTrQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", + "@storybook/channels": "8.1.9", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", "@storybook/csf": "^0.1.7", "@storybook/global": "^5.0.0", - "@storybook/types": "8.1.6", + "@storybook/types": "8.1.9", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6158,9 +6159,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.6.tgz", - "integrity": "sha512-qP5nkAmpGFy/gshO+bVjRo1rgo/6UVDElgOd2dlUtYnfdPONiOfWko2XGYKKfxa6Cp7KU35JlZz/kHGqWG31zQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.1.9.tgz", + "integrity": "sha512-nRpw1SxkSCf8+MrsgL37lpihcr0fwtG0tHShW6F2+Lrx0nlzaOTH/VOvAwZJLNYpqddqln6vQ6Yk7Wxvw2IIkw==", "dev": true, "funding": { "type": "opencollective", @@ -6172,12 +6173,12 @@ } }, "node_modules/@storybook/router": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.6.tgz", - "integrity": "sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.1.9.tgz", + "integrity": "sha512-b7e/pnqfYLD3oxdStnAZI+Gxp0Bodk3q5Jo9FUoiSNZaa3Pu8conq+jsyyXT19uDZtWwOursBKVvDM2/dtHGLg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -6187,14 +6188,14 @@ } }, "node_modules/@storybook/telemetry": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.6.tgz", - "integrity": "sha512-qNWjQPF6ufRvLCAavulhNYoqldDIeBvioFuCjLlwbw3BZw3ck7pwh1vZg4AJ0SAfzbnpnXPGrHe31gnxV0D6tw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.1.9.tgz", + "integrity": "sha512-ayNt4g6MKIQCj5fPmB2WhYbEEH+AMVswUOedFp2DtPojeDnVJMp38lSFykTbjaq+/HrDpnoZn6fG4pd+05N+dg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-common": "8.1.6", - "@storybook/csf-tools": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-common": "8.1.9", + "@storybook/csf-tools": "8.1.9", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -6207,15 +6208,15 @@ } }, "node_modules/@storybook/test": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.6.tgz", - "integrity": "sha512-tyexfYPtOHP83pMHggoGdHadfqh/veLdS+APHxt12zmCNUobxOxnuWmImXThQiyLlXTWecreLvlMvgAIjziBsA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.1.9.tgz", + "integrity": "sha512-7b9PFHh+1XJz2Cge6FZTyZZHJfGelr7GB7RtTvsWY17+gYBzhbiv1Oqrj0+RKRZtyjfG0lAJ6fiyXETBevXmDw==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.1.6", - "@storybook/core-events": "8.1.6", - "@storybook/instrumenter": "8.1.6", - "@storybook/preview-api": "8.1.6", + "@storybook/client-logger": "8.1.9", + "@storybook/core-events": "8.1.9", + "@storybook/instrumenter": "8.1.9", + "@storybook/preview-api": "8.1.9", "@testing-library/dom": "^9.3.4", "@testing-library/jest-dom": "^6.4.2", "@testing-library/user-event": "^14.5.2", @@ -6276,13 +6277,13 @@ } }, "node_modules/@storybook/theming": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.6.tgz", - "integrity": "sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.1.9.tgz", + "integrity": "sha512-CVM3F4Fa9cIFL4u/BhbANWytShBFeFBZeCFwvcJizJUL+nSgVlxeYilxwQB/1AxyJn/+OprW3nCw5aSbui/EEA==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@storybook/client-logger": "8.1.6", + "@storybook/client-logger": "8.1.9", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -6304,12 +6305,12 @@ } }, "node_modules/@storybook/types": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.6.tgz", - "integrity": "sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.1.9.tgz", + "integrity": "sha512-temr7cNoBwu/+EF0jZ7aIfHtqwMqyevPLRfl/emkZM2t751NxbTkP1kxvfk9I0L8wF7mvVHXWn2iIM3QBqzWDw==", "dev": true, "dependencies": { - "@storybook/channels": "8.1.6", + "@storybook/channels": "8.1.9", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -6319,15 +6320,15 @@ } }, "node_modules/@storybook/vue3": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-8.1.6.tgz", - "integrity": "sha512-akftOru2PN7WXd7LClOlovhPz6iZaS+bxAACdeBnBwvhNTlaN9bWc/pbLEFk6BisVXMKNPzW3XgTb9XN+QRZdA==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-8.1.9.tgz", + "integrity": "sha512-i63cwrPWYPMW7tGmWsVdlda3qJb9UGTt6Vl+HJ2Pirx0mJ+x2o0LA2fIyHyaFZf9wCu4bG1dkSmg7k3zag6I7g==", "dev": true, "dependencies": { - "@storybook/docs-tools": "8.1.6", + "@storybook/docs-tools": "8.1.9", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.1.6", - "@storybook/types": "8.1.6", + "@storybook/preview-api": "8.1.9", + "@storybook/types": "8.1.9", "@vue/compiler-core": "^3.0.0", "lodash": "^4.17.21", "ts-dedent": "^2.0.0", @@ -6346,15 +6347,15 @@ } }, "node_modules/@storybook/vue3-vite": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-8.1.6.tgz", - "integrity": "sha512-laxxfpjtWyW1lgHlqxsq5UXvWXr7X5MC3SYhndRa+0WWIo7/eWfl8C/lO0abdSbvV3s+KeS5xhAky4WOf7W37Q==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-8.1.9.tgz", + "integrity": "sha512-75tn8OIAIUDNLqlX8kGdzmaAiBC4pKS17JyBPEFm/EXdsfuLcq7LMzwWkr50x1dOxs3D6nNN1tRZyftU8uA1rA==", "dev": true, "dependencies": { - "@storybook/builder-vite": "8.1.6", - "@storybook/core-server": "8.1.6", - "@storybook/types": "8.1.6", - "@storybook/vue3": "8.1.6", + "@storybook/builder-vite": "8.1.9", + "@storybook/core-server": "8.1.9", + "@storybook/types": "8.1.9", + "@storybook/vue3": "8.1.9", "find-package-json": "^1.2.0", "magic-string": "^0.30.0", "typescript": "^5.0.0", @@ -6611,12 +6612,12 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", - "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.6.tgz", + "integrity": "sha512-8qpnGVincVDLEcQXWaHOf6zmlbwTKc6Us6PPu4CRnPXCzo2OGBS5cwgMMOWdxDpEz1mkbvXHpEy99M5Yvt682w==", "dev": true, "dependencies": { - "@adobe/css-tools": "^4.3.2", + "@adobe/css-tools": "^4.4.0", "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", @@ -7035,9 +7036,9 @@ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" }, "node_modules/@types/lodash": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", - "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==", "dev": true }, "node_modules/@types/markdown-it": { @@ -7234,21 +7235,19 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", - "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/type-utils": "7.8.0", - "@typescript-eslint/utils": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", - "debug": "^4.3.4", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.6.0", "ts-api-utils": "^1.3.0" }, "engines": { @@ -7268,72 +7267,16 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.0.tgz", + "integrity": "sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4" }, "engines": { @@ -7376,13 +7319,13 @@ "dev": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", - "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0" + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7393,13 +7336,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", - "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.8.0", - "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -7420,9 +7363,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -7443,9 +7386,9 @@ "dev": true }, "node_modules/@typescript-eslint/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", - "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7456,13 +7399,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", - "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/visitor-keys": "7.8.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -7484,9 +7427,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -7500,18 +7443,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7519,13 +7450,10 @@ "dev": true }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7533,25 +7461,16 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", - "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.8.0", - "@typescript-eslint/types": "7.8.0", - "@typescript-eslint/typescript-estree": "7.8.0", - "semver": "^7.6.0" + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -7564,46 +7483,13 @@ "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", - "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/types": "7.13.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -8059,21 +7945,56 @@ } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", - "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.29.tgz", + "integrity": "sha512-zygDcEtn8ZimDlrEQyLUovoWgKQic6aEQqRXce2WXBvSeHbEbcAsXyCk9oG33ZkyWH4sl9D3tkYc1idoOkdqZQ==", "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.27", - "@vue/compiler-dom": "3.4.27", - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27", + "@babel/parser": "^7.24.7", + "@vue/compiler-core": "3.4.29", + "@vue/compiler-dom": "3.4.29", + "@vue/compiler-ssr": "3.4.29", + "@vue/shared": "3.4.29", "estree-walker": "^2.0.2", "magic-string": "^0.30.10", "postcss": "^8.4.38", "source-map-js": "^1.2.0" } }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-core": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.29.tgz", + "integrity": "sha512-TFKiRkKKsRCKvg/jTSSKK7mYLJEQdUiUfykbG49rubC9SfDyvT2JrzTReopWlz2MxqeLyxh9UZhvxEIBgAhtrg==", + "dependencies": { + "@babel/parser": "^7.24.7", + "@vue/shared": "3.4.29", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-dom": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.29.tgz", + "integrity": "sha512-A6+iZ2fKIEGnfPJejdB7b1FlJzgiD+Y/sxxKwJWg1EbJu6ZPgzaPQQ51ESGNv0CP6jm6Z7/pO6Ia8Ze6IKrX7w==", + "dependencies": { + "@vue/compiler-core": "3.4.29", + "@vue/shared": "3.4.29" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-ssr": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.29.tgz", + "integrity": "sha512-rFbwCmxJ16tDp3N8XCx5xSQzjhidYjXllvEcqX/lopkoznlNPz3jyy0WGJCyhAaVQK677WWFt3YO/WUEkMMUFQ==", + "dependencies": { + "@vue/compiler-dom": "3.4.29", + "@vue/shared": "3.4.29" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/shared": { + "version": "3.4.29", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.29.tgz", + "integrity": "sha512-hQ2gAQcBO/CDpC82DCrinJNgOHI2v+FA7BDW4lMSPeBpQ7sRe2OLHWe5cph1s7D8DUQAwRt18dBDfJJ220APEA==" + }, "node_modules/@vue/compiler-ssr": { "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", @@ -8103,89 +8024,527 @@ "vue-template-compiler": "^2.7.14" }, "peerDependencies": { - "typescript": "*" + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", + "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", + "dependencies": { + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", + "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", + "dependencies": { + "@vue/reactivity": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", + "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", + "dependencies": { + "@vue/runtime-core": "3.4.27", + "@vue/shared": "3.4.27", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", + "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", + "dependencies": { + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27" + }, + "peerDependencies": { + "vue": "3.4.27" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + }, + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, + "dependencies": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, + "node_modules/@vuepress/bundler-vite": { + "version": "2.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.13.tgz", + "integrity": "sha512-dzBM0eH0VvdsMB0+Y1sMpEfTz/elWytTNdjon7LUbda3oHMQOO+IwP0PcA7VNAqqnvMplMhawocaMC+STupymA==", + "devOptional": true, + "dependencies": { + "@vitejs/plugin-vue": "^5.0.5", + "@vuepress/client": "2.0.0-rc.13", + "@vuepress/core": "2.0.0-rc.13", + "@vuepress/shared": "2.0.0-rc.13", + "@vuepress/utils": "2.0.0-rc.13", + "autoprefixer": "^10.4.19", + "connect-history-api-fallback": "^2.0.0", + "postcss": "^8.4.38", + "postcss-load-config": "^5.1.0", + "rollup": "^4.18.0", + "vite": "5.2.11 || >5.2.12 <5.3.0", + "vue": "^3.4.27", + "vue-router": "^4.3.2" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "devOptional": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/@vuepress/bundler-vite/node_modules/vite": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz", + "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==", + "devOptional": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { - "typescript": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { "optional": true } } }, - "node_modules/@vue/reactivity": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", - "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", - "dependencies": { - "@vue/shared": "3.4.27" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", - "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", - "dependencies": { - "@vue/reactivity": "3.4.27", - "@vue/shared": "3.4.27" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", - "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", - "dependencies": { - "@vue/runtime-core": "3.4.27", - "@vue/shared": "3.4.27", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", - "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", - "dependencies": { - "@vue/compiler-ssr": "3.4.27", - "@vue/shared": "3.4.27" - }, - "peerDependencies": { - "vue": "3.4.27" - } - }, - "node_modules/@vue/shared": { - "version": "3.4.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", - "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" - }, - "node_modules/@vue/test-utils": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", - "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", - "dev": true, - "dependencies": { - "js-beautify": "^1.14.9", - "vue-component-type-helpers": "^2.0.0" - } - }, - "node_modules/@vuepress/bundler-vite": { - "version": "2.0.0-rc.13", - "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.13.tgz", - "integrity": "sha512-dzBM0eH0VvdsMB0+Y1sMpEfTz/elWytTNdjon7LUbda3oHMQOO+IwP0PcA7VNAqqnvMplMhawocaMC+STupymA==", - "devOptional": true, - "dependencies": { - "@vitejs/plugin-vue": "^5.0.5", - "@vuepress/client": "2.0.0-rc.13", - "@vuepress/core": "2.0.0-rc.13", - "@vuepress/shared": "2.0.0-rc.13", - "@vuepress/utils": "2.0.0-rc.13", - "autoprefixer": "^10.4.19", - "connect-history-api-fallback": "^2.0.0", - "postcss": "^8.4.38", - "postcss-load-config": "^5.1.0", - "rollup": "^4.18.0", - "vite": "5.2.11 || >5.2.12 <5.3.0", - "vue": "^3.4.27", - "vue-router": "^4.3.2" - } - }, "node_modules/@vuepress/cli": { "version": "2.0.0-rc.13", "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-rc.13.tgz", @@ -10802,9 +11161,9 @@ } }, "node_modules/chromatic": { - "version": "11.5.3", - "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.5.3.tgz", - "integrity": "sha512-EtDDXA4OdhsjE0IuLr5AZvOX+ZYXgqdRPtdTAQrM3nImjlteQ5biBmdEEEcdAXDTPU881rEUaUIy2owecB0wYg==", + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.5.4.tgz", + "integrity": "sha512-+J+CopeUSyGUIQJsU6X7CfvSmeVBs0j6LZ9AgF4+XTjI4pFmUiUXsTc00rH9x9W1jCppOaqDXv2kqJJXGDK3mA==", "dev": true, "bin": { "chroma": "dist/bin.js", @@ -10899,9 +11258,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.4.tgz", - "integrity": "sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "dependencies": { "string-width": "^4.2.0" @@ -11927,9 +12286,9 @@ } }, "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", "dev": true, "dependencies": { "address": "^1.0.1", @@ -11938,12 +12297,15 @@ "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/detect-port/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -13124,15 +13486,18 @@ } }, "node_modules/eslint-plugin-security": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.0.tgz", - "integrity": "sha512-2Ij7PkmXIF2cKwoVkEgemwoXbOnxg5UfdhdcpNxZwJxC/10dbsdhHISrTyJ/n8DUkt3yiN6P1ywEgcMGjIwHIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz", + "integrity": "sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==", "dev": true, "dependencies": { "safe-regex": "^2.1.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-plugin-storybook": { @@ -14273,9 +14638,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.237.2", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.237.2.tgz", - "integrity": "sha512-mvI/kdfr3l1waaPbThPA8dJa77nHXrfZIun+SWvFwSwDjmeByU7mGJGRmv1+7guU6ccyLV8e1lqZA1lD4iMGnQ==", + "version": "0.238.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.238.0.tgz", + "integrity": "sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==", "dev": true, "engines": { "node": ">=0.4.0" @@ -21314,9 +21679,9 @@ } }, "node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -21519,12 +21884,12 @@ "peer": true }, "node_modules/pug": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", - "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", "dev": true, "dependencies": { - "pug-code-gen": "^3.0.2", + "pug-code-gen": "^3.0.3", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", "pug-linker": "^4.0.0", @@ -21546,25 +21911,25 @@ } }, "node_modules/pug-code-gen": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", - "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", "dev": true, "dependencies": { "constantinople": "^4.0.1", "doctypes": "^1.1.0", "js-stringify": "^1.0.2", "pug-attrs": "^3.0.0", - "pug-error": "^2.0.0", - "pug-runtime": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", "void-elements": "^3.1.0", "with": "^7.0.0" } }, "node_modules/pug-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", - "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", "dev": true }, "node_modules/pug-filters": { @@ -23682,9 +24047,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.77.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.4.tgz", - "integrity": "sha512-vcF3Ckow6g939GMA4PeU7b2K/9FALXk2KF9J87txdHzXbUF9XRQRwSxcAs/fGaTnJeBFd7UoV22j3lzMLdM0Pw==", + "version": "1.77.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.5.tgz", + "integrity": "sha512-oDfX1mukIlxacPdQqNb6mV2tVCrnE+P3nVYioy72V5tlk56CPNcO4TCuFcaCRKKfJ1M3lH95CleRS+dVKL2qMg==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -24238,12 +24603,12 @@ "dev": true }, "node_modules/storybook": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.6.tgz", - "integrity": "sha512-qouQEB+sSb9ktE6fGVoBy6CLEUq4NOqDUpt/EhnITaWqzUeAZSQXTcoHg9DXhTMiynnbfqsUcZuK9PZOjgt7/w==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.1.9.tgz", + "integrity": "sha512-Jymrfn299+MJBIZVDYPJlIGJMZM33udFCjbeRdOHIXF2BfpqOSS2FoEfmlp3zya3gwyZDq/BE7uiBc7HIVZa4g==", "dev": true, "dependencies": { - "@storybook/cli": "8.1.6" + "@storybook/cli": "8.1.9" }, "bin": { "sb": "index.js", @@ -25646,9 +26011,9 @@ } }, "node_modules/tocbot": { - "version": "4.27.19", - "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.27.19.tgz", - "integrity": "sha512-0yu8k0L3gCQ1OVNZnKqpbZp+kLd6qtlNEBxsb+e0G/bS0EXMl2tWqWi1Oy9knRX8rTPYfOxd/sI/OzAj3JowGg==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.28.2.tgz", + "integrity": "sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==", "dev": true }, "node_modules/toidentifier": { @@ -25881,9 +26246,9 @@ "dev": true }, "node_modules/tsx": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.1.tgz", - "integrity": "sha512-k/6h17jA1KfUR7SpcteOa880zGmF56s8gMIcSqUR5avyNFi9nlCEKpMiHLrzrqyARGr52A/JablmGey1DEWbCA==", + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.5.tgz", + "integrity": "sha512-iKi8jQ2VBmZ2kU/FkGkL2OSHBHsazsUzsdC/W/RwhKIEsIoZ1alCclZHP5jGfNHEaEWUJFM1GquzCf+4db3b0w==", "devOptional": true, "dependencies": { "esbuild": "~0.21.4", @@ -27238,11 +27603,11 @@ } }, "node_modules/vite": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz", - "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", "dependencies": { - "esbuild": "^0.20.1", + "esbuild": "^0.21.3", "postcss": "^8.4.38", "rollup": "^4.13.0" }, @@ -27558,9 +27923,9 @@ } }, "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -27573,9 +27938,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -27588,9 +27953,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -27603,9 +27968,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -27618,9 +27983,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -27633,9 +27998,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -27648,9 +28013,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -27663,9 +28028,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -27678,9 +28043,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -27693,9 +28058,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -27708,9 +28073,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -27723,9 +28088,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -27738,9 +28103,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -27753,9 +28118,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -27768,9 +28133,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -27783,9 +28148,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -27798,9 +28163,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -27813,9 +28178,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -27828,9 +28193,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -27843,9 +28208,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -27858,9 +28223,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -27873,9 +28238,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -27888,9 +28253,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -27903,9 +28268,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -27914,29 +28279,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/vitest": { @@ -28671,6 +29036,43 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/vue/node_modules/@vue/compiler-sfc": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", + "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/compiler-core": "3.4.27", + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, + "node_modules/vue3-toastify": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vue3-toastify/-/vue3-toastify-0.2.1.tgz", + "integrity": "sha512-u4i5LCu1q5qs4L4Kbjb4u8NipCS8ox1fCHQ6XFS62676xnA6Q/AJRpZEkAurTMp723LeH6eQX6k9+24bKf1T4Q==", + "workspaces": [ + "docs", + "playground" + ], + "engines": { + "node": ">=16", + "npm": ">=7" + }, + "peerDependencies": { + "vue": ">=3.2.0" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, "node_modules/vuepress": { "version": "2.0.0-rc.13", "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.13.tgz", diff --git a/frontend/package.json b/frontend/package.json index ff83cdb89f..8523f3b3e8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -62,7 +62,7 @@ "update": "npx npm-check-updates" }, "dependencies": { - "@apollo/client": "^3.10.4", + "@apollo/client": "^3.10.5", "@intlify/unplugin-vue-i18n": "^4.0.0", "@mdi/font": "^7.4.47", "@types/compression": "^1.7.5", @@ -72,7 +72,7 @@ "@vue/apollo-composable": "^4.0.2", "@vue/apollo-option": "^4.0.0", "@vue/apollo-ssr": "^4.0.0", - "@vue/compiler-sfc": "^3.4.27", + "@vue/compiler-sfc": "^3.4.29", "@vue/server-renderer": "3.4.27", "@vuepress/theme-default": "^2.0.0-rc.35", "compression": "^1.7.4", @@ -84,38 +84,39 @@ "oidc-client-ts": "^3.0.1", "pinia": "^2.1.7", "pinia-plugin-persistedstate": "^3.2.1", - "sass": "^1.77.4", + "sass": "^1.77.5", "sass-loader": "^14.2.1", "sirv": "^2.0.4", "ts-node": "^10.9.2", "typescript": "^5.4.5", "vike": "^0.4.174", - "vite": "^5.2.13", + "vite": "^5.3.1", "vite-svg-loader": "^5.1.0", "vue": "3.4.27", "vue-i18n": "^9.13.1", + "vue3-toastify": "^0.2.1", "vuetify": "^3.5.17" }, "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.3.0", "@intlify/eslint-plugin-vue-i18n": "^2.0.0", "@pinia/testing": "^0.1.3", - "@storybook/addon-essentials": "^8.1.6", - "@storybook/addon-interactions": "^8.1.6", - "@storybook/addon-links": "^8.1.6", - "@storybook/blocks": "^8.0.10", + "@storybook/addon-essentials": "^8.1.9", + "@storybook/addon-interactions": "^8.1.9", + "@storybook/addon-links": "^8.1.9", + "@storybook/blocks": "^8.1.9", "@storybook/test-runner": "^0.18.2", "@storybook/testing-library": "^0.2.2", - "@storybook/vue3": "^8.1.6", - "@storybook/vue3-vite": "^8.1.6", + "@storybook/vue3": "^8.1.9", + "@storybook/vue3-vite": "^8.1.9", "@types/cookie": "^0.6.0", "@types/js-cookie": "^3.0.6", - "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", "@vitest/coverage-v8": "^1.6.0", "@vue/test-utils": "^2.4.6", "@vuepress/bundler-vite": "^2.0.0-rc.9", - "chromatic": "^11.5.3", + "chromatic": "^11.5.4", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", @@ -124,7 +125,7 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-security": "^3.0.0", + "eslint-plugin-security": "^3.0.1", "eslint-plugin-storybook": "^0.8.0", "eslint-plugin-vitest": "^0.4.1", "eslint-plugin-vue": "^9.26.0", @@ -132,7 +133,7 @@ "eslint-plugin-yml": "^1.14.0", "happy-dom": "^14.12.0", "mock-apollo-client": "^1.3.1", - "prettier": "^3.3.1", + "prettier": "^3.3.2", "react": "^18.3.1", "react-dom": "^18.3.1", "remark-cli": "^12.0.1", @@ -140,14 +141,14 @@ "remark-preset-lint-consistent": "^6.0.0", "remark-preset-lint-markdown-style-guide": "^6.0.0", "remark-preset-lint-recommended": "^7.0.0", - "storybook": "^8.1.6", + "storybook": "^8.1.9", "stylelint": "^16.6.1", "stylelint-config-css-modules": "^4.4.0", "stylelint-config-recess-order": "^5.0.1", "stylelint-config-recommended-vue": "^1.5.0", "stylelint-config-standard": "^36.0.0", "stylelint-config-standard-scss": "^13.1.0", - "tsx": "^4.15.1", + "tsx": "^4.15.5", "vite-plugin-checker": "^0.6.4", "vite-plugin-compression": "^0.5.1", "vite-plugin-vuetify": "^2.0.3", diff --git a/frontend/renderer/app.ts b/frontend/renderer/app.ts index bdce728ef7..afdd31d69c 100644 --- a/frontend/renderer/app.ts +++ b/frontend/renderer/app.ts @@ -2,16 +2,22 @@ import { DefaultApolloClient } from '@vue/apollo-composable' import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' import { PageContext } from 'vike/types' import { createSSRApp, defineComponent, h, markRaw, reactive, Component, provide } from 'vue' +import Vue3Toasity from 'vue3-toastify' +// eslint-disable-next-line import/no-unassigned-import +import 'vue3-toastify/dist/index.css' import PageShell from '#components/PageShell.vue' import { setPageContext } from '#context/usePageContext' import { createApolloClient } from '#plugins/apollo' +import GlobalErrorHandler from '#plugins/globalErrorHandler' import i18n from '#plugins/i18n' import pinia from '#plugins/pinia' import CreateVuetify from '#plugins/vuetify' import AuthService from '#src/services/AuthService' import { useAuthStore } from '#stores/authStore' +import type { ToastContainerOptions } from 'vue3-toastify' + const vuetify = CreateVuetify(i18n) function createApp(pageContext: PageContext, isClient = true) { @@ -52,6 +58,14 @@ function createApp(pageContext: PageContext, isClient = true) { app.use(pinia) app.use(i18n) app.use(vuetify) + app.use(Vue3Toasity, { + autoClose: 3000, + style: { + opacity: '1', + userSelect: 'initial', + }, + } as ToastContainerOptions) + app.use(GlobalErrorHandler) const auth = useAuthStore() diff --git a/frontend/renderer/plugins/globalErrorHandler.spec.ts b/frontend/renderer/plugins/globalErrorHandler.spec.ts new file mode 100644 index 0000000000..3db8910428 --- /dev/null +++ b/frontend/renderer/plugins/globalErrorHandler.spec.ts @@ -0,0 +1,35 @@ +import { vi, describe, it, expect } from 'vitest' +import { toast } from 'vue3-toastify' + +import globalErrorHandler from './globalErrorHandler' + +// vi.mock('vue3-toastify', async (importOriginal) => { +// const mod = await importOriginal() +// return { +// ...mod, +// error: vi.fn(), +// warning: vi.fn(), +// } +// }) + +describe('GlobalErrorHandler', () => { + describe('Error', () => { + const errorSpy = vi.spyOn(toast, 'error') + + it('toasts error message', () => { + globalErrorHandler.error('someError') + + expect(errorSpy).toBeCalledWith('someError') + }) + }) + + describe('Warning', () => { + const warningSpy = vi.spyOn(toast, 'warning') + + it('toasts warning message', () => { + globalErrorHandler.warning('someWarning') + + expect(warningSpy).toBeCalledWith('someWarning') + }) + }) +}) diff --git a/frontend/renderer/plugins/globalErrorHandler.ts b/frontend/renderer/plugins/globalErrorHandler.ts new file mode 100644 index 0000000000..3b2f21674a --- /dev/null +++ b/frontend/renderer/plugins/globalErrorHandler.ts @@ -0,0 +1,20 @@ +import { App } from 'vue' +import { toast } from 'vue3-toastify' + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const handleError = (message: string, data?: unknown) => { + toast.error(message) +} +const handleWarning = (message: string) => { + toast.warning(message) +} + +export default { + install: (app: App) => { + app.config.errorHandler = (error, vm, info) => { + handleError(`Unhandled error occurred: ${info}`, error) + } + }, + error: handleError, + warning: handleWarning, +} diff --git a/frontend/scripts/tests/plugin.globalErrorHandler.ts b/frontend/scripts/tests/plugin.globalErrorHandler.ts new file mode 100644 index 0000000000..b475b43882 --- /dev/null +++ b/frontend/scripts/tests/plugin.globalErrorHandler.ts @@ -0,0 +1,9 @@ +import { config } from '@vue/test-utils' +import { vi } from 'vitest' + +import globalErrorHandler from '#plugins/globalErrorHandler' + +export const errorHandlerSpy = vi.spyOn(globalErrorHandler, 'error') +export const warningHandlerSpy = vi.spyOn(globalErrorHandler, 'warning') + +config.global.plugins.push(globalErrorHandler) diff --git a/frontend/src/assets/img/divider.svg b/frontend/src/assets/img/divider.svg new file mode 100644 index 0000000000..76c63a4840 --- /dev/null +++ b/frontend/src/assets/img/divider.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/img/triangle.svg b/frontend/src/assets/img/triangle.svg new file mode 100644 index 0000000000..2b45e52e92 --- /dev/null +++ b/frontend/src/assets/img/triangle.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/assets/scss/style.scss b/frontend/src/assets/scss/style.scss index ac7684b7d0..758588460c 100644 --- a/frontend/src/assets/scss/style.scss +++ b/frontend/src/assets/scss/style.scss @@ -19,3 +19,8 @@ $font-family-default: 'Helvetica', sans-serif; :root { --menu-icon-height: 44px; } + +a { + color: inherit; + text-decoration: none; +} diff --git a/frontend/src/components/buttons/CreateButton.stories.ts b/frontend/src/components/buttons/CreateButton.stories.ts new file mode 100644 index 0000000000..2f8ce0346e --- /dev/null +++ b/frontend/src/components/buttons/CreateButton.stories.ts @@ -0,0 +1,28 @@ +import { SBComp } from '#types/SBComp' + +import CreateButton from './CreateButton.vue' + +import type { Meta, StoryObj } from '@storybook/vue3' + +// More on how to set up stories at: https://storybook.js.org/docs/vue/writing-stories/introduction +const meta = { + title: 'Inputs/CreateButton', + component: CreateButton as SBComp, + // This component will have an automatically generated docsPage entry: https://storybook.js.org/docs/vue/writing-docs/autodocs + tags: ['autodocs'], + argTypes: { + onClick: { action: 'clicked' }, + }, + args: {}, // default value +} satisfies Meta + +export default meta +type Story = StoryObj +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/vue/api/csf + * to learn how to use render functions. + */ +export const Primary: Story = { + args: {}, +} diff --git a/frontend/src/components/buttons/CreateButton.test.ts b/frontend/src/components/buttons/CreateButton.test.ts new file mode 100644 index 0000000000..35ed5abcbf --- /dev/null +++ b/frontend/src/components/buttons/CreateButton.test.ts @@ -0,0 +1,61 @@ +import { mount } from '@vue/test-utils' +import { navigate } from 'vike/client/router' +import { describe, it, expect, beforeEach, vi } from 'vitest' + +import CreateButton from './CreateButton.vue' + +vi.mock('vike/client/router') +vi.mocked(navigate).mockResolvedValue() + +describe('CreateButton', () => { + const Wrapper = () => { + return mount(CreateButton, { + props: {}, + }) + } + let wrapper: ReturnType + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.element).toMatchSnapshot() + }) + + it('button list content is hidden', () => { + expect(wrapper.find('.new-project-button').exists()).toBe(false) + expect(wrapper.find('.new-table-button').exists()).toBe(false) + expect(wrapper.find('.assistent-button').exists()).toBe(false) + }) + + describe('click on create button', () => { + it('emits click event', async () => { + await wrapper.find('#create-button').trigger('click') + expect(wrapper.emitted()).toHaveProperty('click', [[1]]) + }) + + it('button list visible', async () => { + await wrapper.find('#create-button').trigger('click') + expect(wrapper.find('.new-project-button').exists()).toBe(true) + expect(wrapper.find('.new-table-button').exists()).toBe(true) + expect(wrapper.find('.assistant-button').exists()).toBe(true) + }) + }) + + describe('new table button', () => { + beforeEach(() => { + wrapper = Wrapper() + }) + describe('enter room', () => { + beforeEach(async () => { + await wrapper.find('#create-button').trigger('click') + await wrapper.find('button.new-table-button').trigger('click') + }) + + it.skip('opens url in new tab', () => { + expect(navigate).toBeCalledWith('/room/') + }) + }) + }) +}) diff --git a/frontend/src/components/buttons/CreateButton.vue b/frontend/src/components/buttons/CreateButton.vue new file mode 100644 index 0000000000..0044e6664e --- /dev/null +++ b/frontend/src/components/buttons/CreateButton.vue @@ -0,0 +1,559 @@ + + + + + + + diff --git a/frontend/src/components/buttons/CreateButtonMobile.test.ts b/frontend/src/components/buttons/CreateButtonMobile.test.ts new file mode 100644 index 0000000000..543ec7f0c4 --- /dev/null +++ b/frontend/src/components/buttons/CreateButtonMobile.test.ts @@ -0,0 +1,66 @@ +import { mount } from '@vue/test-utils' +import { navigate } from 'vike/client/router' +import { describe, it, expect, beforeEach, vi } from 'vitest' + +import CreateButtonMobile from './CreateButtonMobile.vue' + +vi.mock('vike/client/router') +vi.mocked(navigate).mockResolvedValue() + +describe('CreateButton', () => { + const Wrapper = () => { + return mount(CreateButtonMobile, { + props: {}, + global: { + stubs: { + teleport: true, + }, + }, + }) + } + let wrapper: ReturnType + + beforeEach(() => { + wrapper = Wrapper() + }) + + it('renders', () => { + expect(wrapper.element).toMatchSnapshot() + }) + + it('button list content is hidden', () => { + expect(wrapper.find('.button-list-mobile').classes('button-list-mobile--active')).toBe(false) + expect(wrapper.find('svg g.outer-rings').classes('outer-rings--active')).toBe(false) + expect(wrapper.find('svg g.most-outer-rings').classes('most-outer-rings--active')).toBe(false) + }) + + describe('click on create button', () => { + it('emits click event', async () => { + await wrapper.find('#create-button-mobile').trigger('click') + expect(wrapper.emitted()).toHaveProperty('click', [[1]]) + }) + + it('button list visible', async () => { + await wrapper.find('#create-button-mobile').trigger('click') + expect(wrapper.find('.button-list-mobile').classes('button-list-mobile--active')).toBe(true) + expect(wrapper.find('svg g.outer-rings').classes('outer-rings--active')).toBe(true) + expect(wrapper.find('svg g.most-outer-rings').classes('most-outer-rings--active')).toBe(true) + }) + }) + + describe('new table button', () => { + beforeEach(() => { + wrapper = Wrapper() + }) + describe('enter room', () => { + beforeEach(async () => { + await wrapper.find('#create-button-mobile').trigger('click') + await wrapper.find('.button-list-mobile button.new-table-button').trigger('click') + }) + + it('opens room page', () => { + expect(navigate).toHaveBeenCalledWith('/room/') + }) + }) + }) +}) diff --git a/frontend/src/components/buttons/CreateButtonMobile.vue b/frontend/src/components/buttons/CreateButtonMobile.vue new file mode 100644 index 0000000000..57b3053c72 --- /dev/null +++ b/frontend/src/components/buttons/CreateButtonMobile.vue @@ -0,0 +1,464 @@ + + + + + + + diff --git a/frontend/src/components/buttons/MainButton.vue b/frontend/src/components/buttons/MainButton.vue index afec34c62c..c0e98af29d 100644 --- a/frontend/src/components/buttons/MainButton.vue +++ b/frontend/src/components/buttons/MainButton.vue @@ -1,6 +1,8 @@