diff --git a/.github/workflows/automation.yml b/.github/workflows/automation.yml index 4b6538ca1a..1351079823 100644 --- a/.github/workflows/automation.yml +++ b/.github/workflows/automation.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository == 'jellyfin/jellyfin-web' }} steps: - - uses: eps1lon/actions-label-merge-conflict@e62d7a53ff8be8b97684bffb6cfbbf3fc1115e2e # v3.0.0 + - uses: eps1lon/actions-label-merge-conflict@6d74047dcef155976a15e4a124dde2c7fe0c5522 # v3.0.1 with: dirtyLabel: 'merge conflict' commentOnDirty: 'This pull request has merge conflicts. Please resolve the conflicts so the PR can be successfully reviewed and merged.' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2de383b639..525765a755 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Setup node environment uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 @@ -57,9 +57,11 @@ jobs: steps: - name: Save PR context env: + PR_BRANCH: ${{ github.ref_name }} PR_NUMBER: ${{ github.event.number }} PR_SHA: ${{ github.event.pull_request.head.sha }} run: | + echo $PR_BRANCH > PR_branch echo $PR_NUMBER > PR_number echo $PR_SHA > PR_sha @@ -68,5 +70,6 @@ jobs: with: name: PR_context path: | + PR_branch PR_number PR_sha diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f0e5a075ca..e1a675444f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -19,16 +19,16 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Initialize CodeQL - uses: github/codeql-action/init@8f596b4ae3cb3c588a5c46780b86dd53fef16c52 # v3.25.2 + uses: github/codeql-action/init@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 with: languages: javascript queries: +security-extended - name: Autobuild - uses: github/codeql-action/autobuild@8f596b4ae3cb3c588a5c46780b86dd53fef16c52 # v3.25.2 + uses: github/codeql-action/autobuild@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@8f596b4ae3cb3c588a5c46780b86dd53fef16c52 # v3.25.2 + uses: github/codeql-action/analyze@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 diff --git a/.github/workflows/commands.yml b/.github/workflows/commands.yml index ed0b44f48e..296d5c111c 100644 --- a/.github/workflows/commands.yml +++ b/.github/workflows/commands.yml @@ -18,7 +18,7 @@ jobs: comment-id: ${{ github.event.comment.id }} reactions: '+1' - name: Checkout the latest code - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 with: token: ${{ secrets.JF_BOT_TOKEN }} fetch-depth: 0 diff --git a/.github/workflows/pr-suggestions.yml b/.github/workflows/pr-suggestions.yml index bb81dc19a9..432f14a2e9 100644 --- a/.github/workflows/pr-suggestions.yml +++ b/.github/workflows/pr-suggestions.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 with: ref: ${{ github.event.pull_request.head.sha }} @@ -33,6 +33,6 @@ jobs: - name: Run eslint if: ${{ github.repository == 'jellyfin/jellyfin-web' }} - uses: CatChen/eslint-suggestion-action@34e2a6c4193eba18a7a20710b5ae37850fc984c3 # v3.1.5 + uses: CatChen/eslint-suggestion-action@b110ac684564c7b73e47cc223eb7a5266ec83fd3 # v4.1.1 with: github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c88cc97032..f38a4d8a32 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,13 +8,40 @@ on: - completed jobs: + pr-context: + name: PR context + if: ${{ github.event.workflow_run.event == 'pull_request' }} + runs-on: ubuntu-latest + outputs: + branch: ${{ env.pr_branch }} + commit: ${{ env.pr_sha }} + pr_number: ${{ env.pr_number }} + + steps: + - name: Get PR context + uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3.1.4 + id: pr_context + with: + run_id: ${{ github.event.workflow_run.id }} + name: PR_context + + - name: Set PR context environment variables + if: ${{ steps.pr_context.conclusion == 'success' }} + run: | + echo "pr_branch=$(cat PR_branch)" >> $GITHUB_ENV + echo "pr_number=$(cat PR_number)" >> $GITHUB_ENV + echo "pr_sha=$(cat PR_sha)" >> $GITHUB_ENV + publish: permissions: contents: read deployments: write name: Deploy to Cloudflare Pages + if: ${{ always() }} runs-on: ubuntu-latest + needs: + - pr-context outputs: url: ${{ steps.cf.outputs.url }} @@ -33,32 +60,10 @@ jobs: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} projectName: jellyfin-web - branch: ${{ github.event.workflow_run.head_branch }} + branch: ${{ needs.pr-context.outputs.branch || github.ref_name }} directory: dist gitHubToken: ${{ secrets.GITHUB_TOKEN }} - pr-context: - name: PR context - if: ${{ always() && github.event.workflow_run.event == 'pull_request' }} - runs-on: ubuntu-latest - outputs: - commit: ${{ env.pr_sha }} - pr_number: ${{ env.pr_number }} - - steps: - - name: Get PR context - uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3.1.4 - id: pr_context - with: - run_id: ${{ github.event.workflow_run.id }} - name: PR_context - - - name: Set PR context environment variables - if: ${{ steps.pr_context.conclusion == 'success' }} - run: | - echo "pr_number=$(cat PR_number)" >> $GITHUB_ENV - echo "pr_sha=$(cat PR_sha)" >> $GITHUB_ENV - compose-comment: name: Compose comment if: ${{ always() }} @@ -68,7 +73,7 @@ jobs: - pr-context with: - branch: ${{ github.event.workflow_run.head_branch }} + branch: ${{ needs.pr-context.outputs.branch || github.ref_name }} commit: ${{ needs.pr-context.outputs.commit != '' && needs.pr-context.outputs.commit || github.event.workflow_run.head_sha }} preview_url: ${{ needs.publish.outputs.url }} build_workflow_run_id: ${{ github.event.workflow_run.id }} diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 531eb92a23..9a9fbfe8aa 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Setup node environment uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 @@ -41,7 +41,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Setup node environment uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 @@ -62,7 +62,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Setup node environment uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 @@ -86,7 +86,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Setup node environment uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 @@ -107,7 +107,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - name: Setup node environment uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 diff --git a/.github/workflows/update-sdk.yml b/.github/workflows/update-sdk.yml index 7f69cd5528..876d625928 100644 --- a/.github/workflows/update-sdk.yml +++ b/.github/workflows/update-sdk.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Check out Git repository - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 with: ref: master token: ${{ secrets.JF_BOT_TOKEN }} diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index e03662ab02..887c644822 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -86,6 +86,7 @@ - [GeorgeH005](https://github.com/GeorgeH005) - [JPUC1143](https://github.com/Jpuc1143) - [David Angel](https://github.com/davidangel) +- [Pithaya](https://github.com/Pithaya) ## Emby Contributors diff --git a/package-lock.json b/package-lock.json index 7d7fa0936b..d299a12496 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,37 +1,37 @@ { "name": "jellyfin-web", - "version": "10.9.0", + "version": "10.10.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "jellyfin-web", - "version": "10.9.0", + "version": "10.10.0", "license": "GPL-2.0-or-later", "dependencies": { "@emotion/react": "11.11.4", - "@emotion/styled": "11.11.0", - "@fontsource/noto-sans": "5.0.21", - "@fontsource/noto-sans-hk": "5.0.18", - "@fontsource/noto-sans-jp": "5.0.18", - "@fontsource/noto-sans-kr": "5.0.18", - "@fontsource/noto-sans-sc": "5.0.18", - "@fontsource/noto-sans-tc": "5.0.18", + "@emotion/styled": "11.11.5", + "@fontsource/noto-sans": "5.0.22", + "@fontsource/noto-sans-hk": "5.0.19", + "@fontsource/noto-sans-jp": "5.0.19", + "@fontsource/noto-sans-kr": "5.0.19", + "@fontsource/noto-sans-sc": "5.0.19", + "@fontsource/noto-sans-tc": "5.0.19", "@jellyfin/libass-wasm": "4.2.1", - "@jellyfin/sdk": "0.0.0-unstable.202404101900", - "@loadable/component": "5.16.3", - "@mui/icons-material": "5.15.11", - "@mui/material": "5.15.11", - "@mui/x-data-grid": "6.19.5", + "@jellyfin/sdk": "0.0.0-unstable.202405190501", + "@loadable/component": "5.16.4", + "@mui/icons-material": "5.15.17", + "@mui/material": "5.15.17", + "@mui/x-data-grid": "6.19.11", "@react-hook/resize-observer": "1.2.6", "@tanstack/react-query": "4.36.1", "@tanstack/react-query-devtools": "4.36.1", - "@types/react-lazy-load-image-component": "1.6.3", + "@types/react-lazy-load-image-component": "1.6.4", "abortcontroller-polyfill": "1.7.5", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", "classnames": "2.5.1", - "core-js": "3.36.1", + "core-js": "3.37.0", "date-fns": "2.30.0", "dompurify": "3.0.1", "epubjs": "0.3.93", @@ -40,7 +40,7 @@ "flv.js": "1.6.2", "headroom.js": "0.12.0", "history": "5.3.0", - "hls.js": "1.5.7", + "hls.js": "1.5.8", "intersection-observer": "0.12.2", "jellyfin-apiclient": "1.11.0", "jquery": "3.7.1", @@ -55,27 +55,27 @@ "react-blurhash": "0.3.0", "react-dom": "17.0.2", "react-lazy-load-image-component": "1.6.0", - "react-router-dom": "6.22.3", + "react-router-dom": "6.23.1", "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.2", - "swiper": "11.0.7", - "usehooks-ts": "2.16.0", + "swiper": "11.1.1", + "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" }, "devDependencies": { - "@babel/core": "7.24.3", + "@babel/core": "7.24.5", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-private-methods": "7.18.6", "@babel/plugin-transform-modules-umd": "7.24.1", - "@babel/preset-env": "7.24.3", + "@babel/preset-env": "7.24.5", "@babel/preset-react": "7.24.1", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", - "@types/markdown-it": "13.0.7", - "@types/react": "17.0.79", + "@types/markdown-it": "14.1.1", + "@types/react": "17.0.80", "@types/react-dom": "17.0.25", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -88,8 +88,8 @@ "confusing-browser-globals": "1.0.11", "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", - "css-loader": "6.10.0", - "cssnano": "6.1.2", + "css-loader": "7.1.1", + "cssnano": "7.0.1", "es-check": "7.1.1", "eslint": "8.57.0", "eslint-plugin-compat": "4.2.0", @@ -97,35 +97,35 @@ "eslint-plugin-import": "2.29.1", "eslint-plugin-jsx-a11y": "6.8.0", "eslint-plugin-react": "7.34.1", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-sonarjs": "0.24.0", - "expose-loader": "4.1.0", + "eslint-plugin-react-hooks": "4.6.2", + "eslint-plugin-sonarjs": "0.25.1", + "expose-loader": "5.0.0", "fork-ts-checker-webpack-plugin": "9.0.2", - "html-loader": "4.2.0", + "html-loader": "5.0.0", "html-webpack-plugin": "5.6.0", - "jsdom": "23.2.0", - "mini-css-extract-plugin": "2.8.1", + "jsdom": "24.0.0", + "mini-css-extract-plugin": "2.9.0", "postcss": "8.4.38", - "postcss-loader": "7.3.4", - "postcss-preset-env": "9.5.2", + "postcss-loader": "8.1.1", + "postcss-preset-env": "9.5.12", "postcss-scss": "4.0.9", - "sass": "1.72.0", - "sass-loader": "13.3.3", - "source-map-loader": "4.0.2", + "sass": "1.77.1", + "sass-loader": "14.2.1", + "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", - "style-loader": "3.3.4", + "style-loader": "4.0.0", "stylelint": "15.11.0", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "1.3.0", "stylelint-order": "6.0.4", "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", - "typescript": "5.4.3", - "vitest": "1.4.0", + "typescript": "5.4.5", + "vitest": "1.6.0", "webpack": "5.91.0", - "webpack-bundle-analyzer": "4.10.1", + "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.2", + "webpack-dev-server": "5.0.4", "webpack-merge": "5.10.0", "worker-loader": "3.0.8" }, @@ -157,17 +157,6 @@ "node": ">=6.0.0" } }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz", - "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==", - "dev": true, - "dependencies": { - "bidi-js": "^1.0.3", - "css-tree": "^2.3.1", - "is-potential-custom-element-name": "^1.0.1" - } - }, "node_modules/@babel/code-frame": { "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", @@ -181,30 +170,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -226,12 +215,12 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -296,19 +285,19 @@ "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", - "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", + "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.24.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "semver": "^6.3.1" }, "engines": { @@ -386,12 +375,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", + "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -409,16 +398,16 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -440,9 +429,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -483,12 +472,12 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -507,29 +496,29 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "engines": { "node": ">=6.9.0" } @@ -558,14 +547,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dev": true, "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -586,9 +575,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -597,6 +586,22 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", + "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", @@ -1005,12 +1010,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", - "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", + "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1036,12 +1041,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", - "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-create-class-features-plugin": "^7.24.4", "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1053,18 +1058,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", - "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", + "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "globals": "^11.1.0" }, "engines": { @@ -1091,12 +1096,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", - "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", + "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1410,15 +1415,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", - "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", + "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.1" + "@babel/plugin-transform-parameters": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1460,12 +1465,12 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", - "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", + "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1477,12 +1482,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", - "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", + "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1508,14 +1513,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", - "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", + "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1698,12 +1703,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", - "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", + "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" }, "engines": { "node": ">=6.9.0" @@ -1776,15 +1781,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz", - "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", + "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.1", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", @@ -1811,12 +1817,12 @@ "@babel/plugin-transform-async-generator-functions": "^7.24.3", "@babel/plugin-transform-async-to-generator": "^7.24.1", "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.5", "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.1", - "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.5", "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.5", "@babel/plugin-transform-dotall-regex": "^7.24.1", "@babel/plugin-transform-duplicate-keys": "^7.24.1", "@babel/plugin-transform-dynamic-import": "^7.24.1", @@ -1836,13 +1842,13 @@ "@babel/plugin-transform-new-target": "^7.24.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.5", "@babel/plugin-transform-object-super": "^7.24.1", "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.1", - "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.5", + "@babel/plugin-transform-parameters": "^7.24.5", "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.5", "@babel/plugin-transform-property-literals": "^7.24.1", "@babel/plugin-transform-regenerator": "^7.24.1", "@babel/plugin-transform-reserved-words": "^7.24.1", @@ -1850,7 +1856,7 @@ "@babel/plugin-transform-spread": "^7.24.1", "@babel/plugin-transform-sticky-regex": "^7.24.1", "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.5", "@babel/plugin-transform-unicode-escapes": "^7.24.1", "@babel/plugin-transform-unicode-property-regex": "^7.24.1", "@babel/plugin-transform-unicode-regex": "^7.24.1", @@ -1935,19 +1941,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1956,12 +1962,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1978,9 +1984,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz", - "integrity": "sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", + "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", "dev": true, "funding": [ { @@ -1996,14 +2002,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/color-helpers": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.0.0.tgz", - "integrity": "sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.0.tgz", + "integrity": "sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg==", "dev": true, "funding": [ { @@ -2020,9 +2026,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.0.tgz", - "integrity": "sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz", + "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==", "dev": true, "funding": [ { @@ -2038,14 +2044,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-color-parser": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.6.2.tgz", - "integrity": "sha512-mlt0PomBlDXMGcbPAqCG36Fw35LZTtaSgCQCHEs4k8QTv1cUKe0rJDlFSJMHtqrgQiLC7LAAS9+s9kKQp2ou/Q==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz", + "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==", "dev": true, "funding": [ { @@ -2058,21 +2064,21 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.0.0", - "@csstools/css-calc": "^1.2.0" + "@csstools/color-helpers": "^4.2.0", + "@csstools/css-calc": "^1.2.2" }, "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", - "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", + "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", "dev": true, "funding": [ { @@ -2088,13 +2094,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz", - "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", + "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", "dev": true, "funding": [ { @@ -2111,9 +2117,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", - "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", + "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", "dev": true, "funding": [ { @@ -2129,14 +2135,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "node_modules/@csstools/postcss-cascade-layers": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.3.tgz", - "integrity": "sha512-RbkQoOH23yGhWVetgBTwFgIOHEyU2tKMN7blTz/YAKKabR6tr9pP7mYS23Q9snFY2hr8WSaV8Le64KdM9BtUSA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.5.tgz", + "integrity": "sha512-nAI2ToT2G/E4XEwJitVjCr2V2SluE9Eaiski+xfRbKSGxFmDUtua7SCG1AtMbjteIVqGDRw7uBd7qXqCZq2b1Q==", "dev": true, "funding": [ { @@ -2149,7 +2155,7 @@ } ], "dependencies": { - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -2160,9 +2166,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.12.tgz", - "integrity": "sha512-amPGGDI4Xmgu7VN2ciKQe0pP/j5raaETT50nzbnkydp9FMw7imKxSUnXdVQU4NmRgpLKIc5Q7jox0MFhMBImIg==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz", + "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==", "dev": true, "funding": [ { @@ -2175,10 +2181,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2189,9 +2195,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.12.tgz", - "integrity": "sha512-qpAEGwVVqHSa88i3gLb43IMpT4/LyZEE8HzZylQKKXFVJ7XykXaORTmXySxyH6H+flT+NyCnutKG2fegCVyCug==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz", + "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==", "dev": true, "funding": [ { @@ -2204,10 +2210,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2218,9 +2224,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz", - "integrity": "sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz", + "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==", "dev": true, "funding": [ { @@ -2233,9 +2239,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2271,9 +2277,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.5.tgz", - "integrity": "sha512-AJ74/4nHXgghLWY4/ydEhu3mzwN8c56EjIGrJsoEhKaNuGBAOtUfE5qbkc9XQQ0G2FMhHggqE+9eRrApeK7ebQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz", + "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==", "dev": true, "funding": [ { @@ -2286,9 +2292,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2298,9 +2304,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.13.tgz", - "integrity": "sha512-dBbyxs9g+mrIzmEH+UtrqJUmvcJB/60j0ijhBcVJMHCgl/rKjj8ey6r/pJOI0EhkVsckOu3Prc9AGzH88C+1pQ==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz", + "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==", "dev": true, "funding": [ { @@ -2313,10 +2319,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2327,9 +2333,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.11.tgz", - "integrity": "sha512-c36FtMFptwGn5CmsfdONA40IlWG2lHeoC/TDyED/7lwiTht5okxe6iLAa9t2LjBBo5AHQSHfeMvOASdXk/SHog==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz", + "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==", "dev": true, "funding": [ { @@ -2342,10 +2348,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2356,9 +2362,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.5.tgz", - "integrity": "sha512-9CriM/zvKXa/lDARlxs/MgeyKE6ZmmX4V77VLD7VUxKLVSt0Go3NCy/gRMbwGzxbrk3iaHFXnFbc2lNw+/7jcg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.6.tgz", + "integrity": "sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w==", "dev": true, "funding": [ { @@ -2371,7 +2377,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -2405,9 +2411,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.5.tgz", - "integrity": "sha512-qG3MI7IN3KY9UwdaE9E7G7sFydscVW7nAj5OGwaBP9tQPEEVdxXTGI+l1ZW5EUpZFSj+u3q/22fH5+8HI72+Bg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.7.tgz", + "integrity": "sha512-snT/fL6V0I/4AiObPtk2mzJ/eSvpqnf3Kyx9Mc0rI6VskjRkkrEME+kH3aMKBKwjstBrgrYUMoI+vXw2HRi9CQ==", "dev": true, "funding": [ { @@ -2420,7 +2426,7 @@ } ], "dependencies": { - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -2431,9 +2437,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.1.tgz", - "integrity": "sha512-CJOcp+m7Njbu91HtYMMoYuZznsvNSpJtLiR/7BO8/bHTXYPiuAZfxunh7wXLkMbHd5dRBgAVAQZ+H4iFqrvWZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz", + "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==", "dev": true, "funding": [ { @@ -2446,9 +2452,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2550,9 +2556,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz", - "integrity": "sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz", + "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==", "dev": true, "funding": [ { @@ -2565,7 +2571,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2576,9 +2582,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz", - "integrity": "sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz", + "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==", "dev": true, "funding": [ { @@ -2591,10 +2597,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2604,9 +2610,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz", - "integrity": "sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz", + "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==", "dev": true, "funding": [ { @@ -2619,9 +2625,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2682,9 +2688,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.12.tgz", - "integrity": "sha512-RNitTHamFvUUh8x+MJuPd2tCekYexUrylGKfUoor5D2GGcgzY1WB6Bl3pIj9t8bAq5h/lcacKaB2wmvUOTfGgQ==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz", + "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==", "dev": true, "funding": [ { @@ -2697,10 +2703,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2711,9 +2717,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.1.1.tgz", - "integrity": "sha512-cx/bZgj+MK8SpRZNTu2zGeVFMCQfhsaeuDhukAhfA53yykvIXaTIwLi5shW9hfkvPrkqBeFoiRAzq/qogxeHTA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.2.0.tgz", + "integrity": "sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ==", "dev": true, "funding": [ { @@ -2736,9 +2742,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.12.tgz", - "integrity": "sha512-VreDGDgE634niwCytLtkoE5kRxfva7bnMzSoyok7Eh9VPYFOm8CK/oJXt9y3df71Bxc9PG4KC8RA3CxTknudnw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz", + "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==", "dev": true, "funding": [ { @@ -2751,10 +2757,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -2790,9 +2796,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz", - "integrity": "sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz", + "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==", "dev": true, "funding": [ { @@ -2805,9 +2811,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2817,9 +2823,9 @@ } }, "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.4.tgz", - "integrity": "sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz", + "integrity": "sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw==", "dev": true, "funding": [ { @@ -2832,7 +2838,7 @@ } ], "dependencies": { - "@csstools/color-helpers": "^4.0.0", + "@csstools/color-helpers": "^4.2.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -2843,9 +2849,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz", - "integrity": "sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz", + "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==", "dev": true, "funding": [ { @@ -2858,9 +2864,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -2914,9 +2920,9 @@ } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", - "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.0.tgz", + "integrity": "sha512-tGDFEHZ4XJeIt5NF7/nAfLGqPckmDZSnYne5gl67p4agQolE5s4rofdQ3e+VkeukfR91lVtSQ/Jt9DqM1ICiIQ==", "dev": true, "funding": [ { @@ -3024,9 +3030,10 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -3060,9 +3067,10 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", - "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", + "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", @@ -3077,14 +3085,15 @@ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1" }, @@ -3660,34 +3669,40 @@ "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, "node_modules/@fontsource/noto-sans": { - "version": "5.0.21", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.0.21.tgz", - "integrity": "sha512-1rIZsv6nObjg0rNY0EBBTta5lujmQ1agKn6HN5rY3L2pVvHJqK5n/cNO2HTqfqK837f9PEE/yowVm9mjniDhuw==" + "version": "5.0.22", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.0.22.tgz", + "integrity": "sha512-PwjvKPGFbgpwfKjWZj1zeUvd7ExUW2AqHE9PF9ysAJ2gOuzIHWE6mEVIlchYif7WC2pQhn+g0w6xooCObVi+4A==", + "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-hk": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.0.18.tgz", - "integrity": "sha512-ocDIWwuWijrItWx6ak8hKPqL6toT38Z3HQg2jFGeN0/RTpTmVEHv7V90A0NJveETtO5olw6lUbyDsCthawbPyw==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.0.19.tgz", + "integrity": "sha512-MV61w4tJSxSxgUSsiOaWHuuUPB+Uls4ZjX+5N2+cIQgSxubb1CvZ0DsoLkLRv0yxsuXfAv7xe7fj7YRdlHXToA==", + "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-jp": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.0.18.tgz", - "integrity": "sha512-tIXpfwpwxxn/Gl60fj2w4R7JK1ZQnE2onyY6saEvAdG42MzgvVZ3xsCUIlyhRtkTCB0qukfSj+eZ8tyS7Yxkuw==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.0.19.tgz", + "integrity": "sha512-N0KUmSqX6tlAlnqFQnDywj9e+4RithtLgFGlcRt/85EI8rmDYJFYQCZVhc+xTIk5Kgr1gLtNToHZzK61BTsWqw==", + "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-kr": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.0.18.tgz", - "integrity": "sha512-5P2W+NbUYanP41l2U2kc3HUqd+g4MZlXXvxYZnmGEYpO065N/b7CQpCa9kltREjLnxzLauyeF0j7SRAsI11+XQ==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.0.19.tgz", + "integrity": "sha512-YtEG66Upsu6xU75W9DaLW9aUenCqMwDzTuYnk4iDDOegqSFKGqGMCP3+W86eFbtsi3rRZtSwwl8Yq6NHnNKM/Q==", + "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-sc": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.0.18.tgz", - "integrity": "sha512-t8VOu5qD1fEhsAJX3hOVZCbL7B+oTq14575Ypv/lDkxPnhC65wkbw0bQwxGpf+x1m3A2vpevWAumjs1NAQdmcw==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.0.19.tgz", + "integrity": "sha512-WI9j4N3sz9RQElaBpkIE/gnaX6VhIO4ajOq1FVEVKSrxyfAhXtFBGZuG7KBqhWbWrx/DYrxOjK2O9BPxIWKORA==", + "license": "OFL-1.1" }, "node_modules/@fontsource/noto-sans-tc": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.0.18.tgz", - "integrity": "sha512-pHCH3NL+SUIaCMRtao0eomfIVl7Lrg8cF3zbwukQBXM1hbgt82qXbVdmZbo96XCrvjDVwh/3QSlU7ZuGEIjFDQ==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.0.19.tgz", + "integrity": "sha512-/PFoqqUTOVLpuJoGfNpeUl+JoQcHCQcLHAN7PKfBlbrSXHQKT7aYwaCn7c1BBm9iqVAg6M5zVyzabmNc9gHyvw==", + "license": "OFL-1.1" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -3722,15 +3737,87 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/@jellyfin/libass-wasm": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@jellyfin/libass-wasm/-/libass-wasm-4.2.1.tgz", "integrity": "sha512-oWK2yz8fFlMXkIuxUc9g/bqN2h56AB+8b6vF/Ikns6WZ/nmcGJ/5lcVaLI4csE83yWgmco4gHO3HyJDsM9EXcQ==" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202404101900", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202404101900.tgz", - "integrity": "sha512-/OQyJIfOMQf23eabSEOARYiHkUhwsHNQL9SenEYGuV1p9ikmIRivqHwwtbPSTC7IEO6qmq62rndfQpNpIuIjdw==", + "version": "0.0.0-unstable.202405190501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202405190501.tgz", + "integrity": "sha512-GPpZ763LqOT7QqiyelnE5sLXilXsLW40wHvdX1bmK/I9hANVIBvk8b9RT/GRyX4j2maB//vQ8kCdm+8FG0CBmA==", "peerDependencies": { "axios": "^1.3.4" } @@ -3805,6 +3892,63 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz", + "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.3.tgz", + "integrity": "sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@juggle/resize-observer": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", @@ -3817,11 +3961,12 @@ "dev": true }, "node_modules/@loadable/component": { - "version": "5.16.3", - "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.3.tgz", - "integrity": "sha512-2mVvHs2988oVX2/zM0y6nYhJ4rTVHhkhRnpupBA0Rjl5tS8op9uSR4u5SLVfMLxzpspr2UiIBQD+wEuMsuq4Dg==", + "version": "5.16.4", + "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.4.tgz", + "integrity": "sha512-fJWxx9b5WHX90QKmizo9B+es2so8DnBthI1mbflwCoOyvzEwxiZ/SVDCTtXEnHG72/kGBdzr297SSIekYtzSOQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.7", + "@babel/runtime": "^7.12.18", "hoist-non-react-statics": "^3.3.1", "react-is": "^16.12.0" }, @@ -3906,14 +4051,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.37", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.37.tgz", - "integrity": "sha512-/o3anbb+DeCng8jNsd3704XtmmLDZju1Fo8R2o7ugrVtPQ/QpcqddwKNzKPZwa0J5T8YNW3ZVuHyQgbTnQLisQ==", + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", "dependencies": { "@babel/runtime": "^7.23.9", "@floating-ui/react-dom": "^2.0.8", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@popperjs/core": "^2.11.8", "clsx": "^2.1.0", "prop-types": "^15.8.1" @@ -3937,18 +4082,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz", - "integrity": "sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==", + "version": "5.15.17", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.17.tgz", + "integrity": "sha512-DVAejDQkjNnIac7MfP8sLzuo7fyrBPxNdXe+6bYqOqg1z2OPTlfFAejSNzWe7UenRMuFu9/AyFXj/X2vN2w6dA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.11.tgz", - "integrity": "sha512-R5ZoQqnKpd+5Ew7mBygTFLxgYsQHPhgR3TDXSgIHYIjGzYuyPLmGLSdcPUoMdi6kxiYqHlpPj4NJxlbaFD0UHA==", + "version": "5.15.17", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.17.tgz", + "integrity": "sha512-xVzl2De7IY36s/keHX45YMiCpsIx3mNv2xwDgtBkRSnZQtVk+Gqufwj1ktUxEyjzEhBl0+PiNJqYC31C+n1n6A==", "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -3971,16 +4116,16 @@ } }, "node_modules/@mui/material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.11.tgz", - "integrity": "sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA==", + "version": "5.15.17", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.17.tgz", + "integrity": "sha512-ru/MLvTkCh0AZXmqwIpqGTOoVBS/sX48zArXq/DvktxXZx4fskiRA2PEc7Rk5ZlFiZhKh4moL4an+l8zZwq49Q==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.37", - "@mui/core-downloads-tracker": "^5.15.11", - "@mui/system": "^5.15.11", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.15.17", + "@mui/system": "^5.15.15", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", @@ -4015,17 +4160,17 @@ } }, "node_modules/@mui/material/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/@mui/private-theming": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.11.tgz", - "integrity": "sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz", + "integrity": "sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.14", "prop-types": "^15.8.1" }, "engines": { @@ -4046,9 +4191,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.11.tgz", - "integrity": "sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", "dependencies": { "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", @@ -4077,15 +4222,15 @@ } }, "node_modules/@mui/system": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.11.tgz", - "integrity": "sha512-9j35suLFq+MgJo5ktVSHPbkjDLRMBCV17NMBdEQurh6oWyGnLM4uhU4QGZZQ75o0vuhjJghOCA1jkO3+79wKsA==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz", + "integrity": "sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.11", - "@mui/styled-engine": "^5.15.11", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/private-theming": "^5.15.14", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -4116,9 +4261,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -4129,9 +4274,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.11.tgz", - "integrity": "sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz", + "integrity": "sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==", "dependencies": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -4161,9 +4306,9 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/@mui/x-data-grid": { - "version": "6.19.5", - "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.5.tgz", - "integrity": "sha512-jV1ZqwyFslKqFScSn4t+xc/tNxLHOeJjz3HoeK+Wdf5t3bPM69pg/jLeg8TmOkAUY62JmQKCLVmcGWiR3AqUKQ==", + "version": "6.19.11", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.11.tgz", + "integrity": "sha512-QsUp2cPkjUm8vyTR5gYWuCFqxspljOzElbCm412wzvMTJSKaB0kz7CEecFhxjlsMjQ8B7kY8oDF3LXjjucFcPQ==", "dependencies": { "@babel/runtime": "^7.23.2", "@mui/utils": "^5.14.16", @@ -4220,6 +4365,17 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.23", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", @@ -4265,9 +4421,10 @@ } }, "node_modules/@remix-run/router": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", - "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -4533,6 +4690,7 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.13.0" } @@ -4548,10 +4706,11 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4566,10 +4725,11 @@ } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -4608,26 +4768,29 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/glob": { @@ -4646,6 +4809,13 @@ "integrity": "sha512-NZwaaynfs1oIoLAV1vg18e7QMVDvw+6SQrdJc8w3BwUaoroVSf6EBj/Sk4PBWGxsq0dzhA2drbsuMC1/6C6KgQ==", "dev": true }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/http-proxy": { "version": "1.17.8", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", @@ -4668,10 +4838,11 @@ "dev": true }, "node_modules/@types/linkify-it": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", - "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" }, "node_modules/@types/loadable__component": { "version": "5.13.9", @@ -4707,13 +4878,14 @@ } }, "node_modules/@types/markdown-it": { - "version": "13.0.7", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", - "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" + "@types/linkify-it": "^5", + "@types/mdurl": "^2" } }, "node_modules/@types/mdast": { @@ -4726,16 +4898,18 @@ } }, "node_modules/@types/mdurl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", - "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/minimatch": { "version": "3.0.4", @@ -4758,6 +4932,16 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", @@ -4787,12 +4971,13 @@ "dev": true }, "node_modules/@types/react": { - "version": "17.0.79", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.79.tgz", - "integrity": "sha512-gavKA8AwJAML9zWHuiQRASjrrPJHbT/zrUDHiUGUf+l5a3pkEd6atvjjq+8y2vfRHBJLQJjFpxSa9I8qe9zHAw==", + "version": "17.0.80", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", + "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", + "license": "MIT", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", + "@types/scheduler": "^0.16", "csstype": "^3.0.2" } }, @@ -4806,9 +4991,10 @@ } }, "node_modules/@types/react-lazy-load-image-component": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@types/react-lazy-load-image-component/-/react-lazy-load-image-component-1.6.3.tgz", - "integrity": "sha512-HsIsYz7yWWTh/bftdzGnijKD26JyofLRqM/RM80sxs7Gk13G83ew8R/ra2XzXuiZfjNEjAq/Va+NBHFF9ciwxA==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/react-lazy-load-image-component/-/react-lazy-load-image-component-1.6.4.tgz", + "integrity": "sha512-8pFPeDPF4yVG4lU1/ixZidJEEDZmEOYOTYDvmIu2IAabyuv97Q7n/93nMCocHvQ7vD1czKGiW+op55D9m3MkdA==", + "license": "MIT", "dependencies": { "@types/react": "*", "csstype": "^3.0.2" @@ -4823,10 +5009,11 @@ } }, "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" }, "node_modules/@types/scheduler": { "version": "0.16.2", @@ -4839,30 +5026,45 @@ "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", "dev": true }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4901,10 +5103,11 @@ } }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5184,13 +5387,14 @@ "dev": true }, "node_modules/@vitest/expect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.4.0.tgz", - "integrity": "sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", "chai": "^4.3.10" }, "funding": { @@ -5198,12 +5402,13 @@ } }, "node_modules/@vitest/runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.4.0.tgz", - "integrity": "sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", + "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "1.4.0", + "@vitest/utils": "1.6.0", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -5239,10 +5444,11 @@ } }, "node_modules/@vitest/snapshot": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.4.0.tgz", - "integrity": "sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", + "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", "dev": true, + "license": "MIT", "dependencies": { "magic-string": "^0.30.5", "pathe": "^1.1.1", @@ -5253,10 +5459,11 @@ } }, "node_modules/@vitest/spy": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.4.0.tgz", - "integrity": "sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "dev": true, + "license": "MIT", "dependencies": { "tinyspy": "^2.2.0" }, @@ -5265,10 +5472,11 @@ } }, "node_modules/@vitest/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", "dev": true, + "license": "MIT", "dependencies": { "diff-sequences": "^29.6.3", "estree-walker": "^3.0.3", @@ -5757,12 +5965,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, "node_modules/array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -6313,15 +6515,6 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", - "dev": true, - "dependencies": { - "require-from-string": "^2.0.2" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -6415,13 +6608,12 @@ "dev": true }, "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, + "license": "MIT", "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } @@ -6517,6 +6709,22 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -6670,6 +6878,7 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -6812,16 +7021,11 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -6834,6 +7038,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -6895,10 +7102,11 @@ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, + "license": "MIT", "dependencies": { "source-map": "~0.6.0" }, @@ -7323,10 +7531,11 @@ } }, "node_modules/core-js": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", - "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==", + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -7398,9 +7607,9 @@ } }, "node_modules/css-blank-pseudo": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz", - "integrity": "sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz", + "integrity": "sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg==", "dev": true, "funding": [ { @@ -7444,9 +7653,9 @@ } }, "node_modules/css-has-pseudo": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.2.tgz", - "integrity": "sha512-Z2Qm5yyOvJRTy6THdUlnGIX6PW/1wOc4FHWlfkcBkfkpZ3oz6lPdG+h+J7t1HZHT4uSSVR8XatXiMpqMUADXow==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.4.tgz", + "integrity": "sha512-u9vuyeksska4OMRC061xTQb2RJZv7T1JJjnZbaQpNhZRPF1UqGpBqHnlcwRS/1vv+QOpD4NVsaFT4U1zmkciuA==", "dev": true, "funding": [ { @@ -7459,7 +7668,7 @@ } ], "dependencies": { - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0" }, @@ -7471,22 +7680,23 @@ } }, "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.1.tgz", + "integrity": "sha512-OxIR5P2mjO1PSXk44bWuQ8XtMK4dpEqpIyERCx3ewOo3I8EmbcxMPUc5ScLtQfgXtOojoMv57So4V/C02HQLsw==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -7494,7 +7704,7 @@ }, "peerDependencies": { "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" + "webpack": "^5.27.0" }, "peerDependenciesMeta": { "@rspack/core": { @@ -7506,13 +7716,11 @@ } }, "node_modules/css-loader/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" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7624,9 +7832,9 @@ } }, "node_modules/cssdb": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", - "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.0.1.tgz", + "integrity": "sha512-diegY/vnOYmPXY0bOBj5jeHaiK8MMpjgPuipirY8pF9AthtqEXgqVdKF5tnb6RTc/ZdhQqG0TBnInQ5CbbUW7Q==", "dev": true, "funding": [ { @@ -7652,16 +7860,17 @@ } }, "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.1.tgz", + "integrity": "sha512-917Mej/4SdI7b55atsli3sU4MOJ9XDoKgnlCtQtXYj8XUFcM3riTuYHyqBBnnskawW+zWwp0KxJzpEUodlpqUg==", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-preset-default": "^6.1.2", + "cssnano-preset-default": "^7.0.1", "lilconfig": "^3.1.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "funding": { "type": "opencollective", @@ -7672,56 +7881,58 @@ } }, "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.1.tgz", + "integrity": "sha512-Fumyr+uZMcjYQeuHssAZxn0cKj3cdQc5GcxkBcmEzISGB+UW9CLNlU4tBOJbJGcPukFDlicG32eFbrc8K9V5pw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.0", + "postcss-colormin": "^7.0.0", + "postcss-convert-values": "^7.0.0", + "postcss-discard-comments": "^7.0.0", + "postcss-discard-duplicates": "^7.0.0", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.0", + "postcss-merge-rules": "^7.0.0", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.0", + "postcss-minify-selectors": "^7.0.0", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.0", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.0", + "postcss-reduce-initial": "^7.0.0", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.0", + "postcss-unique-selectors": "^7.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -7732,6 +7943,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -7745,6 +7957,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -7758,7 +7971,8 @@ "version": "2.0.28", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/cssstyle": { "version": "4.0.1", @@ -7991,6 +8205,36 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -8021,12 +8265,16 @@ } }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-properties": { @@ -8177,6 +8425,7 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -8193,12 +8442,6 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -8327,6 +8570,13 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -8391,6 +8641,16 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -9092,9 +9352,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -9142,9 +9402,9 @@ } }, "node_modules/eslint-plugin-sonarjs": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.24.0.tgz", - "integrity": "sha512-87zp50mbbNrSTuoEOebdRQBPa0mdejA5UEjyuScyIw8hEpEjfWP89Qhkq5xVZfVyVSRQKZc9alVm7yRKQvvUmg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.25.1.tgz", + "integrity": "sha512-5IOKvj/GMBNqjxBdItfotfRHo7w48496GOu1hxdeXuD0mB1JBlDCViiLHETDTfA8pDAVSBimBEQoetRXYceQEw==", "dev": true, "engines": { "node": ">=16" @@ -9520,6 +9780,7 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } @@ -9659,12 +9920,13 @@ "dev": true }, "node_modules/expose-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-4.1.0.tgz", - "integrity": "sha512-oLAesnzerwDGGADzBMnu0LPqqnlVz6e2V9lTa+/4X6VeW9W93x/nJpw05WBrcIdbqXm/EdnEQpiVDFFiQXuNfg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.0.tgz", + "integrity": "sha512-BtUqYRmvx1bEY5HN6eK2I9URUZgNmN0x5UANuocaNjXSgfoDlkXt+wyEMe7i5DzDNh2BKJHPc5F4rBwEdSQX6w==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -10281,6 +10543,36 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", @@ -11196,9 +11488,10 @@ } }, "node_modules/hls.js": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.7.tgz", - "integrity": "sha512-Hnyf7ojTBtXHeOW1/t6wCBJSiK1WpoKF9yg7juxldDx8u3iswrkPt2wbOA/1NiwU4j27DSIVoIEJRAhcdMef/A==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.8.tgz", + "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==", + "license": "Apache-2.0" }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", @@ -11239,10 +11532,21 @@ } }, "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", @@ -11251,16 +11555,17 @@ "dev": true }, "node_modules/html-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-4.2.0.tgz", - "integrity": "sha512-OxCHD3yt+qwqng2vvcaPApCEvbx+nXWu+v69TYHx1FO8bffHn/JjHtE3TTQZmHjwvnJe4xxzuecetDVBrQR1Zg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", + "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", "dev": true, + "license": "MIT", "dependencies": { - "html-minifier-terser": "^7.0.0", - "parse5": "^7.0.0" + "html-minifier-terser": "^7.2.0", + "parse5": "^7.1.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -11270,32 +11575,22 @@ "webpack": "^5.0.0" } }, - "node_modules/html-loader/node_modules/clean-css": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.0.tgz", - "integrity": "sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, "node_modules/html-loader/node_modules/commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.20.0 || >=14" + "node": ">=14" } }, "node_modules/html-loader/node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -11304,18 +11599,19 @@ } }, "node_modules/html-loader/node_modules/html-minifier-terser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.0.0.tgz", - "integrity": "sha512-Adqk0b/pWKIQiGvEAuzPKpBKNHiwblr3QSGS7TTr6v+xXKV9AI2k4vWW+6Oytt6Z5SeBnfvYypKOnz8r75pz3Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "dev": true, + "license": "MIT", "dependencies": { "camel-case": "^4.1.2", - "clean-css": "5.2.0", - "commander": "^9.4.0", - "entities": "^4.3.1", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^5.14.2" + "terser": "^5.15.1" }, "bin": { "html-minifier-terser": "cli.js" @@ -11324,15 +11620,6 @@ "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/html-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -11609,6 +11896,16 @@ "node": ">=10.17.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -11771,10 +12068,11 @@ "integrity": "sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==" }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -12076,15 +12374,16 @@ } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12166,6 +12465,25 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -12187,6 +12505,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -12488,15 +12819,19 @@ } }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/isarray": { @@ -12532,6 +12867,25 @@ "set-function-name": "^2.0.1" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jellyfin-apiclient": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/jellyfin-apiclient/-/jellyfin-apiclient-1.11.0.tgz", @@ -12617,12 +12971,11 @@ } }, "node_modules/jsdom": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", - "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", "dev": true, "dependencies": { - "@asamuzakjp/dom-selector": "^2.0.1", "cssstyle": "^4.0.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", @@ -12631,6 +12984,7 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", @@ -12657,9 +13011,9 @@ } }, "node_modules/jsdom/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -12669,9 +13023,9 @@ } }, "node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -12843,13 +13197,14 @@ } }, "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "shell-quote": "^1.8.1" } }, "node_modules/leven": { @@ -13013,7 +13368,8 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "1.0.2", @@ -13600,10 +13956,11 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", - "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", "dev": true, + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -14025,6 +14382,12 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14275,17 +14638,19 @@ } }, "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, + "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14354,16 +14719,21 @@ } }, "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/retry": "^0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -14536,6 +14906,43 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -14739,19 +15146,20 @@ } }, "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz", + "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12 || ^20.9 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.4.38" } }, "node_modules/postcss-clamp": { @@ -14770,9 +15178,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.7.tgz", - "integrity": "sha512-VwzaVfu1kEYDK2yM8ixeKA/QbgQ8k0uxpRevLH9Wam+R3C1sg68vnRB7m2AMhYfjqb5khp4p0EQk5aO90ASAkw==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz", + "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==", "dev": true, "funding": [ { @@ -14785,10 +15193,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -14851,10 +15259,11 @@ } }, "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.0.tgz", + "integrity": "sha512-5CN6fqtsEtEtwf3mFV3B4UaZnlYljPpzmGeDB4yCK067PnAtfLe9uX2aFZaEwxHE7HopG5rUkW8gyHrNAesHEg==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", @@ -14862,32 +15271,33 @@ "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.0.tgz", + "integrity": "sha512-bMuzDgXBbFbByPgj+/r6va8zNuIDUaIIbvAFgdO1t3zdgJZ77BZvu6dfWyd6gHEJnYzmeVr9ayUsAQL3/qLJ0w==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-custom-media": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz", - "integrity": "sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", + "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", "dev": true, "funding": [ { @@ -14900,10 +15310,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" }, "engines": { "node": "^14 || ^16 || >=18" @@ -14913,9 +15323,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "13.3.6", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.6.tgz", - "integrity": "sha512-vVVIwQbJiIz+PBLMIWA6XMi53Zg66/f474KolA7x0Das6EwkATc/9ZvM6zZx2gs7ZhcgVHjmWBbHkK9FlCgLeA==", + "version": "13.3.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz", + "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==", "dev": true, "funding": [ { @@ -14928,9 +15338,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -14942,9 +15352,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz", - "integrity": "sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==", + "version": "7.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz", + "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==", "dev": true, "funding": [ { @@ -14957,9 +15367,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -14995,57 +15405,61 @@ } }, "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.0.tgz", + "integrity": "sha512-xpSdzRqYmy4YIVmjfGyYXKaI1SRnK6CTr+4Zmvyof8ANwvgfZgGdVtmgAvzh59gJm808mJCWQC9tFN0KF5dEXA==", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz", + "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-double-position-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.5.tgz", - "integrity": "sha512-26Tx4BfoxMNO9C89Nk56bfGv4jAwdDVgrQOyHZOP/6/D+xuOBf306KzTjHC2oBzaIIVtX+famOWHv4raxMjJMQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.6.tgz", + "integrity": "sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==", "dev": true, "funding": [ { @@ -15058,7 +15472,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" }, @@ -15246,9 +15660,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.12.tgz", - "integrity": "sha512-flHW2jdRCRe8ClhMgrylR1BCiyyqLLvp1qKfO5wuAclUihldfRsoDIFQWFVW7rJbruil9/LCoHNUvY9JwTlLPw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz", + "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==", "dev": true, "funding": [ { @@ -15261,10 +15675,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" }, "engines": { @@ -15326,43 +15740,55 @@ } }, "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", "dev": true, + "license": "MIT", "dependencies": { - "cosmiconfig": "^8.3.5", + "cosmiconfig": "^9.0.0", "jiti": "^1.20.0", "semver": "^7.5.4" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "postcss": "^7.0.0 || ^8.0.1", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/postcss-loader/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, + "license": "MIT", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -15384,6 +15810,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -15400,6 +15827,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -15412,6 +15840,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -15430,18 +15859,17 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/postcss-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "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" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -15627,108 +16055,115 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.0.tgz", + "integrity": "sha512-0X8I4/9+G03X5/5NnrfopG/YEln2XU8heDh7YqBaiq2SeaKIG3n66ShZPjIolmVuLBQ0BEm3yS8o1mlCLHdW7A==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" + "stylehacks": "^7.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.0.tgz", + "integrity": "sha512-Zty3VlOsD6VSjBMu6PiHCVpLegtBT/qtZRVBcSeyEZ6q1iU5qTYT0WtEoLRV+YubZZguS5/ycfP+NRiKfjv6aw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dev": true, + "license": "MIT", "dependencies": { "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.0.tgz", + "integrity": "sha512-XOJAuX8Q/9GT1sGxlUvaFEe2H9n50bniLZblXXsAT/BwSfFYvzSZeFG7uupwc0KbKpTnflnQ7aMwGzX6JUWliQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.0.tgz", + "integrity": "sha512-f00CExZhD6lNw2vTZbcnmfxVgaVKzUw6IRsIFX3JTT8GdsoABc1WnhhGwL1i8YPJ3sSWw39fv7XPtvLb+3Uitw==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -15737,10 +16172,11 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -15754,10 +16190,11 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -15784,9 +16221,9 @@ } }, "node_modules/postcss-nesting": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.0.tgz", - "integrity": "sha512-QOYnosaZ+mlP6plQrAxFw09UUp2Sgtxj1BVHN+rSVbtV0Yx48zRt9/9F/ZOoxOKBBEsaJk2MYhhVRjeRRw5yuw==", + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.3.tgz", + "integrity": "sha512-8XVmgNNYlmIg1qxSP7O5n76nm0I71noCzlSCl7oqaL2opJ5nSB7r8/726yObKrUTRt6ipjiqHB1wYrMVTM66Sg==", "dev": true, "funding": [ { @@ -15800,7 +16237,7 @@ ], "dependencies": { "@csstools/selector-resolve-nested": "^1.1.0", - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -15811,133 +16248,142 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.0.tgz", + "integrity": "sha512-OnKV52/VFFDAim4n0pdI+JAhsolLBdnCKxE6VV5lW5Q/JeVGFN8UM8ur6/A3EAMLsT1ZRm3fDHh/rBoBQpqi2w==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -15966,16 +16412,17 @@ } }, "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.0.tgz", + "integrity": "sha512-KROvC63A8UQW1eYDljQe1dtwc1E/M+mMwDT6z7khV/weHYLWTghaLRLunU7x1xw85lWFwVZOAGakxekYvKV+0w==", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -16041,9 +16488,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.2.tgz", - "integrity": "sha512-/KIAHELdg5BxsKA/Vc6Nok/66EM7lps8NulKcQWX2S52HdzxAqh+6HcuAFj7trRSW587vlOA4zCjlRFgR+W6Ag==", + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.12.tgz", + "integrity": "sha512-aSeT8hNFKAgywopQE9MINFR5rZjRoA1MKv/Z09aLNlF3ki7Es3oeoFDx52po1QbBVvFuU9wSH/IosqqAa3oJow==", "dev": true, "funding": [ { @@ -16055,65 +16502,66 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", "dependencies": { - "@csstools/postcss-cascade-layers": "^4.0.3", - "@csstools/postcss-color-function": "^3.0.12", - "@csstools/postcss-color-mix-function": "^2.0.12", - "@csstools/postcss-exponential-functions": "^1.0.5", + "@csstools/postcss-cascade-layers": "^4.0.5", + "@csstools/postcss-color-function": "^3.0.16", + "@csstools/postcss-color-mix-function": "^2.0.16", + "@csstools/postcss-exponential-functions": "^1.0.7", "@csstools/postcss-font-format-keywords": "^3.0.2", - "@csstools/postcss-gamut-mapping": "^1.0.5", - "@csstools/postcss-gradients-interpolation-method": "^4.0.13", - "@csstools/postcss-hwb-function": "^3.0.11", - "@csstools/postcss-ic-unit": "^3.0.5", + "@csstools/postcss-gamut-mapping": "^1.0.9", + "@csstools/postcss-gradients-interpolation-method": "^4.0.17", + "@csstools/postcss-hwb-function": "^3.0.15", + "@csstools/postcss-ic-unit": "^3.0.6", "@csstools/postcss-initial": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^4.0.5", - "@csstools/postcss-light-dark-function": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^4.0.7", + "@csstools/postcss-light-dark-function": "^1.0.5", "@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-resize": "^2.0.1", - "@csstools/postcss-logical-viewport-units": "^2.0.7", - "@csstools/postcss-media-minmax": "^1.1.4", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.7", + "@csstools/postcss-logical-viewport-units": "^2.0.9", + "@csstools/postcss-media-minmax": "^1.1.6", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9", "@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2", - "@csstools/postcss-oklab-function": "^3.0.12", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", - "@csstools/postcss-relative-color-syntax": "^2.0.12", + "@csstools/postcss-oklab-function": "^3.0.16", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/postcss-relative-color-syntax": "^2.0.16", "@csstools/postcss-scope-pseudo-class": "^3.0.1", - "@csstools/postcss-stepped-value-functions": "^3.0.6", - "@csstools/postcss-text-decoration-shorthand": "^3.0.4", - "@csstools/postcss-trigonometric-functions": "^3.0.6", + "@csstools/postcss-stepped-value-functions": "^3.0.8", + "@csstools/postcss-text-decoration-shorthand": "^3.0.6", + "@csstools/postcss-trigonometric-functions": "^3.0.8", "@csstools/postcss-unset-value": "^3.0.1", - "autoprefixer": "^10.4.18", + "autoprefixer": "^10.4.19", "browserslist": "^4.22.3", - "css-blank-pseudo": "^6.0.1", - "css-has-pseudo": "^6.0.2", + "css-blank-pseudo": "^6.0.2", + "css-has-pseudo": "^6.0.4", "css-prefers-color-scheme": "^9.0.1", - "cssdb": "^7.11.1", + "cssdb": "^8.0.0", "postcss-attribute-case-insensitive": "^6.0.3", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.7", + "postcss-color-functional-notation": "^6.0.11", "postcss-color-hex-alpha": "^9.0.4", "postcss-color-rebeccapurple": "^9.0.3", - "postcss-custom-media": "^10.0.4", - "postcss-custom-properties": "^13.3.6", - "postcss-custom-selectors": "^7.1.8", + "postcss-custom-media": "^10.0.6", + "postcss-custom-properties": "^13.3.10", + "postcss-custom-selectors": "^7.1.10", "postcss-dir-pseudo-class": "^8.0.1", - "postcss-double-position-gradients": "^5.0.5", + "postcss-double-position-gradients": "^5.0.6", "postcss-focus-visible": "^9.0.1", "postcss-focus-within": "^8.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.1", "postcss-image-set-function": "^6.0.3", - "postcss-lab-function": "^6.0.12", + "postcss-lab-function": "^6.0.16", "postcss-logical": "^7.0.1", - "postcss-nesting": "^12.1.0", + "postcss-nesting": "^12.1.3", "postcss-opacity-percentage": "^2.0.0", "postcss-overflow-shorthand": "^5.0.1", "postcss-page-break": "^3.0.4", "postcss-place": "^9.0.1", - "postcss-pseudo-class-any-link": "^9.0.1", + "postcss-pseudo-class-any-link": "^9.0.2", "postcss-replace-overflow-wrap": "^4.0.0", "postcss-selector-not": "^7.0.2" }, @@ -16125,9 +16573,9 @@ } }, "node_modules/postcss-pseudo-class-any-link": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz", - "integrity": "sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.2.tgz", + "integrity": "sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g==", "dev": true, "funding": [ { @@ -16150,31 +16598,33 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.0.tgz", + "integrity": "sha512-iqGgmBxY9LrblZ0BKLjmrA1mC/cf9A/wYCCqSmD6tMi+xAyVl0+DfixZIHSVDMbCPRPjNmVF0DFGth/IDGelFQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -16471,16 +16921,17 @@ } }, "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.0.tgz", + "integrity": "sha512-Xj5DRdvA97yRy3wjbCH2NKXtDUwEnph6EHr5ZXszsBVKCNrKXYBjzAXqav7/Afz5WwJ/1peZoTguCEJIg7ytmA==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^3.2.0" }, "engines": { - "node": "^14 || ^16 || >= 18" + "node": "^18.12.0 || ^20.9.0 || >= 18" }, "peerDependencies": { "postcss": "^8.4.31" @@ -16496,15 +16947,16 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.0.tgz", + "integrity": "sha512-NYFqcft7vVQMZlQPsMdMPy+qU/zDpy95Malpw4GeA9ZZjM6dVXDshXtDmLc0m4WCD6XeZCJqjTfPT1USsdt+rA==", "dev": true, + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -16793,11 +17245,12 @@ } }, "node_modules/react-router": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", - "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", + "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.15.3" + "@remix-run/router": "1.16.1" }, "engines": { "node": ">=14.0.0" @@ -16807,12 +17260,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", - "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", + "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.15.3", - "react-router": "6.22.3" + "@remix-run/router": "1.16.1", + "react-router": "6.23.1" }, "engines": { "node": ">=14.0.0" @@ -17448,6 +17902,19 @@ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -17542,10 +18009,11 @@ "dev": true }, "node_modules/sass": { - "version": "1.72.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", - "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", + "version": "1.77.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.1.tgz", + "integrity": "sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -17559,29 +18027,30 @@ } }, "node_modules/sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", + "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", "dev": true, + "license": "MIT", "dependencies": { "neo-async": "^2.6.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "fibers": ">= 3.1.0", + "@rspack/core": "0.x || 1.x", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "fibers": { + "@rspack/core": { "optional": true }, "node-sass": { @@ -17592,6 +18061,9 @@ }, "sass-embedded": { "optional": true + }, + "webpack": { + "optional": true } } }, @@ -17653,11 +18125,13 @@ "dev": true }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "license": "MIT", "dependencies": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { @@ -17930,10 +18404,11 @@ } }, "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18250,6 +18725,26 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sonic-forest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.3.tgz", + "integrity": "sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tree-dump": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/sortablejs": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz", @@ -18273,16 +18768,17 @@ } }, "node_modules/source-map-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.2.tgz", - "integrity": "sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -18607,6 +19103,22 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -18703,6 +19215,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -18767,19 +19293,20 @@ "dev": true }, "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.27.0" } }, "node_modules/style-search": { @@ -18789,16 +19316,17 @@ "dev": true }, "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.0.tgz", + "integrity": "sha512-47Nw4pQ6QJb4CA6dzF2m9810sjQik4dfk4UwAm5wlwhrW3syzZKF8AR4/cfO3Cr6lsFgAoznQq0Wg57qhjTA2A==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0", "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -21004,10 +21532,11 @@ "dev": true }, "node_modules/svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -21033,6 +21562,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -21049,6 +21579,7 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -21061,6 +21592,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -21080,13 +21612,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/svgo/node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -21102,6 +21636,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -21116,6 +21651,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -21124,9 +21660,9 @@ } }, "node_modules/swiper": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.0.7.tgz", - "integrity": "sha512-cDfglW1B6uSmB6eB6pNmzDTNLmZtu5bWWa1vak0RU7fOI9qHjMzl7gVBvYSl34b0RU2N11HxxETJqQ5LeqI1cA==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.1.tgz", + "integrity": "sha512-jGmEA/fNz1lACIcY4/40ggm1Gcyv+EUivmgV/Jd2WFPsEJhbWXnRAwzZR8OPjkBLtDxmzcoYG/iiAMWfRs0YKQ==", "funding": [ { "type": "patreon", @@ -21137,6 +21673,7 @@ "url": "http://opencollective.com/swiper" } ], + "license": "MIT", "engines": { "node": ">= 4.7.0" } @@ -21320,6 +21857,19 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -21333,10 +21883,11 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", - "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -21346,6 +21897,7 @@ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -21469,6 +22021,22 @@ "node": ">=18" } }, + "node_modules/tree-dump": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz", + "integrity": "sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -21812,10 +22380,11 @@ } }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22183,9 +22752,9 @@ } }, "node_modules/usehooks-ts": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.16.0.tgz", - "integrity": "sha512-bez95WqYujxp6hFdM/CpRDiVPirZPxlMzOH2QB8yopoKQMXpscyZoxOjpEdaxvV+CAWUDSM62cWnqHE0E/MZ7w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.0.tgz", + "integrity": "sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==", "dependencies": { "lodash.debounce": "^4.0.8" }, @@ -22346,10 +22915,11 @@ } }, "node_modules/vite-node": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.4.0.tgz", - "integrity": "sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "dev": true, + "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", @@ -22368,16 +22938,17 @@ } }, "node_modules/vitest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.4.0.tgz", - "integrity": "sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", + "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/expect": "1.4.0", - "@vitest/runner": "1.4.0", - "@vitest/snapshot": "1.4.0", - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", + "@vitest/expect": "1.6.0", + "@vitest/runner": "1.6.0", + "@vitest/snapshot": "1.6.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", @@ -22389,9 +22960,9 @@ "std-env": "^3.5.0", "strip-literal": "^2.0.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.2", + "tinypool": "^0.8.3", "vite": "^5.0.0", - "vite-node": "1.4.0", + "vite-node": "1.6.0", "why-is-node-running": "^2.2.2" }, "bin": { @@ -22406,8 +22977,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "1.4.0", - "@vitest/ui": "1.4.0", + "@vitest/browser": "1.6.0", + "@vitest/ui": "1.6.0", "happy-dom": "*", "jsdom": "*" }, @@ -22437,6 +23008,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -22460,6 +23032,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -22472,6 +23045,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } @@ -22481,6 +23055,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -22493,6 +23068,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -22505,6 +23081,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -22520,6 +23097,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -22535,6 +23113,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -22547,6 +23126,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -22559,6 +23139,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -22668,10 +23249,11 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", @@ -22681,7 +23263,6 @@ "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", @@ -22699,6 +23280,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -22706,20 +23288,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -22797,26 +23371,33 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, "node_modules/webpack-dev-middleware/node_modules/colorette": { @@ -22825,55 +23406,76 @@ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "node_modules/webpack-dev-middleware/node_modules/memfs": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.2.tgz", + "integrity": "sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.1.2", + "sonic-forest": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", + "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -22884,22 +23486,86 @@ } } }, + "node_modules/webpack-dev-server/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/webpack-dev-server/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "dev": true, + "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" }, "bin": { - "rimraf": "bin.js" + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz", + "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -23311,6 +23977,146 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -23474,17 +24280,6 @@ "@jridgewell/trace-mapping": "^0.3.9" } }, - "@asamuzakjp/dom-selector": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz", - "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==", - "dev": true, - "requires": { - "bidi-js": "^1.0.3", - "css-tree": "^2.3.1", - "is-potential-custom-element-name": "^1.0.1" - } - }, "@babel/code-frame": { "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", @@ -23495,27 +24290,27 @@ } }, "@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true }, "@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", + "@babel/generator": "^7.24.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -23532,12 +24327,12 @@ } }, "@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "dev": true, "requires": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -23592,19 +24387,19 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", - "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", + "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.24.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.24.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "semver": "^6.3.1" } }, @@ -23658,12 +24453,12 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", + "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", "dev": true, "requires": { - "@babel/types": "^7.23.0" + "@babel/types": "^7.24.5" } }, "@babel/helper-module-imports": { @@ -23675,16 +24470,16 @@ } }, "@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" } }, "@babel/helper-optimise-call-expression": { @@ -23697,9 +24492,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -23725,12 +24520,12 @@ } }, "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -23743,23 +24538,23 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.5" } }, "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==" }, "@babel/helper-validator-option": { "version": "7.23.5", @@ -23779,14 +24574,14 @@ } }, "@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", "dev": true, "requires": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" } }, "@babel/highlight": { @@ -23801,11 +24596,21 @@ } }, "@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", + "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.5" + } + }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", @@ -24077,12 +24882,12 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", - "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", + "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" } }, "@babel/plugin-transform-class-properties": { @@ -24096,29 +24901,29 @@ } }, "@babel/plugin-transform-class-static-block": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", - "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-create-class-features-plugin": "^7.24.4", "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", - "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", + "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-split-export-declaration": "^7.24.5", "globals": "^11.1.0" } }, @@ -24133,12 +24938,12 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", - "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", + "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" } }, "@babel/plugin-transform-dotall-regex": { @@ -24332,15 +25137,15 @@ } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", - "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", + "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.1" + "@babel/plugin-transform-parameters": "^7.24.5" } }, "@babel/plugin-transform-object-super": { @@ -24364,23 +25169,23 @@ } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", - "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", + "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", - "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", + "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" } }, "@babel/plugin-transform-private-methods": { @@ -24394,14 +25199,14 @@ } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", - "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", + "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, @@ -24512,12 +25317,12 @@ } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", - "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", + "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.5" } }, "@babel/plugin-transform-unicode-escapes": { @@ -24560,15 +25365,16 @@ } }, "@babel/preset-env": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz", - "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", + "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.24.1", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.5", "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", @@ -24595,12 +25401,12 @@ "@babel/plugin-transform-async-generator-functions": "^7.24.3", "@babel/plugin-transform-async-to-generator": "^7.24.1", "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.5", "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.1", - "@babel/plugin-transform-classes": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.5", "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.5", "@babel/plugin-transform-dotall-regex": "^7.24.1", "@babel/plugin-transform-duplicate-keys": "^7.24.1", "@babel/plugin-transform-dynamic-import": "^7.24.1", @@ -24620,13 +25426,13 @@ "@babel/plugin-transform-new-target": "^7.24.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.5", "@babel/plugin-transform-object-super": "^7.24.1", "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.1", - "@babel/plugin-transform-parameters": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.5", + "@babel/plugin-transform-parameters": "^7.24.5", "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.5", "@babel/plugin-transform-property-literals": "^7.24.1", "@babel/plugin-transform-regenerator": "^7.24.1", "@babel/plugin-transform-reserved-words": "^7.24.1", @@ -24634,7 +25440,7 @@ "@babel/plugin-transform-spread": "^7.24.1", "@babel/plugin-transform-sticky-regex": "^7.24.1", "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.5", "@babel/plugin-transform-unicode-escapes": "^7.24.1", "@babel/plugin-transform-unicode-property-regex": "^7.24.1", "@babel/plugin-transform-unicode-regex": "^7.24.1", @@ -24698,30 +25504,30 @@ } }, "@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "dev": true, "requires": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" } }, @@ -24732,100 +25538,100 @@ "dev": true }, "@csstools/cascade-layer-name-parser": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.9.tgz", - "integrity": "sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz", + "integrity": "sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w==", "dev": true, "requires": {} }, "@csstools/color-helpers": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.0.0.tgz", - "integrity": "sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-4.2.0.tgz", + "integrity": "sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg==", "dev": true }, "@csstools/css-calc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.0.tgz", - "integrity": "sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.2.2.tgz", + "integrity": "sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q==", "dev": true, "requires": {} }, "@csstools/css-color-parser": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.6.2.tgz", - "integrity": "sha512-mlt0PomBlDXMGcbPAqCG36Fw35LZTtaSgCQCHEs4k8QTv1cUKe0rJDlFSJMHtqrgQiLC7LAAS9+s9kKQp2ou/Q==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz", + "integrity": "sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A==", "dev": true, "requires": { - "@csstools/color-helpers": "^4.0.0", - "@csstools/css-calc": "^1.2.0" + "@csstools/color-helpers": "^4.2.0", + "@csstools/css-calc": "^1.2.2" } }, "@csstools/css-parser-algorithms": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz", - "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", + "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", "dev": true, "requires": {} }, "@csstools/css-tokenizer": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz", - "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", + "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", "dev": true }, "@csstools/media-query-list-parser": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz", - "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", + "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", "dev": true, "requires": {} }, "@csstools/postcss-cascade-layers": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.3.tgz", - "integrity": "sha512-RbkQoOH23yGhWVetgBTwFgIOHEyU2tKMN7blTz/YAKKabR6tr9pP7mYS23Q9snFY2hr8WSaV8Le64KdM9BtUSA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.5.tgz", + "integrity": "sha512-nAI2ToT2G/E4XEwJitVjCr2V2SluE9Eaiski+xfRbKSGxFmDUtua7SCG1AtMbjteIVqGDRw7uBd7qXqCZq2b1Q==", "dev": true, "requires": { - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" } }, "@csstools/postcss-color-function": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.12.tgz", - "integrity": "sha512-amPGGDI4Xmgu7VN2ciKQe0pP/j5raaETT50nzbnkydp9FMw7imKxSUnXdVQU4NmRgpLKIc5Q7jox0MFhMBImIg==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz", + "integrity": "sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-color-mix-function": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.12.tgz", - "integrity": "sha512-qpAEGwVVqHSa88i3gLb43IMpT4/LyZEE8HzZylQKKXFVJ7XykXaORTmXySxyH6H+flT+NyCnutKG2fegCVyCug==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz", + "integrity": "sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-exponential-functions": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.5.tgz", - "integrity": "sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz", + "integrity": "sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-font-format-keywords": { @@ -24839,49 +25645,49 @@ } }, "@csstools/postcss-gamut-mapping": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.5.tgz", - "integrity": "sha512-AJ74/4nHXgghLWY4/ydEhu3mzwN8c56EjIGrJsoEhKaNuGBAOtUfE5qbkc9XQQ0G2FMhHggqE+9eRrApeK7ebQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz", + "integrity": "sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.13.tgz", - "integrity": "sha512-dBbyxs9g+mrIzmEH+UtrqJUmvcJB/60j0ijhBcVJMHCgl/rKjj8ey6r/pJOI0EhkVsckOu3Prc9AGzH88C+1pQ==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz", + "integrity": "sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-hwb-function": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.11.tgz", - "integrity": "sha512-c36FtMFptwGn5CmsfdONA40IlWG2lHeoC/TDyED/7lwiTht5okxe6iLAa9t2LjBBo5AHQSHfeMvOASdXk/SHog==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz", + "integrity": "sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-ic-unit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.5.tgz", - "integrity": "sha512-9CriM/zvKXa/lDARlxs/MgeyKE6ZmmX4V77VLD7VUxKLVSt0Go3NCy/gRMbwGzxbrk3iaHFXnFbc2lNw+/7jcg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.6.tgz", + "integrity": "sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" } @@ -24894,24 +25700,24 @@ "requires": {} }, "@csstools/postcss-is-pseudo-class": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.5.tgz", - "integrity": "sha512-qG3MI7IN3KY9UwdaE9E7G7sFydscVW7nAj5OGwaBP9tQPEEVdxXTGI+l1ZW5EUpZFSj+u3q/22fH5+8HI72+Bg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.7.tgz", + "integrity": "sha512-snT/fL6V0I/4AiObPtk2mzJ/eSvpqnf3Kyx9Mc0rI6VskjRkkrEME+kH3aMKBKwjstBrgrYUMoI+vXw2HRi9CQ==", "dev": true, "requires": { - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" } }, "@csstools/postcss-light-dark-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.1.tgz", - "integrity": "sha512-CJOcp+m7Njbu91HtYMMoYuZznsvNSpJtLiR/7BO8/bHTXYPiuAZfxunh7wXLkMbHd5dRBgAVAQZ+H4iFqrvWZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz", + "integrity": "sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, @@ -24946,36 +25752,36 @@ } }, "@csstools/postcss-logical-viewport-units": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.7.tgz", - "integrity": "sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz", + "integrity": "sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ==", "dev": true, "requires": { - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-media-minmax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.4.tgz", - "integrity": "sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz", + "integrity": "sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" } }, "@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.7.tgz", - "integrity": "sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz", + "integrity": "sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" } }, "@csstools/postcss-nested-calc": { @@ -24998,37 +25804,37 @@ } }, "@csstools/postcss-oklab-function": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.12.tgz", - "integrity": "sha512-RNitTHamFvUUh8x+MJuPd2tCekYexUrylGKfUoor5D2GGcgzY1WB6Bl3pIj9t8bAq5h/lcacKaB2wmvUOTfGgQ==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz", + "integrity": "sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, "@csstools/postcss-progressive-custom-properties": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.1.1.tgz", - "integrity": "sha512-cx/bZgj+MK8SpRZNTu2zGeVFMCQfhsaeuDhukAhfA53yykvIXaTIwLi5shW9hfkvPrkqBeFoiRAzq/qogxeHTA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.2.0.tgz", + "integrity": "sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-relative-color-syntax": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.12.tgz", - "integrity": "sha512-VreDGDgE634niwCytLtkoE5kRxfva7bnMzSoyok7Eh9VPYFOm8CK/oJXt9y3df71Bxc9PG4KC8RA3CxTknudnw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz", + "integrity": "sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, @@ -25042,35 +25848,35 @@ } }, "@csstools/postcss-stepped-value-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.6.tgz", - "integrity": "sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz", + "integrity": "sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-text-decoration-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.4.tgz", - "integrity": "sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz", + "integrity": "sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw==", "dev": true, "requires": { - "@csstools/color-helpers": "^4.0.0", + "@csstools/color-helpers": "^4.2.0", "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-trigonometric-functions": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.6.tgz", - "integrity": "sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz", + "integrity": "sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ==", "dev": true, "requires": { - "@csstools/css-calc": "^1.2.0", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4" + "@csstools/css-calc": "^1.2.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1" } }, "@csstools/postcss-unset-value": { @@ -25088,9 +25894,9 @@ "requires": {} }, "@csstools/selector-specificity": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", - "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.0.tgz", + "integrity": "sha512-tGDFEHZ4XJeIt5NF7/nAfLGqPckmDZSnYne5gl67p4agQolE5s4rofdQ3e+VkeukfR91lVtSQ/Jt9DqM1ICiIQ==", "dev": true, "requires": {} }, @@ -25161,9 +25967,9 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "requires": { "@emotion/memoize": "^0.8.1" } @@ -25189,9 +25995,9 @@ } }, "@emotion/serialize": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", - "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", "requires": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", @@ -25206,14 +26012,14 @@ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1" } @@ -25529,34 +26335,34 @@ "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, "@fontsource/noto-sans": { - "version": "5.0.21", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.0.21.tgz", - "integrity": "sha512-1rIZsv6nObjg0rNY0EBBTta5lujmQ1agKn6HN5rY3L2pVvHJqK5n/cNO2HTqfqK837f9PEE/yowVm9mjniDhuw==" + "version": "5.0.22", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.0.22.tgz", + "integrity": "sha512-PwjvKPGFbgpwfKjWZj1zeUvd7ExUW2AqHE9PF9ysAJ2gOuzIHWE6mEVIlchYif7WC2pQhn+g0w6xooCObVi+4A==" }, "@fontsource/noto-sans-hk": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.0.18.tgz", - "integrity": "sha512-ocDIWwuWijrItWx6ak8hKPqL6toT38Z3HQg2jFGeN0/RTpTmVEHv7V90A0NJveETtO5olw6lUbyDsCthawbPyw==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.0.19.tgz", + "integrity": "sha512-MV61w4tJSxSxgUSsiOaWHuuUPB+Uls4ZjX+5N2+cIQgSxubb1CvZ0DsoLkLRv0yxsuXfAv7xe7fj7YRdlHXToA==" }, "@fontsource/noto-sans-jp": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.0.18.tgz", - "integrity": "sha512-tIXpfwpwxxn/Gl60fj2w4R7JK1ZQnE2onyY6saEvAdG42MzgvVZ3xsCUIlyhRtkTCB0qukfSj+eZ8tyS7Yxkuw==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.0.19.tgz", + "integrity": "sha512-N0KUmSqX6tlAlnqFQnDywj9e+4RithtLgFGlcRt/85EI8rmDYJFYQCZVhc+xTIk5Kgr1gLtNToHZzK61BTsWqw==" }, "@fontsource/noto-sans-kr": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.0.18.tgz", - "integrity": "sha512-5P2W+NbUYanP41l2U2kc3HUqd+g4MZlXXvxYZnmGEYpO065N/b7CQpCa9kltREjLnxzLauyeF0j7SRAsI11+XQ==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.0.19.tgz", + "integrity": "sha512-YtEG66Upsu6xU75W9DaLW9aUenCqMwDzTuYnk4iDDOegqSFKGqGMCP3+W86eFbtsi3rRZtSwwl8Yq6NHnNKM/Q==" }, "@fontsource/noto-sans-sc": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.0.18.tgz", - "integrity": "sha512-t8VOu5qD1fEhsAJX3hOVZCbL7B+oTq14575Ypv/lDkxPnhC65wkbw0bQwxGpf+x1m3A2vpevWAumjs1NAQdmcw==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.0.19.tgz", + "integrity": "sha512-WI9j4N3sz9RQElaBpkIE/gnaX6VhIO4ajOq1FVEVKSrxyfAhXtFBGZuG7KBqhWbWrx/DYrxOjK2O9BPxIWKORA==" }, "@fontsource/noto-sans-tc": { - "version": "5.0.18", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.0.18.tgz", - "integrity": "sha512-pHCH3NL+SUIaCMRtao0eomfIVl7Lrg8cF3zbwukQBXM1hbgt82qXbVdmZbo96XCrvjDVwh/3QSlU7ZuGEIjFDQ==" + "version": "5.0.19", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.0.19.tgz", + "integrity": "sha512-/PFoqqUTOVLpuJoGfNpeUl+JoQcHCQcLHAN7PKfBlbrSXHQKT7aYwaCn7c1BBm9iqVAg6M5zVyzabmNc9gHyvw==" }, "@humanwhocodes/config-array": { "version": "0.11.14", @@ -25581,15 +26387,63 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, "@jellyfin/libass-wasm": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@jellyfin/libass-wasm/-/libass-wasm-4.2.1.tgz", "integrity": "sha512-oWK2yz8fFlMXkIuxUc9g/bqN2h56AB+8b6vF/Ikns6WZ/nmcGJ/5lcVaLI4csE83yWgmco4gHO3HyJDsM9EXcQ==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202404101900", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202404101900.tgz", - "integrity": "sha512-/OQyJIfOMQf23eabSEOARYiHkUhwsHNQL9SenEYGuV1p9ikmIRivqHwwtbPSTC7IEO6qmq62rndfQpNpIuIjdw==", + "version": "0.0.0-unstable.202405190501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202405190501.tgz", + "integrity": "sha512-GPpZ763LqOT7QqiyelnE5sLXilXsLW40wHvdX1bmK/I9hANVIBvk8b9RT/GRyX4j2maB//vQ8kCdm+8FG0CBmA==", "requires": {} }, "@jest/schemas": { @@ -25650,6 +26504,32 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/json-pack": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz", + "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==", + "dev": true, + "requires": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + } + }, + "@jsonjoy.com/util": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.1.3.tgz", + "integrity": "sha512-g//kkF4kOwUjemValCtOc/xiYzmwMRmWq3Bn+YnzOzuZLHq2PpMOxxIayN3cKbo7Ko2Np65t6D9H81IvXbXhqg==", + "dev": true, + "requires": {} + }, "@juggle/resize-observer": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", @@ -25662,11 +26542,11 @@ "dev": true }, "@loadable/component": { - "version": "5.16.3", - "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.3.tgz", - "integrity": "sha512-2mVvHs2988oVX2/zM0y6nYhJ4rTVHhkhRnpupBA0Rjl5tS8op9uSR4u5SLVfMLxzpspr2UiIBQD+wEuMsuq4Dg==", + "version": "5.16.4", + "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.16.4.tgz", + "integrity": "sha512-fJWxx9b5WHX90QKmizo9B+es2so8DnBthI1mbflwCoOyvzEwxiZ/SVDCTtXEnHG72/kGBdzr297SSIekYtzSOQ==", "requires": { - "@babel/runtime": "^7.7.7", + "@babel/runtime": "^7.12.18", "hoist-non-react-statics": "^3.3.1", "react-is": "^16.12.0" } @@ -25725,43 +26605,43 @@ } }, "@mui/base": { - "version": "5.0.0-beta.37", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.37.tgz", - "integrity": "sha512-/o3anbb+DeCng8jNsd3704XtmmLDZju1Fo8R2o7ugrVtPQ/QpcqddwKNzKPZwa0J5T8YNW3ZVuHyQgbTnQLisQ==", + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", "requires": { "@babel/runtime": "^7.23.9", "@floating-ui/react-dom": "^2.0.8", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@popperjs/core": "^2.11.8", "clsx": "^2.1.0", "prop-types": "^15.8.1" } }, "@mui/core-downloads-tracker": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.11.tgz", - "integrity": "sha512-JVrJ9Jo4gyU707ujnRzmE8ABBWpXd6FwL9GYULmwZRtfPg89ggXs/S3MStQkpJ1JRWfdLL6S5syXmgQGq5EDAw==" + "version": "5.15.17", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.17.tgz", + "integrity": "sha512-DVAejDQkjNnIac7MfP8sLzuo7fyrBPxNdXe+6bYqOqg1z2OPTlfFAejSNzWe7UenRMuFu9/AyFXj/X2vN2w6dA==" }, "@mui/icons-material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.11.tgz", - "integrity": "sha512-R5ZoQqnKpd+5Ew7mBygTFLxgYsQHPhgR3TDXSgIHYIjGzYuyPLmGLSdcPUoMdi6kxiYqHlpPj4NJxlbaFD0UHA==", + "version": "5.15.17", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.17.tgz", + "integrity": "sha512-xVzl2De7IY36s/keHX45YMiCpsIx3mNv2xwDgtBkRSnZQtVk+Gqufwj1ktUxEyjzEhBl0+PiNJqYC31C+n1n6A==", "requires": { "@babel/runtime": "^7.23.9" } }, "@mui/material": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.11.tgz", - "integrity": "sha512-FA3eEuEZaDaxgN3CgfXezMWbCZ4VCeU/sv0F0/PK5n42qIgsPVD6q+j71qS7/62sp6wRFMHtDMpXRlN+tT/7NA==", + "version": "5.15.17", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.17.tgz", + "integrity": "sha512-ru/MLvTkCh0AZXmqwIpqGTOoVBS/sX48zArXq/DvktxXZx4fskiRA2PEc7Rk5ZlFiZhKh4moL4an+l8zZwq49Q==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.37", - "@mui/core-downloads-tracker": "^5.15.11", - "@mui/system": "^5.15.11", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.15.17", + "@mui/system": "^5.15.15", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", @@ -25771,26 +26651,26 @@ }, "dependencies": { "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" } } }, "@mui/private-theming": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.11.tgz", - "integrity": "sha512-jY/696SnSxSzO1u86Thym7ky5T9CgfidU3NFJjguldqK4f3Z5S97amZ6nffg8gTD0HBjY9scB+4ekqDEUmxZOA==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz", + "integrity": "sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.11", + "@mui/utils": "^5.15.14", "prop-types": "^15.8.1" } }, "@mui/styled-engine": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.11.tgz", - "integrity": "sha512-So21AhAngqo07ces4S/JpX5UaMU2RHXpEA6hNzI6IQjd/1usMPxpgK8wkGgTe3JKmC2KDmH8cvoycq5H3Ii7/w==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", "requires": { "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", @@ -25799,30 +26679,30 @@ } }, "@mui/system": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.11.tgz", - "integrity": "sha512-9j35suLFq+MgJo5ktVSHPbkjDLRMBCV17NMBdEQurh6oWyGnLM4uhU4QGZZQ75o0vuhjJghOCA1jkO3+79wKsA==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz", + "integrity": "sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.11", - "@mui/styled-engine": "^5.15.11", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.11", + "@mui/private-theming": "^5.15.14", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" } }, "@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", "requires": {} }, "@mui/utils": { - "version": "5.15.11", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.11.tgz", - "integrity": "sha512-D6bwqprUa9Stf8ft0dcMqWyWDKEo7D+6pB1k8WajbqlYIRA8J8Kw9Ra7PSZKKePGBGWO+/xxrX1U8HpG/aXQCw==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz", + "integrity": "sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==", "requires": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -25838,9 +26718,9 @@ } }, "@mui/x-data-grid": { - "version": "6.19.5", - "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.5.tgz", - "integrity": "sha512-jV1ZqwyFslKqFScSn4t+xc/tNxLHOeJjz3HoeK+Wdf5t3bPM69pg/jLeg8TmOkAUY62JmQKCLVmcGWiR3AqUKQ==", + "version": "6.19.11", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.19.11.tgz", + "integrity": "sha512-QsUp2cPkjUm8vyTR5gYWuCFqxspljOzElbCm412wzvMTJSKaB0kz7CEecFhxjlsMjQ8B7kY8oDF3LXjjucFcPQ==", "requires": { "@babel/runtime": "^7.23.2", "@mui/utils": "^5.14.16", @@ -25875,6 +26755,13 @@ "fastq": "^1.6.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, "@polka/url": { "version": "1.0.0-next.23", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", @@ -25909,9 +26796,9 @@ } }, "@remix-run/router": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", - "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==" + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==" }, "@rollup/rollup-android-arm-eabi": { "version": "4.9.5", @@ -26065,9 +26952,9 @@ } }, "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "requires": { "@types/node": "*" @@ -26083,9 +26970,9 @@ } }, "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "requires": { "@types/express-serve-static-core": "*", @@ -26125,26 +27012,27 @@ "dev": true }, "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "@types/glob": { @@ -26163,6 +27051,12 @@ "integrity": "sha512-NZwaaynfs1oIoLAV1vg18e7QMVDvw+6SQrdJc8w3BwUaoroVSf6EBj/Sk4PBWGxsq0dzhA2drbsuMC1/6C6KgQ==", "dev": true }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "@types/http-proxy": { "version": "1.17.8", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", @@ -26185,9 +27079,9 @@ "dev": true }, "@types/linkify-it": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", - "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", "dev": true }, "@types/loadable__component": { @@ -26223,13 +27117,13 @@ } }, "@types/markdown-it": { - "version": "13.0.7", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", - "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==", "dev": true, "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" + "@types/linkify-it": "^5", + "@types/mdurl": "^2" } }, "@types/mdast": { @@ -26242,15 +27136,15 @@ } }, "@types/mdurl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", - "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", "dev": true }, "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "@types/minimatch": { @@ -26274,6 +27168,15 @@ "undici-types": "~5.26.4" } }, + "@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", @@ -26303,12 +27206,12 @@ "dev": true }, "@types/react": { - "version": "17.0.79", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.79.tgz", - "integrity": "sha512-gavKA8AwJAML9zWHuiQRASjrrPJHbT/zrUDHiUGUf+l5a3pkEd6atvjjq+8y2vfRHBJLQJjFpxSa9I8qe9zHAw==", + "version": "17.0.80", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", + "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", "requires": { "@types/prop-types": "*", - "@types/scheduler": "*", + "@types/scheduler": "^0.16", "csstype": "^3.0.2" } }, @@ -26322,9 +27225,9 @@ } }, "@types/react-lazy-load-image-component": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@types/react-lazy-load-image-component/-/react-lazy-load-image-component-1.6.3.tgz", - "integrity": "sha512-HsIsYz7yWWTh/bftdzGnijKD26JyofLRqM/RM80sxs7Gk13G83ew8R/ra2XzXuiZfjNEjAq/Va+NBHFF9ciwxA==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/react-lazy-load-image-component/-/react-lazy-load-image-component-1.6.4.tgz", + "integrity": "sha512-8pFPeDPF4yVG4lU1/ixZidJEEDZmEOYOTYDvmIu2IAabyuv97Q7n/93nMCocHvQ7vD1czKGiW+op55D9m3MkdA==", "requires": { "@types/react": "*", "csstype": "^3.0.2" @@ -26339,9 +27242,9 @@ } }, "@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "dev": true }, "@types/scheduler": { @@ -26355,29 +27258,40 @@ "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", "dev": true }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "requires": { "@types/mime": "^1", "@types/node": "*" } }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "requires": { "@types/node": "*" @@ -26416,9 +27330,9 @@ } }, "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "requires": { "@types/node": "*" @@ -26589,23 +27503,23 @@ "dev": true }, "@vitest/expect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.4.0.tgz", - "integrity": "sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", "dev": true, "requires": { - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", "chai": "^4.3.10" } }, "@vitest/runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.4.0.tgz", - "integrity": "sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", + "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", "dev": true, "requires": { - "@vitest/utils": "1.4.0", + "@vitest/utils": "1.6.0", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -26628,9 +27542,9 @@ } }, "@vitest/snapshot": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.4.0.tgz", - "integrity": "sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", + "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", "dev": true, "requires": { "magic-string": "^0.30.5", @@ -26639,18 +27553,18 @@ } }, "@vitest/spy": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.4.0.tgz", - "integrity": "sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "dev": true, "requires": { "tinyspy": "^2.2.0" } }, "@vitest/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", "dev": true, "requires": { "diff-sequences": "^29.6.3", @@ -27040,12 +27954,6 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, "array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -27448,15 +28356,6 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", - "dev": true, - "requires": { - "require-from-string": "^2.0.2" - } - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -27533,13 +28432,11 @@ } }, "bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" }, @@ -27608,6 +28505,15 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "requires": { + "run-applescript": "^7.0.0" + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -27816,9 +28722,9 @@ } }, "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -27876,9 +28782,9 @@ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -28203,9 +29109,9 @@ } }, "core-js": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz", - "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==" + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==" }, "core-js-compat": { "version": "3.36.1", @@ -28254,9 +29160,9 @@ } }, "css-blank-pseudo": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.1.tgz", - "integrity": "sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz", + "integrity": "sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.13" @@ -28276,40 +29182,37 @@ "dev": true }, "css-has-pseudo": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.2.tgz", - "integrity": "sha512-Z2Qm5yyOvJRTy6THdUlnGIX6PW/1wOc4FHWlfkcBkfkpZ3oz6lPdG+h+J7t1HZHT4uSSVR8XatXiMpqMUADXow==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.4.tgz", + "integrity": "sha512-u9vuyeksska4OMRC061xTQb2RJZv7T1JJjnZbaQpNhZRPF1UqGpBqHnlcwRS/1vv+QOpD4NVsaFT4U1zmkciuA==", "dev": true, "requires": { - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0" } }, "css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.1.tgz", + "integrity": "sha512-OxIR5P2mjO1PSXk44bWuQ8XtMK4dpEqpIyERCx3ewOo3I8EmbcxMPUc5ScLtQfgXtOojoMv57So4V/C02HQLsw==", "dev": true, "requires": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" }, "dependencies": { "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, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true } } }, @@ -28380,9 +29283,9 @@ "dev": true }, "cssdb": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", - "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.0.1.tgz", + "integrity": "sha512-diegY/vnOYmPXY0bOBj5jeHaiK8MMpjgPuipirY8pF9AthtqEXgqVdKF5tnb6RTc/ZdhQqG0TBnInQ5CbbUW7Q==", "dev": true }, "cssesc": { @@ -28392,57 +29295,57 @@ "dev": true }, "cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.1.tgz", + "integrity": "sha512-917Mej/4SdI7b55atsli3sU4MOJ9XDoKgnlCtQtXYj8XUFcM3riTuYHyqBBnnskawW+zWwp0KxJzpEUodlpqUg==", "dev": true, "requires": { - "cssnano-preset-default": "^6.1.2", + "cssnano-preset-default": "^7.0.1", "lilconfig": "^3.1.1" } }, "cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.1.tgz", + "integrity": "sha512-Fumyr+uZMcjYQeuHssAZxn0cKj3cdQc5GcxkBcmEzISGB+UW9CLNlU4tBOJbJGcPukFDlicG32eFbrc8K9V5pw==", "dev": true, "requires": { "browserslist": "^4.23.0", "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.0", + "postcss-colormin": "^7.0.0", + "postcss-convert-values": "^7.0.0", + "postcss-discard-comments": "^7.0.0", + "postcss-discard-duplicates": "^7.0.0", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.0", + "postcss-merge-rules": "^7.0.0", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.0", + "postcss-minify-selectors": "^7.0.0", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.0", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.0", + "postcss-reduce-initial": "^7.0.0", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.0", + "postcss-unique-selectors": "^7.0.0" } }, "cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true, "requires": {} }, @@ -28643,6 +29546,22 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "requires": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + } + }, + "default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true + }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -28664,9 +29583,9 @@ } }, "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true }, "define-properties": { @@ -28792,12 +29711,6 @@ "path-type": "^4.0.0" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -28906,6 +29819,12 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -28958,6 +29877,12 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -29713,16 +30638,16 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "requires": {} }, "eslint-plugin-sonarjs": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.24.0.tgz", - "integrity": "sha512-87zp50mbbNrSTuoEOebdRQBPa0mdejA5UEjyuScyIw8hEpEjfWP89Qhkq5xVZfVyVSRQKZc9alVm7yRKQvvUmg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.25.1.tgz", + "integrity": "sha512-5IOKvj/GMBNqjxBdItfotfRHo7w48496GOu1hxdeXuD0mB1JBlDCViiLHETDTfA8pDAVSBimBEQoetRXYceQEw==", "dev": true, "requires": {} }, @@ -29926,9 +30851,9 @@ } }, "expose-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-4.1.0.tgz", - "integrity": "sha512-oLAesnzerwDGGADzBMnu0LPqqnlVz6e2V9lTa+/4X6VeW9W93x/nJpw05WBrcIdbqXm/EdnEQpiVDFFiQXuNfg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.0.tgz", + "integrity": "sha512-BtUqYRmvx1bEY5HN6eK2I9URUZgNmN0x5UANuocaNjXSgfoDlkXt+wyEMe7i5DzDNh2BKJHPc5F4rBwEdSQX6w==", "dev": true, "requires": {} }, @@ -30407,6 +31332,24 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, "fork-ts-checker-webpack-plugin": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", @@ -31068,9 +32011,9 @@ } }, "hls.js": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.7.tgz", - "integrity": "sha512-Hnyf7ojTBtXHeOW1/t6wCBJSiK1WpoKF9yg7juxldDx8u3iswrkPt2wbOA/1NiwU4j27DSIVoIEJRAhcdMef/A==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.8.tgz", + "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==" }, "hoist-non-react-statics": { "version": "3.3.2", @@ -31108,9 +32051,9 @@ } }, "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true }, "html-escaper": { @@ -31120,56 +32063,41 @@ "dev": true }, "html-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-4.2.0.tgz", - "integrity": "sha512-OxCHD3yt+qwqng2vvcaPApCEvbx+nXWu+v69TYHx1FO8bffHn/JjHtE3TTQZmHjwvnJe4xxzuecetDVBrQR1Zg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", + "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", "dev": true, "requires": { - "html-minifier-terser": "^7.0.0", - "parse5": "^7.0.0" + "html-minifier-terser": "^7.2.0", + "parse5": "^7.1.2" }, "dependencies": { - "clean-css": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.0.tgz", - "integrity": "sha512-2639sWGa43EMmG7fn8mdVuBSs6HuWaSor+ZPoFWzenBc6oN+td8YhTfghWXZ25G1NiiSvz8bOFBS7PdSbTiqEA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, "commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true }, "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, "html-minifier-terser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.0.0.tgz", - "integrity": "sha512-Adqk0b/pWKIQiGvEAuzPKpBKNHiwblr3QSGS7TTr6v+xXKV9AI2k4vWW+6Oytt6Z5SeBnfvYypKOnz8r75pz3Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "dev": true, "requires": { "camel-case": "^4.1.2", - "clean-css": "5.2.0", - "commander": "^9.4.0", - "entities": "^4.3.1", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", - "terser": "^5.14.2" + "terser": "^5.15.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, @@ -31365,6 +32293,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -31486,9 +32420,9 @@ "integrity": "sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==" }, "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true }, "irregular-plurals": { @@ -31693,9 +32627,9 @@ "dev": true }, "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true }, "is-extendable": { @@ -31749,6 +32683,15 @@ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + } + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -31761,6 +32704,12 @@ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true }, + "is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -31958,12 +32907,12 @@ "dev": true }, "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, "requires": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" } }, "isarray": { @@ -31996,6 +32945,16 @@ "set-function-name": "^2.0.1" } }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jellyfin-apiclient": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/jellyfin-apiclient/-/jellyfin-apiclient-1.11.0.tgz", @@ -32062,12 +33021,11 @@ } }, "jsdom": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", - "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", "dev": true, "requires": { - "@asamuzakjp/dom-selector": "^2.0.1", "cssstyle": "^4.0.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", @@ -32076,6 +33034,7 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", @@ -32091,18 +33050,18 @@ }, "dependencies": { "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "requires": { "debug": "^4.3.4" } }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "requires": { "agent-base": "^7.0.2", @@ -32252,13 +33211,13 @@ } }, "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, "requires": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "shell-quote": "^1.8.1" } }, "leven": { @@ -32826,9 +33785,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", - "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", "dev": true, "requires": { "schema-utils": "^4.0.0", @@ -33165,6 +34124,12 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, + "nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -33354,14 +34319,15 @@ } }, "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" } }, "opener": { @@ -33409,12 +34375,13 @@ "dev": true }, "p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, "requires": { - "@types/retry": "^0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, @@ -33552,6 +34519,30 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true + }, + "minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true + } + } + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -33683,12 +34674,12 @@ } }, "postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz", + "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.0.16", "postcss-value-parser": "^4.2.0" } }, @@ -33702,15 +34693,15 @@ } }, "postcss-color-functional-notation": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.7.tgz", - "integrity": "sha512-VwzaVfu1kEYDK2yM8ixeKA/QbgQ8k0uxpRevLH9Wam+R3C1sg68vnRB7m2AMhYfjqb5khp4p0EQk5aO90ASAkw==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz", + "integrity": "sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, @@ -33735,9 +34726,9 @@ } }, "postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.0.tgz", + "integrity": "sha512-5CN6fqtsEtEtwf3mFV3B4UaZnlYljPpzmGeDB4yCK067PnAtfLe9uX2aFZaEwxHE7HopG5rUkW8gyHrNAesHEg==", "dev": true, "requires": { "browserslist": "^4.23.0", @@ -33747,9 +34738,9 @@ } }, "postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.0.tgz", + "integrity": "sha512-bMuzDgXBbFbByPgj+/r6va8zNuIDUaIIbvAFgdO1t3zdgJZ77BZvu6dfWyd6gHEJnYzmeVr9ayUsAQL3/qLJ0w==", "dev": true, "requires": { "browserslist": "^4.23.0", @@ -33757,39 +34748,39 @@ } }, "postcss-custom-media": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.4.tgz", - "integrity": "sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz", + "integrity": "sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/media-query-list-parser": "^2.1.9" + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/media-query-list-parser": "^2.1.11" } }, "postcss-custom-properties": { - "version": "13.3.6", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.6.tgz", - "integrity": "sha512-vVVIwQbJiIz+PBLMIWA6XMi53Zg66/f474KolA7x0Das6EwkATc/9ZvM6zZx2gs7ZhcgVHjmWBbHkK9FlCgLeA==", + "version": "13.3.10", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz", + "integrity": "sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-custom-selectors": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.8.tgz", - "integrity": "sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==", + "version": "7.1.10", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz", + "integrity": "sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^1.0.9", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", + "@csstools/cascade-layer-name-parser": "^1.0.11", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", "postcss-selector-parser": "^6.0.13" } }, @@ -33803,40 +34794,40 @@ } }, "postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.0.tgz", + "integrity": "sha512-xpSdzRqYmy4YIVmjfGyYXKaI1SRnK6CTr+4Zmvyof8ANwvgfZgGdVtmgAvzh59gJm808mJCWQC9tFN0KF5dEXA==", "dev": true, "requires": {} }, "postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz", + "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==", "dev": true, "requires": {} }, "postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, "requires": {} }, "postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "dev": true, "requires": {} }, "postcss-double-position-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.5.tgz", - "integrity": "sha512-26Tx4BfoxMNO9C89Nk56bfGv4jAwdDVgrQOyHZOP/6/D+xuOBf306KzTjHC2oBzaIIVtX+famOWHv4raxMjJMQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.6.tgz", + "integrity": "sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0", "postcss-value-parser": "^4.2.0" } @@ -33944,15 +34935,15 @@ } }, "postcss-lab-function": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.12.tgz", - "integrity": "sha512-flHW2jdRCRe8ClhMgrylR1BCiyyqLLvp1qKfO5wuAclUihldfRsoDIFQWFVW7rJbruil9/LCoHNUvY9JwTlLPw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz", + "integrity": "sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^1.6.2", - "@csstools/css-parser-algorithms": "^2.6.1", - "@csstools/css-tokenizer": "^2.2.4", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", + "@csstools/css-color-parser": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.6.3", + "@csstools/css-tokenizer": "^2.3.1", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", "@csstools/utilities": "^1.0.0" } }, @@ -33994,12 +34985,12 @@ } }, "postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", "dev": true, "requires": { - "cosmiconfig": "^8.3.5", + "cosmiconfig": "^9.0.0", "jiti": "^1.20.0", "semver": "^7.5.4" }, @@ -34011,15 +35002,15 @@ "dev": true }, "cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "requires": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" } }, "import-fresh": { @@ -34060,13 +35051,10 @@ "dev": true }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true } } }, @@ -34226,78 +35214,78 @@ "dev": true }, "postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.0.tgz", + "integrity": "sha512-0X8I4/9+G03X5/5NnrfopG/YEln2XU8heDh7YqBaiq2SeaKIG3n66ShZPjIolmVuLBQ0BEm3yS8o1mlCLHdW7A==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" + "stylehacks": "^7.0.0" } }, "postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.0.tgz", + "integrity": "sha512-Zty3VlOsD6VSjBMu6PiHCVpLegtBT/qtZRVBcSeyEZ6q1iU5qTYT0WtEoLRV+YubZZguS5/ycfP+NRiKfjv6aw==", "dev": true, "requires": { "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-selector-parser": "^6.0.16" } }, "postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dev": true, "requires": { "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.0.tgz", + "integrity": "sha512-XOJAuX8Q/9GT1sGxlUvaFEe2H9n50bniLZblXXsAT/BwSfFYvzSZeFG7uupwc0KbKpTnflnQ7aMwGzX6JUWliQ==", "dev": true, "requires": { "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.0.tgz", + "integrity": "sha512-f00CExZhD6lNw2vTZbcnmfxVgaVKzUw6IRsIFX3JTT8GdsoABc1WnhhGwL1i8YPJ3sSWw39fv7XPtvLb+3Uitw==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.16" } }, "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "requires": {} }, "postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "requires": { "icss-utils": "^5.0.0", @@ -34306,9 +35294,9 @@ } }, "postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" @@ -34324,72 +35312,72 @@ } }, "postcss-nesting": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.0.tgz", - "integrity": "sha512-QOYnosaZ+mlP6plQrAxFw09UUp2Sgtxj1BVHN+rSVbtV0Yx48zRt9/9F/ZOoxOKBBEsaJk2MYhhVRjeRRw5yuw==", + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.3.tgz", + "integrity": "sha512-8XVmgNNYlmIg1qxSP7O5n76nm0I71noCzlSCl7oqaL2opJ5nSB7r8/726yObKrUTRt6ipjiqHB1wYrMVTM66Sg==", "dev": true, "requires": { "@csstools/selector-resolve-nested": "^1.1.0", - "@csstools/selector-specificity": "^3.0.2", + "@csstools/selector-specificity": "^3.1.0", "postcss-selector-parser": "^6.0.13" } }, "postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true, "requires": {} }, "postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.0.tgz", + "integrity": "sha512-OnKV52/VFFDAim4n0pdI+JAhsolLBdnCKxE6VV5lW5Q/JeVGFN8UM8ur6/A3EAMLsT1ZRm3fDHh/rBoBQpqi2w==", "dev": true, "requires": { "browserslist": "^4.23.0", @@ -34397,18 +35385,18 @@ } }, "postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -34422,12 +35410,12 @@ "requires": {} }, "postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.0.tgz", + "integrity": "sha512-KROvC63A8UQW1eYDljQe1dtwc1E/M+mMwDT6z7khV/weHYLWTghaLRLunU7x1xw85lWFwVZOAGakxekYvKV+0w==", "dev": true, "requires": { - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" } }, @@ -34457,86 +35445,86 @@ } }, "postcss-preset-env": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.2.tgz", - "integrity": "sha512-/KIAHELdg5BxsKA/Vc6Nok/66EM7lps8NulKcQWX2S52HdzxAqh+6HcuAFj7trRSW587vlOA4zCjlRFgR+W6Ag==", + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.5.12.tgz", + "integrity": "sha512-aSeT8hNFKAgywopQE9MINFR5rZjRoA1MKv/Z09aLNlF3ki7Es3oeoFDx52po1QbBVvFuU9wSH/IosqqAa3oJow==", "dev": true, "requires": { - "@csstools/postcss-cascade-layers": "^4.0.3", - "@csstools/postcss-color-function": "^3.0.12", - "@csstools/postcss-color-mix-function": "^2.0.12", - "@csstools/postcss-exponential-functions": "^1.0.5", + "@csstools/postcss-cascade-layers": "^4.0.5", + "@csstools/postcss-color-function": "^3.0.16", + "@csstools/postcss-color-mix-function": "^2.0.16", + "@csstools/postcss-exponential-functions": "^1.0.7", "@csstools/postcss-font-format-keywords": "^3.0.2", - "@csstools/postcss-gamut-mapping": "^1.0.5", - "@csstools/postcss-gradients-interpolation-method": "^4.0.13", - "@csstools/postcss-hwb-function": "^3.0.11", - "@csstools/postcss-ic-unit": "^3.0.5", + "@csstools/postcss-gamut-mapping": "^1.0.9", + "@csstools/postcss-gradients-interpolation-method": "^4.0.17", + "@csstools/postcss-hwb-function": "^3.0.15", + "@csstools/postcss-ic-unit": "^3.0.6", "@csstools/postcss-initial": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^4.0.5", - "@csstools/postcss-light-dark-function": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^4.0.7", + "@csstools/postcss-light-dark-function": "^1.0.5", "@csstools/postcss-logical-float-and-clear": "^2.0.1", "@csstools/postcss-logical-overflow": "^1.0.1", "@csstools/postcss-logical-overscroll-behavior": "^1.0.1", "@csstools/postcss-logical-resize": "^2.0.1", - "@csstools/postcss-logical-viewport-units": "^2.0.7", - "@csstools/postcss-media-minmax": "^1.1.4", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.7", + "@csstools/postcss-logical-viewport-units": "^2.0.9", + "@csstools/postcss-media-minmax": "^1.1.6", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.9", "@csstools/postcss-nested-calc": "^3.0.2", "@csstools/postcss-normalize-display-values": "^3.0.2", - "@csstools/postcss-oklab-function": "^3.0.12", - "@csstools/postcss-progressive-custom-properties": "^3.1.1", - "@csstools/postcss-relative-color-syntax": "^2.0.12", + "@csstools/postcss-oklab-function": "^3.0.16", + "@csstools/postcss-progressive-custom-properties": "^3.2.0", + "@csstools/postcss-relative-color-syntax": "^2.0.16", "@csstools/postcss-scope-pseudo-class": "^3.0.1", - "@csstools/postcss-stepped-value-functions": "^3.0.6", - "@csstools/postcss-text-decoration-shorthand": "^3.0.4", - "@csstools/postcss-trigonometric-functions": "^3.0.6", + "@csstools/postcss-stepped-value-functions": "^3.0.8", + "@csstools/postcss-text-decoration-shorthand": "^3.0.6", + "@csstools/postcss-trigonometric-functions": "^3.0.8", "@csstools/postcss-unset-value": "^3.0.1", - "autoprefixer": "^10.4.18", + "autoprefixer": "^10.4.19", "browserslist": "^4.22.3", - "css-blank-pseudo": "^6.0.1", - "css-has-pseudo": "^6.0.2", + "css-blank-pseudo": "^6.0.2", + "css-has-pseudo": "^6.0.4", "css-prefers-color-scheme": "^9.0.1", - "cssdb": "^7.11.1", + "cssdb": "^8.0.0", "postcss-attribute-case-insensitive": "^6.0.3", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.7", + "postcss-color-functional-notation": "^6.0.11", "postcss-color-hex-alpha": "^9.0.4", "postcss-color-rebeccapurple": "^9.0.3", - "postcss-custom-media": "^10.0.4", - "postcss-custom-properties": "^13.3.6", - "postcss-custom-selectors": "^7.1.8", + "postcss-custom-media": "^10.0.6", + "postcss-custom-properties": "^13.3.10", + "postcss-custom-selectors": "^7.1.10", "postcss-dir-pseudo-class": "^8.0.1", - "postcss-double-position-gradients": "^5.0.5", + "postcss-double-position-gradients": "^5.0.6", "postcss-focus-visible": "^9.0.1", "postcss-focus-within": "^8.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.1", "postcss-image-set-function": "^6.0.3", - "postcss-lab-function": "^6.0.12", + "postcss-lab-function": "^6.0.16", "postcss-logical": "^7.0.1", - "postcss-nesting": "^12.1.0", + "postcss-nesting": "^12.1.3", "postcss-opacity-percentage": "^2.0.0", "postcss-overflow-shorthand": "^5.0.1", "postcss-page-break": "^3.0.4", "postcss-place": "^9.0.1", - "postcss-pseudo-class-any-link": "^9.0.1", + "postcss-pseudo-class-any-link": "^9.0.2", "postcss-replace-overflow-wrap": "^4.0.0", "postcss-selector-not": "^7.0.2" } }, "postcss-pseudo-class-any-link": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.1.tgz", - "integrity": "sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.2.tgz", + "integrity": "sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.13" } }, "postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.0.tgz", + "integrity": "sha512-iqGgmBxY9LrblZ0BKLjmrA1mC/cf9A/wYCCqSmD6tMi+xAyVl0+DfixZIHSVDMbCPRPjNmVF0DFGth/IDGelFQ==", "dev": true, "requires": { "browserslist": "^4.23.0", @@ -34544,9 +35532,9 @@ } }, "postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -34750,9 +35738,9 @@ } }, "postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.0.tgz", + "integrity": "sha512-Xj5DRdvA97yRy3wjbCH2NKXtDUwEnph6EHr5ZXszsBVKCNrKXYBjzAXqav7/Afz5WwJ/1peZoTguCEJIg7ytmA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", @@ -34767,9 +35755,9 @@ "requires": {} }, "postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.0.tgz", + "integrity": "sha512-NYFqcft7vVQMZlQPsMdMPy+qU/zDpy95Malpw4GeA9ZZjM6dVXDshXtDmLc0m4WCD6XeZCJqjTfPT1USsdt+rA==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.16" @@ -34989,20 +35977,20 @@ } }, "react-router": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", - "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", + "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", "requires": { - "@remix-run/router": "1.15.3" + "@remix-run/router": "1.16.1" } }, "react-router-dom": { - "version": "6.22.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", - "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", + "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", "requires": { - "@remix-run/router": "1.15.3", - "react-router": "6.22.3" + "@remix-run/router": "1.16.1", + "react-router": "6.23.1" } }, "react-transition-group": { @@ -35468,6 +36456,12 @@ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, + "run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -35535,9 +36529,9 @@ "dev": true }, "sass": { - "version": "1.72.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", - "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", + "version": "1.77.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.1.tgz", + "integrity": "sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -35546,9 +36540,9 @@ } }, "sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", + "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", "dev": true, "requires": { "neo-async": "^2.6.2" @@ -35596,11 +36590,12 @@ "dev": true }, "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "requires": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" } }, @@ -35836,9 +36831,9 @@ "dev": true }, "shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, "side-channel": { @@ -36092,6 +37087,15 @@ "websocket-driver": "^0.7.4" } }, + "sonic-forest": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sonic-forest/-/sonic-forest-1.0.3.tgz", + "integrity": "sha512-dtwajos6IWMEWXdEbW1IkEkyL2gztCAgDplRIX+OT5aRKnEd5e7r7YCxRgXZdhRP1FBdOBf8axeTPhzDv8T4wQ==", + "dev": true, + "requires": { + "tree-dump": "^1.0.0" + } + }, "sortablejs": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz", @@ -36109,9 +37113,9 @@ "dev": true }, "source-map-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.2.tgz", - "integrity": "sha512-oYwAqCuL0OZhBoSgmdrLa7mv9MjommVMiQIWgcztf+eS4+8BfcUee6nenFnDhKOhzAVnk5gpZdfnz1iiBv+5sg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", "dev": true, "requires": { "iconv-lite": "^0.6.3", @@ -36378,6 +37382,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -36453,6 +37468,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -36498,9 +37522,9 @@ } }, "style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", + "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", "dev": true, "requires": {} }, @@ -36511,9 +37535,9 @@ "dev": true }, "stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.0.tgz", + "integrity": "sha512-47Nw4pQ6QJb4CA6dzF2m9810sjQik4dfk4UwAm5wlwhrW3syzZKF8AR4/cfO3Cr6lsFgAoznQq0Wg57qhjTA2A==", "dev": true, "requires": { "browserslist": "^4.23.0", @@ -38208,9 +39232,9 @@ "dev": true }, "svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, "requires": { "@trysound/sax": "0.2.0", @@ -38287,9 +39311,9 @@ } }, "swiper": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.0.7.tgz", - "integrity": "sha512-cDfglW1B6uSmB6eB6pNmzDTNLmZtu5bWWa1vak0RU7fOI9qHjMzl7gVBvYSl34b0RU2N11HxxETJqQ5LeqI1cA==" + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.1.tgz", + "integrity": "sha512-jGmEA/fNz1lACIcY4/40ggm1Gcyv+EUivmgV/Jd2WFPsEJhbWXnRAwzZR8OPjkBLtDxmzcoYG/iiAMWfRs0YKQ==" }, "symbol-tree": { "version": "3.2.4", @@ -38421,6 +39445,13 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "requires": {} + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -38434,9 +39465,9 @@ "dev": true }, "tinypool": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", - "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", "dev": true }, "tinyspy": { @@ -38538,6 +39569,13 @@ "punycode": "^2.3.1" } }, + "tree-dump": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz", + "integrity": "sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==", + "dev": true, + "requires": {} + }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -38791,9 +39829,9 @@ } }, "typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true }, "uc.micro": { @@ -39068,9 +40106,9 @@ "requires": {} }, "usehooks-ts": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.16.0.tgz", - "integrity": "sha512-bez95WqYujxp6hFdM/CpRDiVPirZPxlMzOH2QB8yopoKQMXpscyZoxOjpEdaxvV+CAWUDSM62cWnqHE0E/MZ7w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.0.tgz", + "integrity": "sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==", "requires": { "lodash.debounce": "^4.0.8" } @@ -39161,9 +40199,9 @@ } }, "vite-node": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.4.0.tgz", - "integrity": "sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "dev": true, "requires": { "cac": "^6.7.14", @@ -39174,16 +40212,16 @@ } }, "vitest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.4.0.tgz", - "integrity": "sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", + "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", "dev": true, "requires": { - "@vitest/expect": "1.4.0", - "@vitest/runner": "1.4.0", - "@vitest/snapshot": "1.4.0", - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", + "@vitest/expect": "1.6.0", + "@vitest/runner": "1.6.0", + "@vitest/snapshot": "1.6.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", @@ -39195,9 +40233,9 @@ "std-env": "^3.5.0", "strip-literal": "^2.0.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.2", + "tinypool": "^0.8.3", "vite": "^5.0.0", - "vite-node": "1.4.0", + "vite-node": "1.6.0", "why-is-node-running": "^2.2.2" }, "dependencies": { @@ -39404,9 +40442,9 @@ } }, "webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "requires": { "@discoveryjs/json-ext": "0.5.7", @@ -39417,7 +40455,6 @@ "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", @@ -39430,12 +40467,6 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -39481,14 +40512,15 @@ } }, "webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", + "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", "dev": true, "requires": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, @@ -39498,60 +40530,109 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true + }, + "memfs": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.2.tgz", + "integrity": "sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==", + "dev": true, + "requires": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.1.2", + "sonic-forest": "^1.0.0", + "tslib": "^2.0.0" + } } } }, "webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", "dev": true, "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", + "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", "dev": true, "requires": { - "glob": "^7.1.3" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + } + }, + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true + }, + "rimraf": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz", + "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==", + "dev": true, + "requires": { + "glob": "^10.3.7" } } } @@ -39829,6 +40910,94 @@ } } }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 795d5d32ea..e66fb621f9 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,21 @@ { "name": "jellyfin-web", - "version": "10.9.0", + "version": "10.10.0", "description": "Web interface for Jellyfin", "repository": "https://github.com/jellyfin/jellyfin-web", "license": "GPL-2.0-or-later", "devDependencies": { - "@babel/core": "7.24.3", + "@babel/core": "7.24.5", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-private-methods": "7.18.6", "@babel/plugin-transform-modules-umd": "7.24.1", - "@babel/preset-env": "7.24.3", + "@babel/preset-env": "7.24.5", "@babel/preset-react": "7.24.1", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", - "@types/markdown-it": "13.0.7", - "@types/react": "17.0.79", + "@types/markdown-it": "14.1.1", + "@types/react": "17.0.80", "@types/react-dom": "17.0.25", "@types/sortablejs": "1.15.8", "@typescript-eslint/eslint-plugin": "5.62.0", @@ -28,8 +28,8 @@ "confusing-browser-globals": "1.0.11", "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", - "css-loader": "6.10.0", - "cssnano": "6.1.2", + "css-loader": "7.1.1", + "cssnano": "7.0.1", "es-check": "7.1.1", "eslint": "8.57.0", "eslint-plugin-compat": "4.2.0", @@ -37,62 +37,62 @@ "eslint-plugin-import": "2.29.1", "eslint-plugin-jsx-a11y": "6.8.0", "eslint-plugin-react": "7.34.1", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-sonarjs": "0.24.0", - "expose-loader": "4.1.0", + "eslint-plugin-react-hooks": "4.6.2", + "eslint-plugin-sonarjs": "0.25.1", + "expose-loader": "5.0.0", "fork-ts-checker-webpack-plugin": "9.0.2", - "html-loader": "4.2.0", + "html-loader": "5.0.0", "html-webpack-plugin": "5.6.0", - "jsdom": "23.2.0", - "mini-css-extract-plugin": "2.8.1", + "jsdom": "24.0.0", + "mini-css-extract-plugin": "2.9.0", "postcss": "8.4.38", - "postcss-loader": "7.3.4", - "postcss-preset-env": "9.5.2", + "postcss-loader": "8.1.1", + "postcss-preset-env": "9.5.12", "postcss-scss": "4.0.9", - "sass": "1.72.0", - "sass-loader": "13.3.3", - "source-map-loader": "4.0.2", + "sass": "1.77.1", + "sass-loader": "14.2.1", + "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", - "style-loader": "3.3.4", + "style-loader": "4.0.0", "stylelint": "15.11.0", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "1.3.0", "stylelint-order": "6.0.4", "stylelint-scss": "5.3.2", "ts-loader": "9.5.1", - "typescript": "5.4.3", - "vitest": "1.4.0", + "typescript": "5.4.5", + "vitest": "1.6.0", "webpack": "5.91.0", - "webpack-bundle-analyzer": "4.10.1", + "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", - "webpack-dev-server": "4.15.2", + "webpack-dev-server": "5.0.4", "webpack-merge": "5.10.0", "worker-loader": "3.0.8" }, "dependencies": { "@emotion/react": "11.11.4", - "@emotion/styled": "11.11.0", - "@fontsource/noto-sans": "5.0.21", - "@fontsource/noto-sans-hk": "5.0.18", - "@fontsource/noto-sans-jp": "5.0.18", - "@fontsource/noto-sans-kr": "5.0.18", - "@fontsource/noto-sans-sc": "5.0.18", - "@fontsource/noto-sans-tc": "5.0.18", + "@emotion/styled": "11.11.5", + "@fontsource/noto-sans": "5.0.22", + "@fontsource/noto-sans-hk": "5.0.19", + "@fontsource/noto-sans-jp": "5.0.19", + "@fontsource/noto-sans-kr": "5.0.19", + "@fontsource/noto-sans-sc": "5.0.19", + "@fontsource/noto-sans-tc": "5.0.19", "@jellyfin/libass-wasm": "4.2.1", - "@jellyfin/sdk": "0.0.0-unstable.202404101900", - "@loadable/component": "5.16.3", - "@mui/icons-material": "5.15.11", - "@mui/material": "5.15.11", - "@mui/x-data-grid": "6.19.5", + "@jellyfin/sdk": "0.0.0-unstable.202405190501", + "@loadable/component": "5.16.4", + "@mui/icons-material": "5.15.17", + "@mui/material": "5.15.17", + "@mui/x-data-grid": "6.19.11", "@react-hook/resize-observer": "1.2.6", "@tanstack/react-query": "4.36.1", "@tanstack/react-query-devtools": "4.36.1", - "@types/react-lazy-load-image-component": "1.6.3", + "@types/react-lazy-load-image-component": "1.6.4", "abortcontroller-polyfill": "1.7.5", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", "classnames": "2.5.1", - "core-js": "3.36.1", + "core-js": "3.37.0", "date-fns": "2.30.0", "dompurify": "3.0.1", "epubjs": "0.3.93", @@ -101,7 +101,7 @@ "flv.js": "1.6.2", "headroom.js": "0.12.0", "history": "5.3.0", - "hls.js": "1.5.7", + "hls.js": "1.5.8", "intersection-observer": "0.12.2", "jellyfin-apiclient": "1.11.0", "jquery": "3.7.1", @@ -116,12 +116,12 @@ "react-blurhash": "0.3.0", "react-dom": "17.0.2", "react-lazy-load-image-component": "1.6.0", - "react-router-dom": "6.22.3", + "react-router-dom": "6.23.1", "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.2", - "swiper": "11.0.7", - "usehooks-ts": "2.16.0", + "swiper": "11.1.1", + "usehooks-ts": "3.1.0", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" }, diff --git a/src/apps/dashboard/AppLayout.tsx b/src/apps/dashboard/AppLayout.tsx index ca3827f966..ff47e53cc6 100644 --- a/src/apps/dashboard/AppLayout.tsx +++ b/src/apps/dashboard/AppLayout.tsx @@ -11,6 +11,7 @@ import ElevationScroll from 'components/ElevationScroll'; import { DRAWER_WIDTH } from 'components/ResponsiveDrawer'; import { useApi } from 'hooks/useApi'; +import AppTabs from './components/AppTabs'; import AppDrawer from './components/drawer/AppDrawer'; import './AppOverrides.scss'; @@ -55,7 +56,9 @@ const AppLayout: FC = ({ isDrawerAvailable={!isMediumScreen && isDrawerAvailable} isDrawerOpen={isDrawerOpen} onDrawerButtonClick={onToggleDrawer} - /> + > + + diff --git a/src/apps/dashboard/AppOverrides.scss b/src/apps/dashboard/AppOverrides.scss index c8597ee576..43b25b1495 100644 --- a/src/apps/dashboard/AppOverrides.scss +++ b/src/apps/dashboard/AppOverrides.scss @@ -16,7 +16,15 @@ $mui-bp-xl: 1536px; } // Fix the padding of dashboard pages - .content-primary.content-primary { - padding-top: 3.25rem !important; + .content-primary { + padding-top: 3.25rem; + } + // Tabbed pages + .withTabs .content-primary { + padding-top: 6.5rem; + + @media all and (min-width: $mui-bp-lg) { + padding-top: 3.25rem; + } } } diff --git a/src/apps/dashboard/components/AppTabs.tsx b/src/apps/dashboard/components/AppTabs.tsx new file mode 100644 index 0000000000..f56d4df4a4 --- /dev/null +++ b/src/apps/dashboard/components/AppTabs.tsx @@ -0,0 +1,96 @@ +import { Theme } from '@mui/material/styles'; +import Tab from '@mui/material/Tab'; +import Tabs from '@mui/material/Tabs'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import debounce from 'lodash-es/debounce'; +import isEqual from 'lodash-es/isEqual'; +import React, { FC, useCallback, useEffect, useRef, useState } from 'react'; +import { Link } from 'react-router-dom'; + +import { EventType } from 'types/eventType'; +import Events, { type Event } from 'utils/events'; + +interface AppTabsParams { + isDrawerOpen: boolean +} + +interface TabDefinition { + href: string + name: string +} + +const handleResize = debounce(() => window.dispatchEvent(new Event('resize')), 100); + +const AppTabs: FC = ({ + isDrawerOpen +}) => { + const documentRef = useRef(document); + const [ activeIndex, setActiveIndex ] = useState(0); + const [ tabs, setTabs ] = useState(); + + const isBigScreen = useMediaQuery((theme: Theme) => theme.breakpoints.up('sm')); + + const onTabsUpdate = useCallback(( + _e: Event, + _newView?: string, + newIndex: number | undefined = 0, + newTabs?: TabDefinition[] + ) => { + setActiveIndex(newIndex); + + if (!isEqual(tabs, newTabs)) { + setTabs(newTabs); + } + }, [ tabs ]); + + useEffect(() => { + const doc = documentRef.current; + + if (doc) Events.on(doc, EventType.SET_TABS, onTabsUpdate); + + return () => { + if (doc) Events.off(doc, EventType.SET_TABS, onTabsUpdate); + }; + }, [ onTabsUpdate ]); + + // HACK: Force resizing to workaround upstream bug with tab resizing + // https://github.com/mui/material-ui/issues/24011 + useEffect(() => { + handleResize(); + }, [ isDrawerOpen ]); + + if (!tabs?.length) return null; + + return ( + + { + tabs.map(({ href, name }, index) => ( + + )) + } + + ); +}; + +export default AppTabs; diff --git a/src/apps/experimental/AppOverrides.scss b/src/apps/experimental/AppOverrides.scss index 0ed30eeb61..a5f8312e8c 100644 --- a/src/apps/experimental/AppOverrides.scss +++ b/src/apps/experimental/AppOverrides.scss @@ -10,11 +10,6 @@ $mui-bp-xl: 1536px; position: relative; } -// Ensure the footer renders over the drawer -.appfooter { - z-index: 1201 !important; // mui drawer uses z-index 1200 -} - // Hide some items from the user "settings" page that are in the drawer #myPreferencesMenuPage { .lnkQuickConnectPreferences, diff --git a/src/apps/experimental/components/AppToolbar/index.tsx b/src/apps/experimental/components/AppToolbar/index.tsx index 950fb63841..e8626fd397 100644 --- a/src/apps/experimental/components/AppToolbar/index.tsx +++ b/src/apps/experimental/components/AppToolbar/index.tsx @@ -18,17 +18,30 @@ interface AppToolbarProps { onDrawerButtonClick: (event: React.MouseEvent) => void } +const PUBLIC_PATHS = [ + '/addserver.html', + '/selectserver.html', + '/login.html', + '/forgotpassword.html', + '/forgotpasswordpin.html' +]; + const ExperimentalAppToolbar: FC = ({ isDrawerAvailable, isDrawerOpen, onDrawerButtonClick }) => { const location = useLocation(); + + // The video osd does not show the standard toolbar + if (location.pathname === '/video') return null; + const isTabsAvailable = isTabPath(location.pathname); + const isPublicPath = PUBLIC_PATHS.includes(location.pathname); return ( @@ -45,10 +58,11 @@ const ExperimentalAppToolbar: FC = ({ - } + )} isDrawerAvailable={isDrawerAvailable} isDrawerOpen={isDrawerOpen} onDrawerButtonClick={onDrawerButtonClick} + isUserMenuAvailable={!isPublicPath} > {isTabsAvailable && ()} diff --git a/src/apps/experimental/components/library/ItemsView.tsx b/src/apps/experimental/components/library/ItemsView.tsx index 93be9d1348..de9d0c6d6f 100644 --- a/src/apps/experimental/components/library/ItemsView.tsx +++ b/src/apps/experimental/components/library/ItemsView.tsx @@ -6,7 +6,7 @@ import React, { type FC, useCallback } from 'react'; import Box from '@mui/material/Box'; import classNames from 'classnames'; import { useLocalStorage } from 'hooks/useLocalStorage'; -import { useGetItem, useGetItemsViewByType } from 'hooks/useFetchItems'; +import { useGetItemsViewByType } from 'hooks/useFetchItems'; import { getDefaultLibraryViewSettings, getSettingsKey } from 'utils/items'; import { CardShape } from 'utils/card'; import Loading from 'components/loading/LoadingComponent'; @@ -28,6 +28,7 @@ import { LibraryTab } from 'types/libraryTab'; import { type LibraryViewSettings, type ParentId, ViewMode } from 'types/library'; import type { CardOptions } from 'types/cardOptions'; import type { ListOptions } from 'types/listOptions'; +import { useItem } from 'hooks/useItem'; interface ItemsViewProps { viewType: LibraryTab; @@ -79,7 +80,7 @@ const ItemsView: FC = ({ itemType, libraryViewSettings ); - const { data: item } = useGetItem(parentId); + const { data: item } = useItem(parentId || undefined); const getListOptions = useCallback(() => { const listOptions: ListOptions = { diff --git a/src/apps/experimental/routes/legacyRoutes/user.ts b/src/apps/experimental/routes/legacyRoutes/user.ts index 12e137bc96..2045495a10 100644 --- a/src/apps/experimental/routes/legacyRoutes/user.ts +++ b/src/apps/experimental/routes/legacyRoutes/user.ts @@ -49,16 +49,6 @@ export const LEGACY_USER_ROUTES: LegacyRoute[] = [ controller: 'user/subtitles/index', view: 'user/subtitles/index.html' } - }, { - path: 'video', - pageProps: { - controller: 'playback/video/index', - view: 'playback/video/index.html', - type: 'video-osd', - isFullscreen: true, - isNowPlayingBarEnabled: false, - isThemeMediaSupported: true - } }, { path: 'queue', pageProps: { diff --git a/src/apps/experimental/routes/routes.tsx b/src/apps/experimental/routes/routes.tsx index 718aaf10b6..47e0a9f7f5 100644 --- a/src/apps/experimental/routes/routes.tsx +++ b/src/apps/experimental/routes/routes.tsx @@ -7,8 +7,10 @@ import { toAsyncPageRoute } from 'components/router/AsyncRoute'; import { toViewManagerPageRoute } from 'components/router/LegacyRoute'; import { toRedirectRoute } from 'components/router/Redirect'; import AppLayout from '../AppLayout'; + import { ASYNC_USER_ROUTES } from './asyncRoutes'; import { LEGACY_PUBLIC_ROUTES, LEGACY_USER_ROUTES } from './legacyRoutes'; +import VideoPage from './video'; export const EXPERIMENTAL_APP_ROUTES: RouteObject[] = [ { @@ -20,7 +22,13 @@ export const EXPERIMENTAL_APP_ROUTES: RouteObject[] = [ element: , children: [ ...ASYNC_USER_ROUTES.map(toAsyncPageRoute), - ...LEGACY_USER_ROUTES.map(toViewManagerPageRoute) + ...LEGACY_USER_ROUTES.map(toViewManagerPageRoute), + + // The video page is special since it combines new controls with the legacy view + { + path: 'video', + element: + } ] }, diff --git a/src/apps/experimental/routes/user/display/index.tsx b/src/apps/experimental/routes/user/display/index.tsx index f30b48f5bc..61b55bc02c 100644 --- a/src/apps/experimental/routes/user/display/index.tsx +++ b/src/apps/experimental/routes/user/display/index.tsx @@ -5,7 +5,6 @@ import React, { useCallback } from 'react'; import Page from 'components/Page'; import globalize from 'scripts/globalize'; -import theme from 'themes/theme'; import { DisplayPreferences } from './DisplayPreferences'; import { ItemDetailPreferences } from './ItemDetailPreferences'; import { LibraryPreferences } from './LibraryPreferences'; @@ -80,11 +79,7 @@ export default function UserDisplayPreferences() { diff --git a/src/apps/experimental/routes/video/index.tsx b/src/apps/experimental/routes/video/index.tsx new file mode 100644 index 0000000000..f9322352d5 --- /dev/null +++ b/src/apps/experimental/routes/video/index.tsx @@ -0,0 +1,72 @@ +import Box from '@mui/material/Box/Box'; +import Fade from '@mui/material/Fade/Fade'; +import React, { useRef, type FC, useEffect, useState } from 'react'; + +import RemotePlayButton from 'apps/experimental/components/AppToolbar/RemotePlayButton'; +import SyncPlayButton from 'apps/experimental/components/AppToolbar/SyncPlayButton'; +import AppToolbar from 'components/toolbar/AppToolbar'; +import ViewManagerPage from 'components/viewManager/ViewManagerPage'; +import { EventType } from 'types/eventType'; +import Events, { type Event } from 'utils/events'; + +/** + * Video player page component that renders mui controls for the top controls and the legacy view for everything else. + */ +const VideoPage: FC = () => { + const documentRef = useRef(document); + const [ isVisible, setIsVisible ] = useState(true); + + const onShowVideoOsd = (_e: Event, isShowing: boolean) => { + setIsVisible(isShowing); + }; + + useEffect(() => { + const doc = documentRef.current; + + if (doc) Events.on(doc, EventType.SHOW_VIDEO_OSD, onShowVideoOsd); + + return () => { + if (doc) Events.off(doc, EventType.SHOW_VIDEO_OSD, onShowVideoOsd); + }; + }, []); + + return ( + <> + + + + + + + } + /> + + + + + + ); +}; + +export default VideoPage; diff --git a/src/components/ServerConnections.js b/src/components/ServerConnections.js index 70dcc931d0..e67f0e0b5c 100644 --- a/src/components/ServerConnections.js +++ b/src/components/ServerConnections.js @@ -1,3 +1,4 @@ +import { MINIMUM_VERSION } from '@jellyfin/sdk/lib/versions'; import { ConnectionManager, Credentials, ApiClient } from 'jellyfin-apiclient'; import { appHost } from './apphost'; @@ -33,8 +34,13 @@ class ServerConnections extends ConnectionManager { super(...arguments); this.localApiClient = null; + // Set the apiclient minimum version to match the SDK + this._minServerVersion = MINIMUM_VERSION; + Events.on(this, 'localusersignedout', (_e, logoutInfo) => { setUserInfo(null, null); + // Ensure the updated credentials are persisted to storage + credentialProvider.credentials(credentialProvider.credentials()); if (window.NativeShell && typeof window.NativeShell.onLocalUserSignedOut === 'function') { window.NativeShell.onLocalUserSignedOut(logoutInfo); @@ -128,12 +134,12 @@ class ServerConnections extends ConnectionManager { } } -const credentials = new Credentials(); +const credentialProvider = new Credentials(); const capabilities = Dashboard.capabilities(appHost); export default new ServerConnections( - credentials, + credentialProvider, appHost.appName(), appHost.appVersion(), appHost.deviceName(), diff --git a/src/components/appFooter/appFooter.scss b/src/components/appFooter/appFooter.scss index 1048a8e214..020a257369 100644 --- a/src/components/appFooter/appFooter.scss +++ b/src/components/appFooter/appFooter.scss @@ -2,7 +2,7 @@ position: fixed; left: 0; right: 0; - z-index: 10; + z-index: 1201 !important; // mui drawer uses z-index 1200 bottom: 0; transition: transform 180ms linear; contain: layout style; diff --git a/src/components/apphost.js b/src/components/apphost.js index 742476195d..40c616ca38 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -70,6 +70,21 @@ function getDeviceProfile(item) { }); } + const preferredTranscodeVideoAudioCodec = appSettings.preferredTranscodeVideoAudioCodec(); + if (preferredTranscodeVideoAudioCodec) { + profile.TranscodingProfiles.forEach((transcodingProfile) => { + if (transcodingProfile.Type === 'Video') { + const audioCodecs = transcodingProfile.AudioCodec.split(','); + const index = audioCodecs.indexOf(preferredTranscodeVideoAudioCodec); + if (index !== -1) { + audioCodecs.splice(index, 1); + audioCodecs.unshift(preferredTranscodeVideoAudioCodec); + transcodingProfile.AudioCodec = audioCodecs.join(','); + } + } + }); + } + resolve(profile); }); } diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index acbe05c270..6d0c73afe0 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -4,6 +4,7 @@ * @module components/cardBuilder/cardBuilder */ +import { PersonKind } from '@jellyfin/sdk/lib/generated-client/models/person-kind'; import escapeHtml from 'escape-html'; import browser from 'scripts/browser'; @@ -698,8 +699,26 @@ function getCardFooterText(item, apiClient, options, footerClass, progressHtml, } } - if (options.showPersonRoleOrType && item.Role) { - lines.push(globalize.translate('PersonRole', escapeHtml(item.Role))); + if (options.showPersonRoleOrType && item.Type) { + if (item.Role) { + if ([ PersonKind.Actor, PersonKind.GuestStar ].includes(item.Type)) { + // List actor roles formatted like "as Character Name" + lines.push(globalize.translate('PersonRole', escapeHtml(item.Role))); + } else if (item.Role.toLowerCase() === item.Type.toLowerCase()) { + // Role and Type are the same so use the localized Type + lines.push(escapeHtml(globalize.translate(item.Type))); + } else if (item.Role.toLowerCase().includes(item.Type.toLowerCase())) { + // Avoid duplication if the Role includes the Type (i.e. Executive Producer) + lines.push(escapeHtml(item.Role)); + } else { + // Type and Role are unique so list both (i.e. Writer | Novel) + lines.push(escapeHtml(globalize.translate(item.Type))); + lines.push(escapeHtml(item.Role)); + } + } else { + // No Role so use the localized Type + lines.push(escapeHtml(globalize.translate(item.Type))); + } } } @@ -1285,8 +1304,7 @@ function updateUserData(card, userData) { if (!playedIndicator) { playedIndicator = document.createElement('div'); - playedIndicator.classList.add('playedIndicator'); - playedIndicator.classList.add('indicator'); + playedIndicator.classList.add('playedIndicator', 'indicator'); indicatorsElem = ensureIndicators(card, indicatorsElem); indicatorsElem.appendChild(playedIndicator); } @@ -1302,7 +1320,7 @@ function updateUserData(card, userData) { if (!countIndicator) { countIndicator = document.createElement('div'); - countIndicator.classList.add('countIndicator'); + countIndicator.classList.add('countIndicator', 'indicator'); indicatorsElem = ensureIndicators(card, indicatorsElem); indicatorsElem.appendChild(countIndicator); } diff --git a/src/components/dashboard/users/UserPasswordForm.tsx b/src/components/dashboard/users/UserPasswordForm.tsx index 3f0d70967d..9b7cac235e 100644 --- a/src/components/dashboard/users/UserPasswordForm.tsx +++ b/src/components/dashboard/users/UserPasswordForm.tsx @@ -165,7 +165,7 @@ const UserPasswordForm: FunctionComponent = ({ userId }: IProps) => { { - if (!item.Id || userExcludeItems.indexOf(item.Id) !== -1) { + if (!item.Id || userExcludeItems.includes(item.Id)) { return; } - if (!item.CollectionType || excludeViewTypes.indexOf(item.CollectionType) !== -1) { + if (item.CollectionType && excludeViewTypes.includes(item.CollectionType)) { return; } diff --git a/src/components/indicators/indicators.js b/src/components/indicators/indicators.js index ec21ae3e7f..8a6d53f012 100644 --- a/src/components/indicators/indicators.js +++ b/src/components/indicators/indicators.js @@ -78,7 +78,7 @@ export function getPlayedIndicatorHtml(item) { if (enablePlayedIndicator(item)) { const userData = item.UserData || {}; if (userData.UnplayedItemCount) { - return '
' + datetime.toLocaleString(userData.UnplayedItemCount) + '
'; + return '
' + formatCountIndicator(userData.UnplayedItemCount) + '
'; } if (userData.PlayedPercentage && userData.PlayedPercentage >= 100 || (userData.Played)) { @@ -93,12 +93,16 @@ export function getChildCountIndicatorHtml(item, options) { const minCount = options?.minCount ? options.minCount : 0; if (item.ChildCount && item.ChildCount > minCount) { - return '
' + datetime.toLocaleString(item.ChildCount) + '
'; + return '
' + formatCountIndicator(item.ChildCount) + '
'; } return ''; } +function formatCountIndicator(count) { + return count >= 100 ? '99+' : count.toString(); +} + export function getTimerIndicator(item) { let status; diff --git a/src/components/indicators/useIndicator.tsx b/src/components/indicators/useIndicator.tsx index a9ecc12bc8..7f16606359 100644 --- a/src/components/indicators/useIndicator.tsx +++ b/src/components/indicators/useIndicator.tsx @@ -60,6 +60,10 @@ const enablePlayedIndicator = (item: ItemDto) => { return itemHelper.canMarkPlayed(item); }; +const formatCountIndicator = (count: number) => { + return count >= 100 ? '99+' : count.toString(); +}; + const useIndicator = (item: ItemDto) => { const getMediaSourceIndicator = () => { const mediaSourceCount = item.MediaSourceCount ?? 0; @@ -135,7 +139,7 @@ const useIndicator = (item: ItemDto) => { if (childCount > 1) { return ( - {datetime.toLocaleString(item.ChildCount)} + {formatCountIndicator(childCount)} ); } @@ -149,7 +153,7 @@ const useIndicator = (item: ItemDto) => { if (userData.UnplayedItemCount) { return ( - {datetime.toLocaleString(userData.UnplayedItemCount)} + {formatCountIndicator(userData.UnplayedItemCount)} ); } diff --git a/src/components/itemContextMenu.js b/src/components/itemContextMenu.js index fd7d82b42e..263a557164 100644 --- a/src/components/itemContextMenu.js +++ b/src/components/itemContextMenu.js @@ -280,11 +280,11 @@ export function getCommands(options) { }); } - if (item.PlaylistItemId && options.playlistId) { + if (item.PlaylistItemId && options.playlistId && options.canEditPlaylist) { commands.push({ name: globalize.translate('RemoveFromPlaylist'), id: 'removefromplaylist', - icon: 'remove' + icon: 'playlist_remove' }); } @@ -292,7 +292,7 @@ export function getCommands(options) { commands.push({ name: globalize.translate('RemoveFromCollection'), id: 'removefromcollection', - icon: 'remove' + icon: 'playlist_remove' }); } @@ -696,6 +696,6 @@ export function show(options) { } export default { - getCommands: getCommands, - show: show + getCommands, + show }; diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.js b/src/components/libraryoptionseditor/libraryoptionseditor.js index c52e62f30f..91ae5945c9 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.js +++ b/src/components/libraryoptionseditor/libraryoptionseditor.js @@ -432,6 +432,12 @@ export function setContentType(parent, contentType) { parent.querySelector('.fldAllowEmbeddedSubtitlesContainer').classList.add('hide'); } + if (contentType === 'music') { + parent.querySelector('.lyricSettingsSection').classList.remove('hide'); + } else { + parent.querySelector('.lyricSettingsSection').classList.add('hide'); + } + parent.querySelector('.chkAutomaticallyAddToCollectionContainer').classList.toggle('hide', contentType !== 'movies' && contentType !== 'mixed'); return populateMetadataSettings(parent, contentType); @@ -536,6 +542,7 @@ export function getLibraryOptions(parent) { SkipSubtitlesIfEmbeddedSubtitlesPresent: parent.querySelector('#chkSkipIfGraphicalSubsPresent').checked, SkipSubtitlesIfAudioTrackMatches: parent.querySelector('#chkSkipIfAudioTrackPresent').checked, SaveSubtitlesWithMedia: parent.querySelector('#chkSaveSubtitlesLocally').checked, + SaveLyricsWithMedia: parent.querySelector('#chkSaveLyricsLocally').checked, RequirePerfectSubtitleMatch: parent.querySelector('#chkRequirePerfectMatch').checked, AutomaticallyAddToCollection: parent.querySelector('#chkAutomaticallyAddToCollection').checked, MetadataSavers: Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll('.chkMetadataSaver'), elem => { @@ -596,6 +603,7 @@ export function setLibraryOptions(parent, options) { parent.querySelector('#selectAllowEmbeddedSubtitles').value = options.AllowEmbeddedSubtitles; parent.querySelector('#chkSkipIfGraphicalSubsPresent').checked = options.SkipSubtitlesIfEmbeddedSubtitlesPresent; parent.querySelector('#chkSaveSubtitlesLocally').checked = options.SaveSubtitlesWithMedia; + parent.querySelector('#chkSaveLyricsLocally').checked = options.SaveLyricsWithMedia; parent.querySelector('#chkSkipIfAudioTrackPresent').checked = options.SkipSubtitlesIfAudioTrackMatches; parent.querySelector('#chkRequirePerfectMatch').checked = options.RequirePerfectSubtitleMatch; parent.querySelector('#chkAutomaticallyAddToCollection').checked = options.AutomaticallyAddToCollection; diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.template.html b/src/components/libraryoptionseditor/libraryoptionseditor.template.html index 18c288cc6b..b1d358cc02 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.template.html +++ b/src/components/libraryoptionseditor/libraryoptionseditor.template.html @@ -193,3 +193,15 @@
${SaveSubtitlesIntoMediaFoldersHelp}
+ +
+

${Lyrics}

+ +
+ +
${SaveLyricsIntoMediaFoldersHelp}
+
+
diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index d5e11b8468..df1a61c6a5 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -591,8 +591,7 @@ function setFieldVisibilities(context, item) { || item.Type === 'Genre' || item.Type === 'Studio' || item.Type === 'MusicGenre' - || item.Type === 'TvChannel' - || item.Type === 'Book') { + || item.Type === 'TvChannel') { hideElement('#peopleCollapsible', context); } else { showElement('#peopleCollapsible', context); diff --git a/src/components/metadataEditor/personEditor.template.html b/src/components/metadataEditor/personEditor.template.html index fd8982b9fe..b541a5c246 100644 --- a/src/components/metadataEditor/personEditor.template.html +++ b/src/components/metadataEditor/personEditor.template.html @@ -26,6 +26,18 @@ + + + + + + + + + + + + diff --git a/src/components/nowPlayingBar/nowPlayingBar.js b/src/components/nowPlayingBar/nowPlayingBar.js index 4d7d77a45e..b73ce0d888 100644 --- a/src/components/nowPlayingBar/nowPlayingBar.js +++ b/src/components/nowPlayingBar/nowPlayingBar.js @@ -43,8 +43,7 @@ let currentRuntimeTicks = 0; let isVisibilityAllowed = true; -let lyricPageActive = false; -let isAudio = false; +let isLyricPageActive = false; function getNowPlayingBarHtml() { let html = ''; @@ -86,7 +85,7 @@ function getNowPlayingBarHtml() { html += ``; - html += ``; + html += ``; html += ``; html += ``; @@ -220,7 +219,7 @@ function bindEvents(elem) { }); lyricButton.addEventListener('click', function() { - if (lyricPageActive) { + if (isLyricPageActive) { appRouter.back(); } else { appRouter.show('lyrics'); @@ -303,8 +302,8 @@ function getNowPlayingBar() { nowPlayingBarElement = parentContainer.querySelector('.nowPlayingBar'); if (layoutManager.mobile) { - hideButton(nowPlayingBarElement.querySelector('.btnShuffleQueue')); - hideButton(nowPlayingBarElement.querySelector('.nowPlayingBarCenter')); + nowPlayingBarElement.querySelector('.btnShuffleQueue').classList.add('hide'); + nowPlayingBarElement.querySelector('.nowPlayingBarCenter').classList.add('hide'); } if (browser.safari && browser.slow) { @@ -319,14 +318,6 @@ function getNowPlayingBar() { return nowPlayingBarElement; } -function showButton(button) { - button.classList.remove('hide'); -} - -function hideButton(button) { - button.classList.add('hide'); -} - function updatePlayPauseState(isPaused) { if (playPauseButtons) { playPauseButtons.forEach((button) => { @@ -378,7 +369,7 @@ function updatePlayerStateInternal(event, state, player) { updateTimeDisplay(playState.PositionTicks, nowPlayingItem.RunTimeTicks, playbackManager.getBufferedRanges(player)); updateNowPlayingInfo(state); - updateLyricButton(); + updateLyricButton(nowPlayingItem); } function updateRepeatModeDisplay(repeatMode) { @@ -453,11 +444,7 @@ function updatePlayerVolumeState(isMuted, volumeLevel) { showVolumeSlider = false; } - if (showMuteButton) { - showButton(muteButton); - } else { - hideButton(muteButton); - } + muteButton.classList.toggle('hide', !showMuteButton); // See bindEvents for why this is necessary if (volumeSlider) { @@ -469,20 +456,18 @@ function updatePlayerVolumeState(isMuted, volumeLevel) { } } -function updateLyricButton() { - if (!isEnabled) { - return; - } +function updateLyricButton(item) { + if (!isEnabled) return; - isAudio ? showButton(lyricButton) : hideButton(lyricButton); + const hasLyrics = !!item && item.Type === 'Audio' && item.HasLyrics; + lyricButton.classList.toggle('hide', !hasLyrics); setLyricButtonActiveStatus(); } function setLyricButtonActiveStatus() { - if (!isEnabled) { - return; - } - lyricButton.classList.toggle('buttonActive', lyricPageActive); + if (!isEnabled) return; + + lyricButton.classList.toggle('buttonActive', isLyricPageActive); } function seriesImageUrl(item, options) { @@ -628,8 +613,6 @@ function onPlaybackStart(e, state) { console.debug('nowplaying event: ' + e.type); const player = this; - isAudio = state.NowPlayingItem.Type === 'Audio'; - onStateChanged.call(player, e, state); } @@ -733,7 +716,7 @@ function onStateChanged(event, state) { } getNowPlayingBar(); - updateLyricButton(); + updateLyricButton(state.NowPlayingItem); updatePlayerStateInternal(event, state, player); } @@ -790,7 +773,7 @@ function refreshFromPlayer(player, type) { } function bindToPlayer(player) { - lyricPageActive = appRouter.currentRouteInfo.path.toLowerCase() === '/lyrics'; + isLyricPageActive = appRouter.currentRouteInfo.path.toLowerCase() === '/lyrics'; if (player === currentPlayer) { return; } @@ -823,7 +806,7 @@ Events.on(playbackManager, 'playerchange', function () { bindToPlayer(playbackManager.getCurrentPlayer()); document.addEventListener('viewbeforeshow', function (e) { - lyricPageActive = appRouter.currentRouteInfo.path.toLowerCase() === '/lyrics'; + isLyricPageActive = appRouter.currentRouteInfo.path.toLowerCase() === '/lyrics'; setLyricButtonActiveStatus(); if (!e.detail.options.enableMediaControl) { if (isVisibilityAllowed) { diff --git a/src/components/playback/displayMirrorManager.ts b/src/components/playback/displayMirrorManager.ts index f74b3e10fb..a8a7b1b7a1 100644 --- a/src/components/playback/displayMirrorManager.ts +++ b/src/components/playback/displayMirrorManager.ts @@ -1,38 +1,40 @@ -import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client'; +import ServerConnections from 'components/ServerConnections'; +import { getItemQuery } from 'hooks/useItem'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; +import { queryClient } from 'utils/query/queryClient'; import { playbackManager } from './playbackmanager'; -interface PlaybackInfo { - item: BaseItemDto; - context?: string; -} - -function mirrorItem(info: PlaybackInfo, player?: unknown) { - const { item } = info; - - playbackManager.displayContent({ - ItemName: item.Name, - ItemId: item.Id, - ItemType: item.Type, - Context: info.context - }, player); -} - -function mirrorIfEnabled(info: PlaybackInfo) { - if (info && playbackManager.enableDisplayMirroring()) { +async function mirrorIfEnabled(serverId: string, itemId: string) { + if (playbackManager.enableDisplayMirroring()) { const playerInfo = playbackManager.getPlayerInfo(); if (playerInfo && !playerInfo.isLocalPlayer && playerInfo.supportedCommands.indexOf('DisplayContent') !== -1) { - mirrorItem(info, playbackManager.getCurrentPlayer()); + const apiClient = ServerConnections.getApiClient(serverId); + const api = toApi(apiClient); + const userId = apiClient.getCurrentUserId(); + + try { + const item = await queryClient.fetchQuery(getItemQuery( + api, + userId, + itemId)); + + playbackManager.displayContent({ + ItemName: item.Name, + ItemId: item.Id, + ItemType: item.Type + }, playbackManager.getCurrentPlayer()); + } catch (err) { + console.error('[DisplayMirrorManager] failed to mirror item', err); + } } } } document.addEventListener('viewshow', e => { - const state = e.detail.state || {}; - const { item } = state; - - if (item?.ServerId) { - mirrorIfEnabled({ item }); + const { serverId, id } = e.detail?.params || {}; + if (serverId && id) { + void mirrorIfEnabled(serverId, id); } }); diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index bb295422eb..14b23ad940 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -18,6 +18,7 @@ import { PluginType } from '../../types/plugin.ts'; import { includesAny } from '../../utils/container.ts'; import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts'; import { getItemBackdropImageUrl } from '../../utils/jellyfin-apiclient/backdropImage'; +import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; @@ -1789,42 +1790,85 @@ class PlaybackManager { }); } - function translateItemsForPlayback(items, options) { - if (!items.length) return Promise.resolve([]); + async function translateItemsForPlayback(items, options) { + if (!items.length) return []; - if (items.length > 1 && options && options.ids) { + sortItemsIfNeeded(items, options); + + const firstItem = items[0]; + const serverId = firstItem.ServerId; + const queryOptions = options.queryOptions || {}; + + const promise = getPlaybackPromise(firstItem, serverId, options, queryOptions, items); + + if (promise) { + const result = await promise; + return result ? result.Items : items; + } else { + return items; + } + } + + function sortItemsIfNeeded(items, options) { + if (items.length > 1 && options?.ids) { // Use the original request id array for sorting the result in the proper order items.sort(function (a, b) { return options.ids.indexOf(a.Id) - options.ids.indexOf(b.Id); }); } + } - const firstItem = items[0]; - let promise; + function getPlaybackPromise(firstItem, serverId, options, queryOptions, items) { + switch (firstItem.Type) { + case 'Program': + return getItemsForPlayback(serverId, { + Ids: firstItem.ChannelId + }); + case 'Playlist': + return getItemsForPlayback(serverId, { + ParentId: firstItem.Id, + SortBy: options.shuffle ? 'Random' : null + }); + case 'MusicArtist': + return getItemsForPlayback(serverId, mergePlaybackQueries({ + ArtistIds: firstItem.Id, + Filters: 'IsNotFolder', + Recursive: true, + SortBy: options.shuffle ? 'Random' : 'SortName', + MediaTypes: 'Audio' + }, queryOptions)); + case 'PhotoAlbum': + return getItemsForPlayback(serverId, mergePlaybackQueries({ + ParentId: firstItem.Id, + Filters: 'IsNotFolder', + // Setting this to true may cause some incorrect sorting + Recursive: false, + SortBy: options.shuffle ? 'Random' : 'SortName', + // Only include Photos because we do not handle mixed queues currently + MediaTypes: 'Photo', + Limit: UNLIMITED_ITEMS + }, queryOptions)); + case 'MusicGenre': + return getItemsForPlayback(serverId, mergePlaybackQueries({ + GenreIds: firstItem.Id, + Filters: 'IsNotFolder', + Recursive: true, + SortBy: options.shuffle ? 'Random' : 'SortName', + MediaTypes: 'Audio' + }, queryOptions)); + case 'Series': + case 'Season': + return getSeriesOrSeasonPlaybackPromise(firstItem, options, items); + case 'Episode': + return getEpisodePlaybackPromise(firstItem, options, items); + } - const serverId = firstItem.ServerId; + return getNonItemTypePromise(firstItem, serverId, options, queryOptions); + } - const queryOptions = options.queryOptions || {}; - - if (firstItem.Type === 'Program') { - promise = getItemsForPlayback(serverId, { - Ids: firstItem.ChannelId - }); - } else if (firstItem.Type === 'Playlist') { - promise = getItemsForPlayback(serverId, { - ParentId: firstItem.Id, - SortBy: options.shuffle ? 'Random' : null - }); - } else if (firstItem.Type === 'MusicArtist') { - promise = getItemsForPlayback(serverId, mergePlaybackQueries({ - ArtistIds: firstItem.Id, - Filters: 'IsNotFolder', - Recursive: true, - SortBy: options.shuffle ? 'Random' : 'SortName', - MediaTypes: 'Audio' - }, queryOptions)); - } else if (firstItem.MediaType === 'Photo') { - promise = getItemsForPlayback(serverId, mergePlaybackQueries({ + function getNonItemTypePromise(firstItem, serverId, options, queryOptions) { + if (firstItem.MediaType === 'Photo') { + return getItemsForPlayback(serverId, mergePlaybackQueries({ ParentId: firstItem.ParentId, Filters: 'IsNotFolder', // Setting this to true may cause some incorrect sorting @@ -1847,66 +1891,8 @@ class PlaybackManager { return Promise.resolve(result); }); - } else if (firstItem.Type === 'PhotoAlbum') { - promise = getItemsForPlayback(serverId, mergePlaybackQueries({ - ParentId: firstItem.Id, - Filters: 'IsNotFolder', - // Setting this to true may cause some incorrect sorting - Recursive: false, - SortBy: options.shuffle ? 'Random' : 'SortName', - // Only include Photos because we do not handle mixed queues currently - MediaTypes: 'Photo', - Limit: UNLIMITED_ITEMS - }, queryOptions)); - } else if (firstItem.Type === 'MusicGenre') { - promise = getItemsForPlayback(serverId, mergePlaybackQueries({ - GenreIds: firstItem.Id, - Filters: 'IsNotFolder', - Recursive: true, - SortBy: options.shuffle ? 'Random' : 'SortName', - MediaTypes: 'Audio' - }, queryOptions)); - } else if (firstItem.Type === 'Series' || firstItem.Type === 'Season') { - const apiClient = ServerConnections.getApiClient(firstItem.ServerId); - const isSeason = firstItem.Type === 'Season'; - - promise = apiClient.getEpisodes(firstItem.SeriesId || firstItem.Id, { - IsVirtualUnaired: false, - IsMissing: false, - SeasonId: isSeason ? firstItem.Id : undefined, - SortBy: options.shuffle ? 'Random' : undefined, - UserId: apiClient.getCurrentUserId(), - Fields: ['Chapters', 'Trickplay'] - }).then(function (episodesResult) { - const originalResults = episodesResult.Items; - - let foundItem = false; - - if (!options.shuffle) { - episodesResult.Items = episodesResult.Items.filter(function (e) { - if (foundItem) { - return true; - } - - if (!e.UserData.Played) { - foundItem = true; - return true; - } - - return false; - }); - } - - if (episodesResult.Items.length === 0) { - episodesResult.Items = originalResults; - } - - episodesResult.TotalRecordCount = episodesResult.Items.length; - - return episodesResult; - }); } else if (firstItem.IsFolder && firstItem.CollectionType === 'homevideos') { - promise = getItemsForPlayback(serverId, mergePlaybackQueries({ + return getItemsForPlayback(serverId, mergePlaybackQueries({ ParentId: firstItem.Id, Filters: 'IsNotFolder', Recursive: true, @@ -1922,7 +1908,8 @@ class PlaybackManager { } else if (firstItem.Type !== 'BoxSet') { sortBy = 'SortName'; } - promise = getItemsForPlayback(serverId, mergePlaybackQueries({ + + return getItemsForPlayback(serverId, mergePlaybackQueries({ ParentId: firstItem.Id, Filters: 'IsNotFolder', Recursive: true, @@ -1930,48 +1917,95 @@ class PlaybackManager { SortBy: sortBy, MediaTypes: 'Audio,Video' }, queryOptions)); - } else if (firstItem.Type === 'Episode' && items.length === 1 && getPlayer(firstItem, options).supportsProgress !== false) { - promise = new Promise(function (resolve, reject) { - const apiClient = ServerConnections.getApiClient(firstItem.ServerId); - - apiClient.getCurrentUser().then(function (user) { - if (!user.Configuration.EnableNextEpisodeAutoPlay || !firstItem.SeriesId) { - resolve(null); - return; - } - - apiClient.getEpisodes(firstItem.SeriesId, { - IsVirtualUnaired: false, - IsMissing: false, - UserId: apiClient.getCurrentUserId(), - Fields: ['Chapters', 'Trickplay'] - }).then(function (episodesResult) { - let foundItem = false; - episodesResult.Items = episodesResult.Items.filter(function (e) { - if (foundItem) { - return true; - } - if (e.Id === firstItem.Id) { - foundItem = true; - return true; - } - - return false; - }); - episodesResult.TotalRecordCount = episodesResult.Items.length; - resolve(episodesResult); - }, reject); - }); - }); } - if (promise) { - return promise.then(function (result) { - return result ? result.Items : items; - }); + return null; + } + + async function getSeriesOrSeasonPlaybackPromise(firstItem, options, items) { + const apiClient = ServerConnections.getApiClient(firstItem.ServerId); + const startSeasonId = firstItem.Type === 'Season' ? items[options.startIndex || 0].Id : undefined; + + const episodesResult = await apiClient.getEpisodes(firstItem.SeriesId || firstItem.Id, { + IsVirtualUnaired: false, + IsMissing: false, + SeasonId: (startSeasonId && items.length === 1) ? startSeasonId : undefined, + SortBy: options.shuffle ? 'Random' : undefined, + UserId: apiClient.getCurrentUserId(), + Fields: ['Chapters', 'Trickplay'] + }); + + if (options.shuffle) { + episodesResult.StartIndex = 0; } else { - return Promise.resolve(items); + episodesResult.StartIndex = undefined; + let seasonStartIndex; + for (const [index, e] of episodesResult.Items.entries()) { + if (startSeasonId) { + if (e.SeasonId == startSeasonId) { + if (seasonStartIndex === undefined) { + seasonStartIndex = index; + } + } else { + continue; + } + } + if (!e.UserData.Played) { + episodesResult.StartIndex = index; + break; + } + } + episodesResult.StartIndex = episodesResult.StartIndex || seasonStartIndex || 0; } + + // TODO: fix calling code to read episodesResult.StartIndex instead when set. + options.startIndex = episodesResult.StartIndex; + + episodesResult.TotalRecordCount = episodesResult.Items.length; + + return episodesResult; + } + + function getEpisodePlaybackPromise(firstItem, options, items) { + if (items.length === 1 && getPlayer(firstItem, options).supportsProgress !== false) { + return getEpisodes(firstItem, options); + } else { + return null; + } + } + + function getEpisodes(firstItem, options) { + return new Promise(function (resolve, reject) { + const apiClient = ServerConnections.getApiClient(firstItem.ServerId); + + if (!firstItem.SeriesId) { + resolve(null); + return; + } + + apiClient.getEpisodes(firstItem.SeriesId, { + IsVirtualUnaired: false, + IsMissing: false, + UserId: apiClient.getCurrentUserId(), + Fields: ['Chapters', 'Trickplay'] + }).then(function (episodesResult) { + resolve(filterEpisodes(episodesResult, firstItem, options)); + }, reject); + }); + } + + function filterEpisodes(episodesResult, firstItem, options) { + for (const [index, e] of episodesResult.Items.entries()) { + if (e.Id === firstItem.Id) { + episodesResult.StartIndex = index; + break; + } + } + + // TODO: fix calling code to read episodesResult.StartIndex instead when set. + options.startIndex = episodesResult.StartIndex; + episodesResult.TotalRecordCount = episodesResult.Items.length; + return episodesResult; } self.translateItemsForPlayback = translateItemsForPlayback; @@ -2245,35 +2279,42 @@ class PlaybackManager { playOptions.isFirstItem = true; } - return runInterceptors(item, playOptions).then(function () { - if (playOptions.fullscreen) { - loading.show(); - } + const apiClient = ServerConnections.getApiClient(item.ServerId); - // TODO: This should be the media type requested, not the original media type - const mediaType = item.MediaType; + // TODO: This should be the media type requested, not the original media type + const mediaType = item.MediaType; - const onBitrateDetectionFailure = function () { - return playAfterBitrateDetect(getSavedMaxStreamingBitrate(ServerConnections.getApiClient(item.ServerId), mediaType), item, playOptions, onPlaybackStartedFn, prevSource); - }; - - if (!isServerItem(item) || itemHelper.isLocalItem(item)) { - return onBitrateDetectionFailure(); - } - - const apiClient = ServerConnections.getApiClient(item.ServerId); - apiClient.getEndpointInfo().then(function (endpointInfo) { - if ((mediaType === 'Video' || mediaType === 'Audio') && appSettings.enableAutomaticBitrateDetection(endpointInfo.IsInNetwork, mediaType)) { - return apiClient.detectBitrate().then(function (bitrate) { - appSettings.maxStreamingBitrate(endpointInfo.IsInNetwork, mediaType, bitrate); - - return playAfterBitrateDetect(bitrate, item, playOptions, onPlaybackStartedFn, prevSource); - }, onBitrateDetectionFailure); - } else { - onBitrateDetectionFailure(); + return runInterceptors(item, playOptions) + .then(() => { + if (playOptions.fullscreen) { + loading.show(); } - }, onBitrateDetectionFailure); - }, onInterceptorRejection); + + if (!isServerItem(item) || itemHelper.isLocalItem(item)) { + return Promise.reject('skip bitrate detection'); + } + + return apiClient.getEndpointInfo().then((endpointInfo) => { + if ((mediaType === 'Video' || mediaType === 'Audio') && appSettings.enableAutomaticBitrateDetection(endpointInfo.IsInNetwork, mediaType)) { + return apiClient.detectBitrate().then((bitrate) => { + appSettings.maxStreamingBitrate(endpointInfo.IsInNetwork, mediaType, bitrate); + return bitrate; + }); + } + + return Promise.reject('skip bitrate detection'); + }); + }) + .catch(() => getSavedMaxStreamingBitrate(apiClient, mediaType)) + .then((bitrate) => { + return playAfterBitrateDetect(bitrate, item, playOptions, onPlaybackStartedFn, prevSource); + }) + .catch(onInterceptorRejection) + .finally(() => { + if (playOptions.fullscreen) { + loading.hide(); + } + }); } function cancelPlayback() { @@ -2287,8 +2328,21 @@ class PlaybackManager { Events.trigger(self, 'playbackcancelled'); } - function onInterceptorRejection() { + function onInterceptorRejection(e) { cancelPlayback(); + + let displayErrorCode = 'ErrorDefault'; + + if (e instanceof Response) { + if (e.status >= 500) { + displayErrorCode = `PlaybackError.${MediaError.SERVER_ERROR}`; + } else if (e.status >= 400) { + displayErrorCode = `PlaybackError.${MediaError.NO_MEDIA_ERROR}`; + } + } + + showPlaybackInfoErrorMessage(self, displayErrorCode); + return Promise.reject(); } @@ -2782,7 +2836,7 @@ class PlaybackManager { } else { if (item.AlbumId != null) { return apiClient.getItem(apiClient.getCurrentUserId(), item.AlbumId).then(function(result) { - mediaSource.albumLUFS = result.LUFS; + mediaSource.albumNormalizationGain = result.NormalizationGain; return mediaSource; }); } @@ -3313,7 +3367,13 @@ class PlaybackManager { if (errorOccurred) { showPlaybackInfoErrorMessage(self, 'PlaybackError' + displayErrorCode); } else if (nextItem) { - self.nextTrack(); + const apiClient = ServerConnections.getApiClient(nextItem.item.ServerId); + + apiClient.getCurrentUser().then(function (user) { + if (user.Configuration.EnableNextEpisodeAutoPlay || nextMediaType !== MediaType.Video) { + self.nextTrack(); + } + }); } } diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index 254389a9f6..eec2cd4c78 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -173,6 +173,8 @@ function loadForm(context, user, userSettings, systemInfo, apiClient) { context.querySelector('.chkPlayDefaultAudioTrack').checked = user.Configuration.PlayDefaultAudioTrack || false; context.querySelector('.chkPreferFmp4HlsContainer').checked = userSettings.preferFmp4HlsContainer(); + context.querySelector('.chkEnableDts').checked = appSettings.enableDts(); + context.querySelector('.chkEnableTrueHd').checked = appSettings.enableTrueHd(); context.querySelector('.chkEnableCinemaMode').checked = userSettings.enableCinemaMode(); context.querySelector('#selectAudioNormalization').value = userSettings.selectAudioNormalization(); context.querySelector('.chkEnableNextVideoOverlay').checked = userSettings.enableNextVideoInfoOverlay(); @@ -180,6 +182,7 @@ function loadForm(context, user, userSettings, systemInfo, apiClient) { context.querySelector('.chkRememberSubtitleSelections').checked = user.Configuration.RememberSubtitleSelections || false; context.querySelector('.chkExternalVideoPlayer').checked = appSettings.enableSystemExternalPlayers(); context.querySelector('.chkLimitSupportedVideoResolution').checked = appSettings.limitSupportedVideoResolution(); + context.querySelector('#selectPreferredTranscodeVideoAudioCodec').value = appSettings.preferredTranscodeVideoAudioCodec(); setMaxBitrateIntoField(context.querySelector('.selectVideoInNetworkQuality'), true, 'Video'); setMaxBitrateIntoField(context.querySelector('.selectVideoInternetQuality'), false, 'Video'); @@ -215,6 +218,10 @@ function saveUser(context, user, userSettingsInstance, apiClient) { appSettings.maxChromecastBitrate(context.querySelector('.selectChromecastVideoQuality').value); appSettings.maxVideoWidth(context.querySelector('.selectMaxVideoWidth').value); appSettings.limitSupportedVideoResolution(context.querySelector('.chkLimitSupportedVideoResolution').checked); + appSettings.preferredTranscodeVideoAudioCodec(context.querySelector('#selectPreferredTranscodeVideoAudioCodec').value); + + appSettings.enableDts(context.querySelector('.chkEnableDts').checked); + appSettings.enableTrueHd(context.querySelector('.chkEnableTrueHd').checked); setMaxBitrateFromField(context.querySelector('.selectVideoInNetworkQuality'), true, 'Video'); setMaxBitrateFromField(context.querySelector('.selectVideoInternetQuality'), false, 'Video'); diff --git a/src/components/playbackSettings/playbackSettings.template.html b/src/components/playbackSettings/playbackSettings.template.html index 6dc860260f..a6ba42ef09 100644 --- a/src/components/playbackSettings/playbackSettings.template.html +++ b/src/components/playbackSettings/playbackSettings.template.html @@ -159,6 +159,41 @@ +
+

+ ${HeaderVideoAdvanced} +

+ +
+ +
${EnableDtsHelp}
+
+ +
+ +
${EnableTrueHdHelp}
+
+ +
+ +
${SelectPreferredTranscodeVideoAudioCodecHelp}
+
+
+ diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 4335fa17ec..46100472c2 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -4,6 +4,7 @@ import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api'; import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; import escapeHtml from 'escape-html'; +import toast from 'components/toast/toast'; import dom from 'scripts/dom'; import globalize from 'scripts/globalize'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; @@ -52,12 +53,14 @@ function onSubmit(this: HTMLElement, e: Event) { addToPlaylist(panel, playlistId) .catch(err => { console.error('[PlaylistEditor] Failed to add to playlist %s', playlistId, err); + toast(globalize.translate('PlaylistError.AddFailed')); }) .finally(loading.hide); } else { createPlaylist(panel) .catch(err => { console.error('[PlaylistEditor] Failed to create playlist', err); + toast(globalize.translate('PlaylistError.CreateFailed')); }) .finally(loading.hide); } @@ -73,13 +76,16 @@ function createPlaylist(dlg: DialogElement) { const apiClient = ServerConnections.getApiClient(currentServerId); const api = toApi(apiClient); - const itemIds = dlg.querySelector('.fldSelectedItemIds')?.value || ''; + const itemIds = dlg.querySelector('.fldSelectedItemIds')?.value || undefined; return getPlaylistsApi(api) .createPlaylist({ - name: dlg.querySelector('#txtNewPlaylistName')?.value, - ids: itemIds.split(','), - userId: apiClient.getCurrentUserId() + createPlaylistDto: { + Name: dlg.querySelector('#txtNewPlaylistName')?.value, + IsPublic: dlg.querySelector('#chkPlaylistPublic')?.checked, + Ids: itemIds?.split(','), + UserId: apiClient.getCurrentUserId() + } }) .then(result => { dlg.submitted = true; @@ -147,6 +153,32 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl recursive: true }) .then(({ data }) => { + return Promise.all((data.Items || []).map(item => { + const playlist = { + item, + permissions: undefined + }; + + if (!item.Id) return playlist; + + return getPlaylistsApi(api) + .getPlaylistUser({ + playlistId: item.Id, + userId: apiClient.getCurrentUserId() + }) + .then(({ data: permissions }) => ({ + ...playlist, + permissions + })) + .catch(err => { + // If a user doesn't have access, then the request will 404 and throw + console.info('[PlaylistEditor] Failed to fetch playlist permissions', err); + + return playlist; + }); + })); + }) + .then(playlists => { let html = ''; if ((editorOptions.enableAddToPlayQueue !== false && playbackManager.isPlaying()) || SyncPlay?.Manager.isSyncPlayEnabled()) { @@ -155,8 +187,10 @@ function populatePlaylists(editorOptions: PlaylistEditorOptions, panel: DialogEl html += ``; - html += data.Items?.map(i => { - return ``; + html += playlists.map(({ item, permissions }) => { + if (!permissions?.CanEdit) return ''; + + return ``; }); select.innerHTML = html; @@ -195,6 +229,17 @@ function getEditorHtml(items: string[]) { html += ``; html += ''; + html += ` +
+ +
+ ${globalize.translate('PlaylistPublicDescription')} +
+
`; + // newPlaylistInfo html += ''; diff --git a/src/components/router/appRouter.js b/src/components/router/appRouter.js index de6b3c6871..3b07a5571c 100644 --- a/src/components/router/appRouter.js +++ b/src/components/router/appRouter.js @@ -1,3 +1,4 @@ +import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; import { Action, createHashHistory } from 'history'; import { appHost } from '../apphost'; @@ -9,8 +10,11 @@ import loading from '../loading/loading'; import viewManager from '../viewManager/viewManager'; import ServerConnections from '../ServerConnections'; import alert from '../alert'; -import { ConnectionState } from '../../utils/jellyfin-apiclient/ConnectionState.ts'; -import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; + +import { queryClient } from 'utils/query/queryClient'; +import { getItemQuery } from 'hooks/useItem'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; +import { ConnectionState } from 'utils/jellyfin-apiclient/ConnectionState.ts'; export const history = createHashHistory(); @@ -183,18 +187,26 @@ class AppRouter { showItem(item, serverId, options) { // TODO: Refactor this so it only gets items, not strings. - if (typeof (item) === 'string') { + if (typeof item === 'string') { const apiClient = serverId ? ServerConnections.getApiClient(serverId) : ServerConnections.currentApiClient(); - apiClient.getItem(apiClient.getCurrentUserId(), item).then((itemObject) => { - this.showItem(itemObject, options); - }); + const api = toApi(apiClient); + const userId = apiClient.getCurrentUserId(); + + queryClient + .fetchQuery(getItemQuery(api, userId, item)) + .then(itemObject => { + this.showItem(itemObject, options); + }) + .catch(err => { + console.error('[AppRouter] Failed to fetch item', err); + }); } else { if (arguments.length === 2) { options = arguments[1]; } const url = this.getRouteUrl(item, options); - this.show(url, { item }); + this.show(url); } } diff --git a/src/components/shortcuts.js b/src/components/shortcuts.js index cadb8cc20e..91f96f9d9b 100644 --- a/src/components/shortcuts.js +++ b/src/components/shortcuts.js @@ -2,6 +2,7 @@ * Module shortcuts. * @module components/shortcuts */ +import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; import { playbackManager } from './playback/playbackmanager'; import inputManager from '../scripts/inputManager'; @@ -12,6 +13,7 @@ import recordingHelper from './recordingcreator/recordinghelper'; import ServerConnections from './ServerConnections'; import toast from './toast/toast'; import * as userSettings from '../scripts/settings/userSettings'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; function playAllFromHere(card, serverId, queue) { const parent = card.parentNode; @@ -100,7 +102,7 @@ function notifyRefreshNeeded(childElement, itemsContainer) { } } -function showContextMenu(card, options) { +function showContextMenu(card, options = {}) { getItem(card).then(item => { const playlistId = card.getAttribute('data-playlistid'); const collectionId = card.getAttribute('data-collectionid'); @@ -110,28 +112,56 @@ function showContextMenu(card, options) { item.PlaylistItemId = elem ? elem.getAttribute('data-playlistitemid') : null; } - import('./itemContextMenu').then((itemContextMenu) => { - ServerConnections.getApiClient(item.ServerId).getCurrentUser().then(user => { - itemContextMenu.show(Object.assign({ - item: item, + const apiClient = ServerConnections.getApiClient(item.ServerId); + const api = toApi(apiClient); + + Promise.all([ + // Import the item menu component + import('./itemContextMenu'), + // Fetch the current user + apiClient.getCurrentUser(), + // Fetch playlist perms if item is a child of a playlist + playlistId ? + getPlaylistsApi(api) + .getPlaylistUser({ + playlistId, + userId: apiClient.getCurrentUserId() + }) + .then(({ data }) => data) + .catch(err => { + // If a user doesn't have access, then the request will 404 and throw + console.info('[Shortcuts] Failed to fetch playlist permissions', err); + return { CanEdit: false }; + }) : + // Not a playlist item + Promise.resolve({ CanEdit: false }) + ]) + .then(([ + itemContextMenu, + user, + playlistPerms + ]) => { + return itemContextMenu.show({ + item, play: true, queue: true, - playAllFromHere: !item.IsFolder, + playAllFromHere: item.Type === 'Season' || !item.IsFolder, queueAllFromHere: !item.IsFolder, - playlistId: playlistId, - collectionId: collectionId, - user: user - }, options || {})) - .then(result => { - if (result.command === 'playallfromhere' || result.command === 'queueallfromhere') { - executeAction(card, options.positionTo, result.command); - } else if (result.updated || result.deleted) { - notifyRefreshNeeded(card, options.itemsContainer); - } - }) - .catch(() => { /* no-op */ }); - }); - }); + playlistId, + canEditPlaylist: !!playlistPerms.CanEdit, + collectionId, + user, + ...options + }); + }) + .then(result => { + if (result.command === 'playallfromhere' || result.command === 'queueallfromhere') { + executeAction(card, options.positionTo, result.command); + } else if (result.updated || result.deleted) { + notifyRefreshNeeded(card, options.itemsContainer); + } + }) + .catch(() => { /* no-op */ }); }); } @@ -406,8 +436,8 @@ export function getShortcutAttributesHtml(item, serverId) { } export default { - on: on, - off: off, - onClick: onClick, - getShortcutAttributesHtml: getShortcutAttributesHtml + on, + off, + onClick, + getShortcutAttributesHtml }; diff --git a/src/components/themeMediaPlayer.js b/src/components/themeMediaPlayer.js index bad76612ce..87d86b7a4b 100644 --- a/src/components/themeMediaPlayer.js +++ b/src/components/themeMediaPlayer.js @@ -1,6 +1,14 @@ +import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; +import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api'; + +import { getItemQuery } from 'hooks/useItem'; +import { currentSettings as userSettings } from 'scripts/settings/userSettings'; +import { ItemKind } from 'types/base/models/item-kind'; +import Events from 'utils/events.ts'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; +import { queryClient } from 'utils/query/queryClient'; + import { playbackManager } from './playback/playbackmanager'; -import * as userSettings from '../scripts/settings/userSettings'; -import Events from '../utils/events.ts'; import ServerConnections from './ServerConnections'; let currentOwnerId; @@ -50,44 +58,61 @@ function stopIfPlaying() { } function enabled(mediaType) { - if (mediaType === 'Video') { + if (mediaType === MediaType.Video) { return userSettings.enableThemeVideos(); } return userSettings.enableThemeSongs(); } -const excludeTypes = ['CollectionFolder', 'UserView', 'Program', 'SeriesTimer', 'Person', 'TvChannel', 'Channel']; +const excludeTypes = [ + ItemKind.CollectionFolder, + ItemKind.UserView, + ItemKind.Person, + ItemKind.Program, + ItemKind.TvChannel, + ItemKind.Channel, + ItemKind.SeriesTimer +]; -function loadThemeMedia(item) { - if (item.CollectionType) { - stopIfPlaying(); - return; - } +async function loadThemeMedia(serverId, itemId) { + const apiClient = ServerConnections.getApiClient(serverId); + const api = toApi(apiClient); + const userId = apiClient.getCurrentUserId(); - if (excludeTypes.indexOf(item.Type) !== -1) { - stopIfPlaying(); - return; - } + try { + const item = await queryClient.fetchQuery(getItemQuery( + api, + userId, + itemId)); - const apiClient = ServerConnections.getApiClient(item.ServerId); - apiClient.getThemeMedia(apiClient.getCurrentUserId(), item.Id, true).then(function (themeMediaResult) { - const result = userSettings.enableThemeVideos() && themeMediaResult.ThemeVideosResult.Items.length ? themeMediaResult.ThemeVideosResult : themeMediaResult.ThemeSongsResult; - - const ownerId = result.OwnerId; - - if (ownerId !== currentOwnerId) { - playThemeMedia(result.Items, ownerId); + if (item.CollectionType) { + stopIfPlaying(); + return; } - }); + + if (excludeTypes.includes(item.Type)) { + stopIfPlaying(); + return; + } + + const { data: themeMedia } = await getLibraryApi(api) + .getThemeMedia({ userId, itemId: item.Id, inheritFromParent: true }); + + const result = userSettings.enableThemeVideos() && themeMedia.ThemeVideosResult?.Items?.length ? themeMedia.ThemeVideosResult : themeMedia.ThemeSongsResult; + + if (result.OwnerId !== currentOwnerId) { + playThemeMedia(result.Items, result.OwnerId); + } + } catch (err) { + console.error('[ThemeMediaPlayer] failed to load theme media', err); + } } -document.addEventListener('viewshow', function (e) { - const state = e.detail.state || {}; - const item = state.item; - - if (item?.ServerId) { - loadThemeMedia(item); +document.addEventListener('viewshow', e => { + const { serverId, id } = e.detail?.params || {}; + if (serverId && id) { + void loadThemeMedia(serverId, id); return; } @@ -100,7 +125,7 @@ document.addEventListener('viewshow', function (e) { } }, true); -Events.on(playbackManager, 'playbackstart', function (e, player) { +Events.on(playbackManager, 'playbackstart', (_e, player) => { const item = playbackManager.currentItem(player); // User played something manually if (currentThemeIds.indexOf(item.Id) == -1) { diff --git a/src/components/toolbar/AppToolbar.tsx b/src/components/toolbar/AppToolbar.tsx index be6cf36e8b..8283860f3c 100644 --- a/src/components/toolbar/AppToolbar.tsx +++ b/src/components/toolbar/AppToolbar.tsx @@ -5,7 +5,6 @@ import IconButton from '@mui/material/IconButton'; import Toolbar from '@mui/material/Toolbar'; import Tooltip from '@mui/material/Tooltip'; import React, { FC, ReactNode } from 'react'; -import { useLocation } from 'react-router-dom'; import { appRouter } from 'components/router/appRouter'; import { useApi } from 'hooks/useApi'; @@ -17,7 +16,8 @@ interface AppToolbarProps { buttons?: ReactNode isDrawerAvailable: boolean isDrawerOpen: boolean - onDrawerButtonClick: (event: React.MouseEvent) => void + onDrawerButtonClick?: (event: React.MouseEvent) => void, + isUserMenuAvailable?: boolean } const onBackButtonClick = () => { @@ -32,17 +32,14 @@ const AppToolbar: FC = ({ children, isDrawerAvailable, isDrawerOpen, - onDrawerButtonClick + onDrawerButtonClick = () => { /* no-op */ }, + isUserMenuAvailable = true }) => { const { user } = useApi(); const isUserLoggedIn = Boolean(user); - const currentLocation = useLocation(); const isBackButtonAvailable = appRouter.canGoBack(); - // Handles a specific case to hide the user menu on the select server page while authenticated - const isUserMenuAvailable = currentLocation.pathname !== '/selectserver.html'; - return ( = ({ {children} - {isUserLoggedIn && isUserMenuAvailable && ( - <> - - {buttons} - + + {buttons} + - - - - + {isUserLoggedIn && isUserMenuAvailable && ( + + + )} ); diff --git a/src/controllers/dashboard/encodingsettings.html b/src/controllers/dashboard/encodingsettings.html index 824b8f8280..89dede8e49 100644 --- a/src/controllers/dashboard/encodingsettings.html +++ b/src/controllers/dashboard/encodingsettings.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/encodingsettings.js b/src/controllers/dashboard/encodingsettings.js index 0ad65c3d30..66643483b8 100644 --- a/src/controllers/dashboard/encodingsettings.js +++ b/src/controllers/dashboard/encodingsettings.js @@ -2,7 +2,6 @@ import 'jquery'; import loading from '../../components/loading/loading'; import globalize from '../../scripts/globalize'; import dom from '../../scripts/dom'; -import libraryMenu from '../../scripts/libraryMenu'; import Dashboard from '../../utils/dashboard'; import alert from '../../components/alert'; @@ -167,22 +166,6 @@ function setDecodingCodecsVisible(context, value) { } } -function getTabs() { - return [{ - href: '#/dashboard/playback/transcoding', - name: globalize.translate('Transcoding') - }, { - href: '#/dashboard/playback/resume', - name: globalize.translate('ButtonResume') - }, { - href: '#/dashboard/playback/streaming', - name: globalize.translate('TabStreaming') - }, { - href: '#/dashboard/playback/trickplay', - name: globalize.translate('Trickplay') - }]; -} - let systemInfo; function getSystemInfo() { return systemInfo ? Promise.resolve(systemInfo) : ApiClient.getPublicSystemInfo().then( @@ -292,7 +275,6 @@ $(document).on('pageinit', '#encodingSettingsPage', function () { $('.encodingSettingsForm').off('submit', onSubmit).on('submit', onSubmit); }).on('pageshow', '#encodingSettingsPage', function () { loading.show(); - libraryMenu.setTabs('playback', 0, getTabs); const page = this; ApiClient.getNamedConfiguration('encoding').then(function (config) { ApiClient.getSystemInfo().then(function (fetchedSystemInfo) { diff --git a/src/controllers/dashboard/general.html b/src/controllers/dashboard/general.html index 62f92d097c..c1cb04a9e1 100644 --- a/src/controllers/dashboard/general.html +++ b/src/controllers/dashboard/general.html @@ -83,7 +83,11 @@

${HeaderPerformance}

- + +
${LibraryScanFanoutConcurrencyHelp}
+
+
+
${LabelParallelImageEncodingLimitHelp}
diff --git a/src/controllers/dashboard/general.js b/src/controllers/dashboard/general.js index ee495259cf..d62cfbd16f 100644 --- a/src/controllers/dashboard/general.js +++ b/src/controllers/dashboard/general.js @@ -19,6 +19,7 @@ function loadPage(page, config, languageOptions, systemInfo) { $('#selectLocalizationLanguage', page).html(languageOptions.map(function (language) { return ''; })).val(config.UICulture); + page.querySelector('#txtLibraryScanFanoutConcurrency').value = config.LibraryScanFanoutConcurrency || ''; page.querySelector('#txtParallelImageEncodingLimit').value = config.ParallelImageEncodingLimit || ''; loading.hide(); @@ -35,6 +36,7 @@ function onSubmit() { config.MetadataPath = $('#txtMetadataPath', form).val(); config.MetadataNetworkPath = $('#txtMetadataNetworkPath', form).val(); config.QuickConnectAvailable = form.querySelector('#chkQuickConnectAvailable').checked; + config.LibraryScanFanoutConcurrency = parseInt(form.querySelector('#txtLibraryScanFanoutConcurrency').value || '0', 10); config.ParallelImageEncodingLimit = parseInt(form.querySelector('#txtParallelImageEncodingLimit').value || '0', 10); ApiClient.updateServerConfiguration(config).then(function() { diff --git a/src/controllers/dashboard/library.html b/src/controllers/dashboard/library.html index d664312737..843854b8b8 100644 --- a/src/controllers/dashboard/library.html +++ b/src/controllers/dashboard/library.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/library.js b/src/controllers/dashboard/library.js index 897ad3ecbe..8d9dafde03 100644 --- a/src/controllers/dashboard/library.js +++ b/src/controllers/dashboard/library.js @@ -2,7 +2,6 @@ import escapeHtml from 'escape-html'; import 'jquery'; import taskButton from '../../scripts/taskbutton'; import loading from '../../components/loading/loading'; -import libraryMenu from '../../scripts/libraryMenu'; import globalize from '../../scripts/globalize'; import dom from '../../scripts/dom'; import imageHelper from '../../utils/image'; @@ -358,22 +357,6 @@ function getVirtualFolderHtml(page, virtualFolder, index) { return html; } -function getTabs() { - return [{ - href: '#/dashboard/libraries', - name: globalize.translate('HeaderLibraries') - }, { - href: '#/dashboard/libraries/display', - name: globalize.translate('Display') - }, { - href: '#/dashboard/libraries/metadata', - name: globalize.translate('Metadata') - }, { - href: '#/dashboard/libraries/nfo', - name: globalize.translate('TabNfoSettings') - }]; -} - window.WizardLibraryPage = { next: function () { Dashboard.navigate('wizardsettings.html'); @@ -383,8 +366,6 @@ pageClassOn('pageshow', 'mediaLibraryPage', function () { reloadLibrary(this); }); pageIdOn('pageshow', 'mediaLibraryPage', function () { - libraryMenu.setTabs('librarysetup', 0, getTabs); - const page = this; taskButton({ mode: 'on', diff --git a/src/controllers/dashboard/librarydisplay.html b/src/controllers/dashboard/librarydisplay.html index 04a8554823..d7bcffafda 100644 --- a/src/controllers/dashboard/librarydisplay.html +++ b/src/controllers/dashboard/librarydisplay.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/librarydisplay.js b/src/controllers/dashboard/librarydisplay.js index a38608277d..bae62009da 100644 --- a/src/controllers/dashboard/librarydisplay.js +++ b/src/controllers/dashboard/librarydisplay.js @@ -1,26 +1,8 @@ -import globalize from '../../scripts/globalize'; import loading from '../../components/loading/loading'; -import libraryMenu from '../../scripts/libraryMenu'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-button/emby-button'; import Dashboard from '../../utils/dashboard'; -function getTabs() { - return [{ - href: '#/dashboard/libraries', - name: globalize.translate('HeaderLibraries') - }, { - href: '#/dashboard/libraries/display', - name: globalize.translate('Display') - }, { - href: '#/dashboard/libraries/metadata', - name: globalize.translate('Metadata') - }, { - href: '#/dashboard/libraries/nfo', - name: globalize.translate('TabNfoSettings') - }]; -} - export default function(view) { function loadData() { ApiClient.getServerConfiguration().then(function(config) { @@ -57,7 +39,6 @@ export default function(view) { }); view.addEventListener('viewshow', function() { - libraryMenu.setTabs('librarysetup', 1, getTabs); loadData(); ApiClient.getSystemInfo().then(function(info) { if (info.OperatingSystem === 'Windows') { diff --git a/src/controllers/dashboard/metadataImages.js b/src/controllers/dashboard/metadataImages.js index 076700fd69..81b74b2182 100644 --- a/src/controllers/dashboard/metadataImages.js +++ b/src/controllers/dashboard/metadataImages.js @@ -3,7 +3,6 @@ import { ImageResolution } from '@jellyfin/sdk/lib/generated-client/models/image import 'jquery'; import loading from '../../components/loading/loading'; -import libraryMenu from '../../scripts/libraryMenu'; import globalize from '../../scripts/globalize'; import Dashboard from '../../utils/dashboard'; @@ -86,26 +85,9 @@ function onSubmit() { return false; } -function getTabs() { - return [{ - href: '#/dashboard/libraries', - name: globalize.translate('HeaderLibraries') - }, { - href: '#/dashboard/libraries/display', - name: globalize.translate('Display') - }, { - href: '#/dashboard/libraries/metadata', - name: globalize.translate('Metadata') - }, { - href: '#/dashboard/libraries/nfo', - name: globalize.translate('TabNfoSettings') - }]; -} - $(document).on('pageinit', '#metadataImagesConfigurationPage', function() { $('.metadataImagesConfigurationForm').off('submit', onSubmit).on('submit', onSubmit); }).on('pageshow', '#metadataImagesConfigurationPage', function() { - libraryMenu.setTabs('metadata', 2, getTabs); loading.show(); loadPage(this); }); diff --git a/src/controllers/dashboard/metadataimages.html b/src/controllers/dashboard/metadataimages.html index 251f5b8235..afa7a4bc96 100644 --- a/src/controllers/dashboard/metadataimages.html +++ b/src/controllers/dashboard/metadataimages.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/metadatanfo.html b/src/controllers/dashboard/metadatanfo.html index 44d1cc06f6..362be76faf 100644 --- a/src/controllers/dashboard/metadatanfo.html +++ b/src/controllers/dashboard/metadatanfo.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/metadatanfo.js b/src/controllers/dashboard/metadatanfo.js index 1a68d4d63c..9e82117892 100644 --- a/src/controllers/dashboard/metadatanfo.js +++ b/src/controllers/dashboard/metadatanfo.js @@ -1,7 +1,6 @@ import escapeHtml from 'escape-html'; import 'jquery'; import loading from '../../components/loading/loading'; -import libraryMenu from '../../scripts/libraryMenu'; import globalize from '../../scripts/globalize'; import Dashboard from '../../utils/dashboard'; import alert from '../../components/alert'; @@ -44,27 +43,10 @@ function showConfirmMessage() { }); } -function getTabs() { - return [{ - href: '#/dashboard/libraries', - name: globalize.translate('HeaderLibraries') - }, { - href: '#/dashboard/libraries/display', - name: globalize.translate('Display') - }, { - href: '#/dashboard/libraries/metadata', - name: globalize.translate('Metadata') - }, { - href: '#/dashboard/libraries/nfo', - name: globalize.translate('TabNfoSettings') - }]; -} - const metadataKey = 'xbmcmetadata'; $(document).on('pageinit', '#metadataNfoPage', function () { $('.metadataNfoForm').off('submit', onSubmit).on('submit', onSubmit); }).on('pageshow', '#metadataNfoPage', function () { - libraryMenu.setTabs('metadata', 3, getTabs); loading.show(); const page = this; const promise1 = ApiClient.getUsers(); diff --git a/src/controllers/dashboard/playback.html b/src/controllers/dashboard/playback.html index 302d00d377..ff7e2bf502 100644 --- a/src/controllers/dashboard/playback.html +++ b/src/controllers/dashboard/playback.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/playback.js b/src/controllers/dashboard/playback.js index f0d35f02ee..e9812ab366 100644 --- a/src/controllers/dashboard/playback.js +++ b/src/controllers/dashboard/playback.js @@ -1,7 +1,5 @@ import 'jquery'; import loading from '../../components/loading/loading'; -import libraryMenu from '../../scripts/libraryMenu'; -import globalize from '../../scripts/globalize'; import Dashboard from '../../utils/dashboard'; function loadPage(page, config) { @@ -29,27 +27,10 @@ function onSubmit() { return false; } -function getTabs() { - return [{ - href: '#/dashboard/playback/transcoding', - name: globalize.translate('Transcoding') - }, { - href: '#/dashboard/playback/resume', - name: globalize.translate('ButtonResume') - }, { - href: '#/dashboard/playback/streaming', - name: globalize.translate('TabStreaming') - }, { - href: '#/dashboard/playback/trickplay', - name: globalize.translate('Trickplay') - }]; -} - $(document).on('pageinit', '#playbackConfigurationPage', function () { $('.playbackConfigurationForm').off('submit', onSubmit).on('submit', onSubmit); }).on('pageshow', '#playbackConfigurationPage', function () { loading.show(); - libraryMenu.setTabs('playback', 1, getTabs); const page = this; ApiClient.getServerConfiguration().then(function (config) { loadPage(page, config); diff --git a/src/controllers/dashboard/plugins/available/index.html b/src/controllers/dashboard/plugins/available/index.html index 68567db744..dde4d2ceb3 100644 --- a/src/controllers/dashboard/plugins/available/index.html +++ b/src/controllers/dashboard/plugins/available/index.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/plugins/available/index.js b/src/controllers/dashboard/plugins/available/index.js index 8ce0932292..aafcea2f7e 100644 --- a/src/controllers/dashboard/plugins/available/index.js +++ b/src/controllers/dashboard/plugins/available/index.js @@ -1,7 +1,6 @@ import escapeHTML from 'escape-html'; import loading from '../../../../components/loading/loading'; -import libraryMenu from '../../../../scripts/libraryMenu'; import globalize from '../../../../scripts/globalize'; import '../../../../components/cardbuilder/card.scss'; import '../../../../elements/emby-button/emby-button'; @@ -159,22 +158,8 @@ function getPluginHtml(plugin, options, installedPlugins) { return html; } -function getTabs() { - return [{ - href: '#/dashboard/plugins', - name: globalize.translate('TabMyPlugins') - }, { - href: '#/dashboard/plugins/catalog', - name: globalize.translate('TabCatalog') - }, { - href: '#/dashboard/plugins/repositories', - name: globalize.translate('TabRepositories') - }]; -} - export default function (view) { view.addEventListener('viewshow', function () { - libraryMenu.setTabs('plugins', 1, getTabs); reloadList(this); }); } diff --git a/src/controllers/dashboard/plugins/installed/index.html b/src/controllers/dashboard/plugins/installed/index.html index 4aedb8a9de..a1f74453de 100644 --- a/src/controllers/dashboard/plugins/installed/index.html +++ b/src/controllers/dashboard/plugins/installed/index.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/plugins/installed/index.js b/src/controllers/dashboard/plugins/installed/index.js index 9600eb0a30..15483d4c71 100644 --- a/src/controllers/dashboard/plugins/installed/index.js +++ b/src/controllers/dashboard/plugins/installed/index.js @@ -1,5 +1,4 @@ import loading from '../../../../components/loading/loading'; -import libraryMenu from '../../../../scripts/libraryMenu'; import dom from '../../../../scripts/dom'; import globalize from '../../../../scripts/globalize'; import '../../../../components/cardbuilder/card.scss'; @@ -219,19 +218,6 @@ function reloadList(page) { }); } -function getTabs() { - return [{ - href: '#/dashboard/plugins', - name: globalize.translate('TabMyPlugins') - }, { - href: '#/dashboard/plugins/catalog', - name: globalize.translate('TabCatalog') - }, { - href: '#/dashboard/plugins/repositories', - name: globalize.translate('TabRepositories') - }]; -} - function onInstalledPluginsClick(e) { if (dom.parentWithClass(e.target, 'noConfigPluginCard')) { showNoConfigurationMessage(); @@ -257,7 +243,6 @@ function onFilterType(page, searchBar) { } pageIdOn('pageshow', 'pluginsPage', function () { - libraryMenu.setTabs('plugins', 0, getTabs); reloadList(this); }); diff --git a/src/controllers/dashboard/plugins/repositories/index.html b/src/controllers/dashboard/plugins/repositories/index.html index 68dab3c079..e793df2532 100644 --- a/src/controllers/dashboard/plugins/repositories/index.html +++ b/src/controllers/dashboard/plugins/repositories/index.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/plugins/repositories/index.js b/src/controllers/dashboard/plugins/repositories/index.js index 55ff12a456..39110cd2e7 100644 --- a/src/controllers/dashboard/plugins/repositories/index.js +++ b/src/controllers/dashboard/plugins/repositories/index.js @@ -1,5 +1,4 @@ import loading from '../../../../components/loading/loading'; -import libraryMenu from '../../../../scripts/libraryMenu'; import globalize from '../../../../scripts/globalize'; import dialogHelper from '../../../../components/dialogHelper/dialogHelper'; import confirm from '../../../../components/confirm/confirm'; @@ -103,22 +102,8 @@ function getRepositoryElement(repository) { return listItem; } -function getTabs() { - return [{ - href: '#/dashboard/plugins', - name: globalize.translate('TabMyPlugins') - }, { - href: '#/dashboard/plugins/catalog', - name: globalize.translate('TabCatalog') - }, { - href: '#/dashboard/plugins/repositories', - name: globalize.translate('TabRepositories') - }]; -} - export default function(view) { view.addEventListener('viewshow', function () { - libraryMenu.setTabs('plugins', 2, getTabs); reloadList(this); const save = this; diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtask.html b/src/controllers/dashboard/scheduledtasks/scheduledtask.html index a234d77ad4..f0f9d181de 100644 --- a/src/controllers/dashboard/scheduledtasks/scheduledtask.html +++ b/src/controllers/dashboard/scheduledtasks/scheduledtask.html @@ -20,7 +20,7 @@
-
+

${ButtonAddScheduledTaskTrigger}

diff --git a/src/controllers/dashboard/streaming.html b/src/controllers/dashboard/streaming.html index 1916c264f3..4219e63a5c 100644 --- a/src/controllers/dashboard/streaming.html +++ b/src/controllers/dashboard/streaming.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/controllers/dashboard/streaming.js b/src/controllers/dashboard/streaming.js index d6ca058743..79fd0d28f3 100644 --- a/src/controllers/dashboard/streaming.js +++ b/src/controllers/dashboard/streaming.js @@ -1,7 +1,5 @@ import 'jquery'; -import libraryMenu from '../../scripts/libraryMenu'; import loading from '../../components/loading/loading'; -import globalize from '../../scripts/globalize'; import Dashboard from '../../utils/dashboard'; function loadPage(page, config) { @@ -20,27 +18,10 @@ function onSubmit() { return false; } -function getTabs() { - return [{ - href: '#/dashboard/playback/transcoding', - name: globalize.translate('Transcoding') - }, { - href: '#/dashboard/playback/resume', - name: globalize.translate('ButtonResume') - }, { - href: '#/dashboard/playback/streaming', - name: globalize.translate('TabStreaming') - }, { - href: '#/dashboard/playback/trickplay', - name: globalize.translate('Trickplay') - }]; -} - $(document).on('pageinit', '#streamingSettingsPage', function () { $('.streamingSettingsForm').off('submit', onSubmit).on('submit', onSubmit); }).on('pageshow', '#streamingSettingsPage', function () { loading.show(); - libraryMenu.setTabs('playback', 2, getTabs); const page = this; ApiClient.getServerConfiguration().then(function (config) { loadPage(page, config); diff --git a/src/controllers/itemDetails/index.html b/src/controllers/itemDetails/index.html index 935ac44ea4..cd5439a10f 100644 --- a/src/controllers/itemDetails/index.html +++ b/src/controllers/itemDetails/index.html @@ -175,14 +175,14 @@

${HeaderAdditionalParts}

-
+

-
+
@@ -194,21 +194,21 @@

-
+

${HeaderCastAndCrew}

-
+

${HeaderGuestCast}

-
+
@@ -220,28 +220,28 @@

${SpecialFeatures}

-
+

${MusicVideos}

-
+

${HeaderScenes}

-
+

${HeaderMoreLikeThis}

-
+
diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index f5cf971eba..71aebc57a4 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -1,3 +1,4 @@ +import { PersonKind } from '@jellyfin/sdk/lib/generated-client/models/person-kind'; import { intervalToDuration } from 'date-fns'; import DOMPurify from 'dompurify'; import escapeHtml from 'escape-html'; @@ -822,8 +823,18 @@ function setInitialCollapsibleState(page, item, apiClient, context, user) { page.querySelector('#specialsCollapsible').classList.add('hide'); } - renderCast(page, item); - renderGuestCast(page, item); + const cast = []; + const guestCast = []; + (item.People || []).forEach(p => { + if (p.Type === PersonKind.GuestStar) { + guestCast.push(p); + } else { + cast.push(p); + } + }); + + renderCast(page, item, cast); + renderGuestCast(page, item, guestCast); if (item.PartCount && item.PartCount > 1) { page.querySelector('#additionalPartsCollapsible').classList.remove('hide'); @@ -1803,11 +1814,7 @@ function renderSpecials(page, item, user) { }); } -function renderCast(page, item) { - const people = (item.People || []).filter(function (p) { - return p.Type === 'Actor'; - }); - +function renderCast(page, item, people) { if (!people.length) { page.querySelector('#castCollapsible').classList.add('hide'); return; @@ -1827,9 +1834,7 @@ function renderCast(page, item) { }); } -function renderGuestCast(page, item) { - const people = (item.People || []).filter(p => p.Type === 'GuestStar'); - +function renderGuestCast(page, item, people) { if (!people.length) { page.querySelector('#guestCastCollapsible').classList.add('hide'); return; diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index f364fed65c..5ebedb0b19 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -28,6 +28,7 @@ import LibraryMenu from '../../../scripts/libraryMenu'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../../components/backdrop/backdrop'; import { pluginManager } from '../../../components/pluginManager'; import { PluginType } from '../../../types/plugin.ts'; +import { EventType } from 'types/eventType'; const TICKS_PER_MINUTE = 600000000; const TICKS_PER_SECOND = 10000000; @@ -306,12 +307,14 @@ export default function (view) { let mouseIsDown = false; function showOsd(focusElement) { + Events.trigger(document, EventType.SHOW_VIDEO_OSD, [ true ]); slideDownToShow(headerElement); showMainOsdControls(focusElement); resetIdle(); } function hideOsd() { + Events.trigger(document, EventType.SHOW_VIDEO_OSD, [ false ]); slideUpToHide(headerElement); hideMainOsdControls(); mouseManager.hideCursor(); diff --git a/src/elements/emby-itemscontainer/ItemsContainer.tsx b/src/elements/emby-itemscontainer/ItemsContainer.tsx index 779e718271..abde788a5c 100644 --- a/src/elements/emby-itemscontainer/ItemsContainer.tsx +++ b/src/elements/emby-itemscontainer/ItemsContainer.tsx @@ -1,6 +1,8 @@ -import type { - LibraryUpdateInfo +import { + MediaType, + type LibraryUpdateInfo } from '@jellyfin/sdk/lib/generated-client'; +import { ApiClient } from 'jellyfin-apiclient'; import React, { type FC, useCallback, useEffect, useRef } from 'react'; import classNames from 'classnames'; import Box from '@mui/material/Box'; @@ -20,6 +22,7 @@ import MultiSelect from 'components/multiSelect/multiSelect'; import loading from 'components/loading/loading'; import focusManager from 'components/focusManager'; import type { ParentId } from 'types/library'; +import type { PlaybackStopInfo } from 'types/playbackStopInfo'; function disableEvent(e: MouseEvent) { e.preventDefault(); @@ -221,7 +224,7 @@ const ItemsContainer: FC = ({ ); const onLibraryChanged = useCallback( - (_e: Event, apiClient, data: LibraryUpdateInfo) => { + (_e: Event, _apiClient: ApiClient, data: LibraryUpdateInfo) => { if (eventsToMonitor.includes('seriestimers') || eventsToMonitor.includes('timers')) { // yes this is an assumption return; @@ -253,12 +256,12 @@ const ItemsContainer: FC = ({ ); const onPlaybackStopped = useCallback( - (_e: Event, apiClient, stopInfo) => { + (_e: Event, stopInfo: PlaybackStopInfo) => { const state = stopInfo.state; if ( state.NowPlayingItem - && state.NowPlayingItem.MediaType === 'Video' + && state.NowPlayingItem.MediaType === MediaType.Video ) { if (eventsToMonitor.includes('videoplayback')) { notifyRefreshNeeded(true); @@ -266,8 +269,8 @@ const ItemsContainer: FC = ({ } } else if ( state.NowPlayingItem - && state.NowPlayingItem.MediaType === 'Audio' - && eventsToMonitor.includes('videoplayback') + && state.NowPlayingItem.MediaType === MediaType.Audio + && eventsToMonitor.includes('audioplayback') ) { notifyRefreshNeeded(true); return; diff --git a/src/elements/emby-scroller/emby-scroller.scss b/src/elements/emby-scroller/emby-scroller.scss index ad2fdf54cf..47d6bdd609 100644 --- a/src/elements/emby-scroller/emby-scroller.scss +++ b/src/elements/emby-scroller/emby-scroller.scss @@ -26,3 +26,13 @@ margin-left: 1.2em; } } + +.no-padding { + [dir="ltr"] & { + padding-left: 0; + } + + [dir="rtl"] & { + padding-right: 0; + } +} diff --git a/src/elements/emby-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index 86a52c0787..2854a9dd09 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -138,9 +138,6 @@ function updateValues(isValueSet) { } if (range.markerContainerElement) { - if (!range.triedAddingMarkers) { - addMarkers(range); - } updateMarkers(range, value); } }); @@ -206,21 +203,6 @@ function setMarker(range, valueMarker, marker, valueProgress) { } function updateMarkers(range, currentValue) { - if (range.markerInfo?.length && range.markerElements?.length) { - for (let i = 0, length = range.markerElements.length; i < length; i++) { - if (range.markerInfo.length > i) { - setMarker(range, mapFractionToValue(range, range.markerInfo[i].progress), range.markerElements[i], currentValue); - } - } - } -} - -function addMarkers(range) { - range.markerInfo = []; - if (range.getMarkerInfo) { - range.markerInfo = range.getMarkerInfo(); - } - function getMarkerHtml(markerInfo) { let markerTypeSpecificClasses = ''; @@ -236,12 +218,25 @@ function addMarkers(range) { return ``; } - range.markerInfo.forEach(info => { - range.markerContainerElement.insertAdjacentHTML('beforeend', getMarkerHtml(info)); - }); + if (range.getMarkerInfo) { + range.markerInfo = range.getMarkerInfo(); - range.markerElements = range.markerContainerElement.querySelectorAll('.sliderMarker'); - range.triedAddingMarkers = true; + range.markerContainerElement.innerHTML = ''; + + range.markerInfo.forEach(info => { + range.markerContainerElement.insertAdjacentHTML('beforeend', getMarkerHtml(info)); + }); + + range.markerElements = range.markerContainerElement.querySelectorAll('.sliderMarker'); + } + + if (range.markerInfo?.length && range.markerElements?.length) { + for (let i = 0, length = range.markerElements.length; i < length; i++) { + if (range.markerInfo.length > i) { + setMarker(range, mapFractionToValue(range, range.markerInfo[i].progress), range.markerElements[i], currentValue); + } + } + } } EmbySliderPrototype.attachedCallback = function () { diff --git a/src/hooks/useFetchItems.ts b/src/hooks/useFetchItems.ts index 2d4f23f1a9..710b8863a6 100644 --- a/src/hooks/useFetchItems.ts +++ b/src/hooks/useFetchItems.ts @@ -28,36 +28,6 @@ import { LibraryViewSettings, ParentId } from 'types/library'; import { LibraryTab } from 'types/libraryTab'; import { Section, SectionApiMethod, SectionType } from 'types/sections'; -const fetchGetItem = async ( - currentApi: JellyfinApiContext, - parentId: ParentId, - options?: AxiosRequestConfig -) => { - const { api, user } = currentApi; - if (api && user?.Id && parentId) { - const response = await getUserLibraryApi(api).getItem( - { - userId: user.Id, - itemId: parentId - }, - { - signal: options?.signal - } - ); - return response.data; - } -}; - -export const useGetItem = (parentId: ParentId) => { - const currentApi = useApi(); - const isLivetv = parentId === 'livetv'; - return useQuery({ - queryKey: ['Item', parentId], - queryFn: ({ signal }) => fetchGetItem(currentApi, parentId, { signal }), - enabled: !!parentId && !isLivetv - }); -}; - const fetchGetItems = async ( currentApi: JellyfinApiContext, parametersOptions: ItemsApiGetItemsRequest, diff --git a/src/hooks/useItem.ts b/src/hooks/useItem.ts new file mode 100644 index 0000000000..ab72e1928f --- /dev/null +++ b/src/hooks/useItem.ts @@ -0,0 +1,41 @@ +import type { Api } from '@jellyfin/sdk/lib/api'; +import { getUserLibraryApi } from '@jellyfin/sdk/lib/utils/api/user-library-api'; +import { useQuery } from '@tanstack/react-query'; +import type { AxiosRequestConfig } from 'axios'; + +import { queryOptions } from 'utils/query/queryOptions'; + +import { useApi } from './useApi'; + +const fetchItem = async ( + api?: Api, + userId?: string, + itemId?: string, + options?: AxiosRequestConfig +) => { + if (!api) throw new Error('No API instance available'); + if (!itemId) throw new Error('No item ID provided'); + + const response = await getUserLibraryApi(api) + .getItem({ userId, itemId }, options); + return response.data; +}; + +export const getItemQuery = ( + api?: Api, + userId?: string, + itemId?: string +) => queryOptions({ + queryKey: [ 'User', userId, 'Items', itemId ], + queryFn: ({ signal }) => fetchItem(api, userId, itemId, { signal }), + staleTime: 1000, // 1 second + enabled: !!api && !!userId && !!itemId +}); + +export const useItem = ( + itemId?: string +) => { + const apiContext = useApi(); + const { api, user } = apiContext; + return useQuery(getItemQuery(api, user?.Id, itemId)); +}; diff --git a/src/hooks/useLegacyRouterSync.ts b/src/hooks/useLegacyRouterSync.ts index fe28df0905..c1af8fa310 100644 --- a/src/hooks/useLegacyRouterSync.ts +++ b/src/hooks/useLegacyRouterSync.ts @@ -2,8 +2,6 @@ import { Update } from 'history'; import { useLayoutEffect, useState } from 'react'; import type { History, Router } from '@remix-run/router'; -const normalizePath = (pathname: string) => pathname.replace(/^!/, ''); - interface UseLegacyRouterSyncProps { router: Router; history: History; @@ -20,8 +18,18 @@ export function useLegacyRouterSync({ router, history }: UseLegacyRouterSyncProp * implementation, so we need to remove the leading `!` from the pathname. React Router already removes the * hash for us. */ - if (update.location.pathname.startsWith('!')) { - history.replace(normalizePath(update.location.pathname), update.location.state); + if (update.location.pathname.startsWith('/!/')) { + history.replace( + { ...update.location, pathname: update.location.pathname.replace(/^\/!/, '') }, + update.location.state); + } else if (update.location.pathname.startsWith('/!')) { + history.replace( + { ...update.location, pathname: update.location.pathname.replace(/^\/!/, '/') }, + update.location.state); + } else if (update.location.pathname.startsWith('!')) { + history.replace( + { ...update.location, pathname: update.location.pathname.replace(/^!/, '') }, + update.location.state); } else if (!isSynced) { await router.navigate(update.location, { replace: true }); } diff --git a/src/index.html b/src/index.html index e406f11343..c445c30928 100644 --- a/src/index.html +++ b/src/index.html @@ -12,11 +12,6 @@ - - - - - @@ -116,6 +111,7 @@ z-index: 1; width: 0.8em; padding-left: env(safe-area-inset-left); + caret-color: transparent; } [dir="ltr"] .mainDrawerHandle { diff --git a/src/index.jsx b/src/index.jsx index 3d65bae640..362a62cfbe 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -193,21 +193,10 @@ async function onAppReady() { } } + // Apply custom CSS const apiClient = ServerConnections.currentApiClient(); if (apiClient) { - const updateStyle = (css) => { - let style = document.querySelector('#cssBranding'); - if (!style) { - // Inject the branding css as a dom element in body so it will take - // precedence over other stylesheets - style = document.createElement('style'); - style.id = 'cssBranding'; - document.body.appendChild(style); - } - style.textContent = css; - }; - - const style = fetch(apiClient.getUrl('Branding/Css')) + const brandingCss = fetch(apiClient.getUrl('Branding/Css')) .then(function(response) { if (!response.ok) { throw new Error(response.status + ' ' + response.statusText); @@ -219,41 +208,33 @@ async function onAppReady() { }); const handleStyleChange = async () => { - if (currentSettings.disableCustomCss()) { - updateStyle(''); - } else { - updateStyle(await style); + let style = document.querySelector('#cssBranding'); + if (!style) { + // Inject the branding css as a dom element in body so it will take + // precedence over other stylesheets + style = document.createElement('style'); + style.id = 'cssBranding'; + document.body.appendChild(style); } - const localCss = currentSettings.customCss(); - let localStyle = document.querySelector('#localCssBranding'); - if (localCss) { - if (!localStyle) { - // Inject the branding css as a dom element in body so it will take - // precedence over other stylesheets - localStyle = document.createElement('style'); - localStyle.id = 'localCssBranding'; - document.body.appendChild(localStyle); - } - localStyle.textContent = localCss; - } else if (localStyle) { - localStyle.textContent = ''; - } + const css = []; + // Only add branding CSS when enabled + if (!currentSettings.disableCustomCss()) css.push(await brandingCss); + // Always add user CSS + css.push(currentSettings.customCss()); + + style.textContent = css.join('\n'); }; - const handleUserChange = () => { - handleStyleChange(); - }; - - Events.on(ServerConnections, 'localusersignedin', handleUserChange); - Events.on(ServerConnections, 'localusersignedout', handleUserChange); + Events.on(ServerConnections, 'localusersignedin', handleStyleChange); + Events.on(ServerConnections, 'localusersignedout', handleStyleChange); Events.on(currentSettings, 'change', (e, prop) => { if (prop == 'disableCustomCss' || prop == 'customCss') { handleStyleChange(); } }); - style.then(updateStyle); + handleStyleChange(); } } diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 1399003ad9..ee226ebcc2 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -113,18 +113,22 @@ class HtmlAudioPlayer { let val = options.url; console.debug('playing url: ' + val); import('../../scripts/settings/userSettings').then((userSettings) => { - if (userSettings.selectAudioNormalization() == 'TrackGain' && options.item.LUFS != null) { - const dbGain = -18 - options.item.LUFS; - self.gainNode.gain.value = Math.pow(10, (dbGain / 20)); - console.debug('[HtmlAudioPlayer] Using track gain'); - } else if (userSettings.selectAudioNormalization() == 'AlbumGain' && options.mediaSource.albumLUFS != null) { - const dbGain = -18 - options.mediaSource.albumLUFS; - self.gainNode.gain.value = Math.pow(10, (dbGain / 20)); - console.debug('[HtmlAudioPlayer] Using album gain'); + let normalizationGain; + if (userSettings.selectAudioNormalization() == 'TrackGain') { + normalizationGain = options.item.NormalizationGain + ?? options.mediaSource.albumNormalizationGain; + } else if (userSettings.selectAudioNormalization() == 'AlbumGain') { + normalizationGain = + options.mediaSource.albumNormalizationGain + ?? options.item.NormalizationGain; + } + + if (normalizationGain) { + self.gainNode.gain.value = Math.pow(10, normalizationGain / 20); } else { self.gainNode.gain.value = 1; } - console.debug('gain:' + self.gainNode.gain.value); + console.debug('gain: ' + self.gainNode.gain.value); }).catch((err) => { console.error('Failed to add/change gainNode', err); }); diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 5f882a2383..f26e89cc92 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1250,14 +1250,14 @@ export class HtmlVideoPlayer { */ renderSsaAss(videoElement, track, item) { const supportedFonts = ['application/vnd.ms-opentype', 'application/x-truetype-font', 'font/otf', 'font/ttf', 'font/woff', 'font/woff2']; - const avaliableFonts = []; + const availableFonts = []; const attachments = this._currentPlayOptions.mediaSource.MediaAttachments || []; const apiClient = ServerConnections.getApiClient(item); attachments.forEach(i => { // we only require font files and ignore embedded media attachments like covers as there are cases where ffmpeg fails to extract those if (supportedFonts.includes(i.MimeType)) { // embedded font url - avaliableFonts.push(apiClient.getUrl(i.DeliveryUrl)); + availableFonts.push(apiClient.getUrl(i.DeliveryUrl)); } }); const fallbackFontList = apiClient.getUrl('/FallbackFont/Fonts', { @@ -1268,7 +1268,7 @@ export class HtmlVideoPlayer { const options = { video: videoElement, subUrl: getTextTrackUrl(track, item), - fonts: avaliableFonts, + fonts: availableFonts, workerUrl: `${appRouter.baseUrl()}/libraries/subtitles-octopus-worker.js`, legacyWorkerUrl: `${appRouter.baseUrl()}/libraries/subtitles-octopus-worker-legacy.js`, onError() { @@ -1307,10 +1307,10 @@ export class HtmlVideoPlayer { if (config.EnableFallbackFont) { apiClient.getJSON(fallbackFontList).then((fontFiles = []) => { fontFiles.forEach(font => { - const fontUrl = apiClient.getUrl(`/FallbackFont/Fonts/${font.Name}`, { + const fontUrl = apiClient.getUrl(`/FallbackFont/Fonts/${encodeURIComponent(font.Name)}`, { api_key: apiClient.accessToken() }); - avaliableFonts.push(fontUrl); + availableFonts.push(fontUrl); }); this.#currentAssRenderer = new SubtitlesOctopus(options); }); diff --git a/src/plugins/syncPlay/core/QueueCore.js b/src/plugins/syncPlay/core/QueueCore.js index 721ed7403a..d34f778840 100644 --- a/src/plugins/syncPlay/core/QueueCore.js +++ b/src/plugins/syncPlay/core/QueueCore.js @@ -227,14 +227,14 @@ class QueueCore { const serverId = apiClient.serverInfo().Id; + this.scheduleReadyRequestOnPlaybackStart(apiClient, 'startPlayback'); + const playerWrapper = this.manager.getPlayerWrapper(); playerWrapper.localPlay({ ids: this.getPlaylistAsItemIds(), startPositionTicks: startPositionTicks, startIndex: this.getCurrentPlaylistIndex(), serverId: serverId - }).then(() => { - this.scheduleReadyRequestOnPlaybackStart(apiClient, 'startPlayback'); }).catch((error) => { console.error(error); toast(globalize.translate('MessageSyncPlayErrorMedia')); diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 33e07e4f0c..542b535f88 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -94,6 +94,25 @@ function supportsAc3(videoTestElement) { return videoTestElement.canPlayType('audio/mp4; codecs="ac-3"').replace(/no/, ''); } +/** + * Checks if the device supports DTS (DCA). + * @param {HTMLVideoElement} videoTestElement The video test element + * @returns {boolean|null} _true_ if the device supports DTS (DCA). _false_ if the device doesn't support DTS (DCA). _null_ if support status is unknown. + */ +function canPlayDts(videoTestElement) { + // DTS audio is not supported by Samsung TV 2018+ (Tizen 4.0+) and LG TV 2020-2022 (webOS 5.0, 6.0 and 22) models + if (browser.tizenVersion >= 4 || (browser.web0sVersion >= 5 && browser.web0sVersion < 23)) { + return false; + } + + if (videoTestElement.canPlayType('video/mp4; codecs="dts-"').replace(/no/, '') + || videoTestElement.canPlayType('video/mp4; codecs="dts+"').replace(/no/, '')) { + return true; + } + + return null; +} + function supportsEac3(videoTestElement) { if (browser.tizen || browser.web0s) { return true; @@ -121,6 +140,15 @@ function supportsAc3InHls(videoTestElement) { return false; } +function supportsMp3InHls(videoTestElement) { + if (videoTestElement.canPlayType) { + return videoTestElement.canPlayType('application/x-mpegurl; codecs="avc1.64001E, mp4a.40.34"').replace(/no/, '') + || videoTestElement.canPlayType('application/vnd.apple.mpegURL; codecs="avc1.64001E, mp4a.40.34"').replace(/no/, ''); + } + + return false; +} + function canPlayAudioFormat(format) { let typeString; @@ -460,6 +488,7 @@ export default function (options) { } const canPlayAacVideoAudio = videoTestElement.canPlayType('video/mp4; codecs="avc1.640029, mp4a.40.2"').replace(/no/, ''); + const canPlayMp3VideoAudioInHls = supportsMp3InHls(videoTestElement); const canPlayAc3VideoAudio = supportsAc3(videoTestElement); const canPlayEac3VideoAudio = supportsEac3(videoTestElement); const canPlayAc3VideoAudioInHls = supportsAc3InHls(videoTestElement); @@ -474,12 +503,15 @@ export default function (options) { if (supportsMp3VideoAudio) { videoAudioCodecs.push('mp3'); + } - // PS4 fails to load HLS with mp3 audio - if (!browser.ps4) { - hlsInTsVideoAudioCodecs.push('mp3'); - } + // Safari supports mp3 with HLS, but only in mpegts container, and the supportsMp3VideoAudio will return false. + if (browser.safari || (supportsMp3VideoAudio && !browser.ps4)) { + hlsInTsVideoAudioCodecs.push('mp3'); + } + // Most browsers won't support mp3 with HLS, so this is usually false, but just in case. + if (canPlayMp3VideoAudioInHls) { hlsInFmp4VideoAudioCodecs.push('mp3'); } @@ -515,14 +547,9 @@ export default function (options) { hlsInFmp4VideoAudioCodecs.push('mp2'); } - let supportsDts = options.supportsDts; + let supportsDts = appSettings.enableDts() || options.supportsDts; if (supportsDts == null) { - supportsDts = browser.tizen || browser.web0sVersion || videoTestElement.canPlayType('video/mp4; codecs="dts-"').replace(/no/, '') || videoTestElement.canPlayType('video/mp4; codecs="dts+"').replace(/no/, ''); - - // DTS audio is not supported by Samsung TV 2018+ (Tizen 4.0+) and LG TV 2020-2022 (webOS 5.0, 6.0 and 22) models - if (browser.tizenVersion >= 4 || (browser.web0sVersion >= 5 && browser.web0sVersion < 23)) { - supportsDts = false; - } + supportsDts = canPlayDts(videoTestElement); } if (supportsDts) { @@ -535,7 +562,7 @@ export default function (options) { videoAudioCodecs.push('pcm_s24le'); } - if (options.supportsTrueHd) { + if (appSettings.enableTrueHd() || options.supportsTrueHd) { videoAudioCodecs.push('truehd'); } diff --git a/src/scripts/itemsByName.js b/src/scripts/itemsByName.js index 2cc62ee423..29f66400da 100644 --- a/src/scripts/itemsByName.js +++ b/src/scripts/itemsByName.js @@ -125,7 +125,7 @@ function renderSection(item, element, type) { ArtistIds: '', AlbumArtistIds: '', Limit: 10, - SortOrder: 'Descending,Desending,Ascending', + SortOrder: 'Descending,Descending,Ascending', SortBy: 'PremiereDate,ProductionYear,SortName' }, { shape: 'overflowPortrait', @@ -195,7 +195,7 @@ function renderSection(item, element, type) { PersonTypes: '', ArtistIds: '', AlbumArtistIds: '', - SortOrder: 'Descending,Desending,Ascending', + SortOrder: 'Descending,Descending,Ascending', SortBy: 'PremiereDate,ProductionYear,Sortname' }, { shape: 'overflowSquare', diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js index 725289e46e..5de1083b6e 100644 --- a/src/scripts/libraryMenu.js +++ b/src/scripts/libraryMenu.js @@ -30,6 +30,7 @@ import '../elements/emby-button/paper-icon-button-light'; import 'material-design-icons-iconfont'; import '../styles/scrollstyles.scss'; import '../styles/flexstyles.scss'; +import { EventType } from 'types/eventType'; function renderHeader() { let html = ''; @@ -703,6 +704,8 @@ const skinHeader = document.querySelector('.skinHeader'); let requiresUserRefresh = true; function setTabs (type, selectedIndex, builder) { + Events.trigger(document, EventType.SET_TABS, type ? [ type, selectedIndex, builder()] : []); + import('../components/maintabsmanager').then((mainTabsManager) => { if (type) { mainTabsManager.setTabs(viewManager.currentView(), selectedIndex, builder, function () { diff --git a/src/scripts/playlistViewer.js b/src/scripts/playlistViewer.js index 16844ee8c8..512a15281b 100644 --- a/src/scripts/playlistViewer.js +++ b/src/scripts/playlistViewer.js @@ -1,48 +1,74 @@ -import listView from '../components/listview/listview'; +import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; -function getFetchPlaylistItemsFn(itemId) { +import ServerConnections from 'components/ServerConnections'; +import listView from 'components/listview/listview'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; + +function getFetchPlaylistItemsFn(apiClient, itemId) { return function () { const query = { Fields: 'PrimaryImageAspectRatio', EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', - UserId: ApiClient.getCurrentUserId() + UserId: apiClient.getCurrentUserId() }; - return ApiClient.getJSON(ApiClient.getUrl(`Playlists/${itemId}/Items`, query)); + return apiClient.getJSON(apiClient.getUrl(`Playlists/${itemId}/Items`, query)); }; } -function getItemsHtmlFn(itemId) { +function getItemsHtmlFn(playlistId, isEditable = false) { return function (items) { return listView.getListViewHtml({ - items: items, + items, showIndex: false, - showRemoveFromPlaylist: true, playFromHere: true, action: 'playallfromhere', smallIcon: true, - dragHandle: true, - playlistId: itemId + dragHandle: isEditable, + playlistId }); }; } -function init(page, item) { +async function init(page, item) { + const apiClient = ServerConnections.getApiClient(item.ServerId); + const api = toApi(apiClient); + + let isEditable = false; + const { data } = await getPlaylistsApi(api) + .getPlaylistUser({ + playlistId: item.Id, + userId: apiClient.getCurrentUserId() + }) + .catch(err => { + // If a user doesn't have access, then the request will 404 and throw + console.info('[PlaylistViewer] Failed to fetch playlist permissions', err); + return { data: {} }; + }); + isEditable = !!data.CanEdit; + const elem = page.querySelector('#childrenContent .itemsContainer'); elem.classList.add('vertical-list'); elem.classList.remove('vertical-wrap'); - elem.enableDragReordering(true); - elem.fetchData = getFetchPlaylistItemsFn(item.Id); - elem.getItemsHtml = getItemsHtmlFn(item.Id); + elem.enableDragReordering(isEditable); + elem.fetchData = getFetchPlaylistItemsFn(apiClient, item.Id); + elem.getItemsHtml = getItemsHtmlFn(item.Id, isEditable); +} + +function refresh(page) { + page.querySelector('#childrenContent').classList.add('verticalSection-extrabottompadding'); + page.querySelector('#childrenContent .itemsContainer').refreshItems(); } function render(page, item) { if (!page.playlistInit) { page.playlistInit = true; - init(page, item); + init(page, item) + .finally(() => { + refresh(page); + }); + } else { + refresh(page); } - - page.querySelector('#childrenContent').classList.add('verticalSection-extrabottompadding'); - page.querySelector('#childrenContent .itemsContainer').refreshItems(); } const PlaylistViewer = { diff --git a/src/scripts/settings/appSettings.js b/src/scripts/settings/appSettings.js index 4d96c1eed6..e767730988 100644 --- a/src/scripts/settings/appSettings.js +++ b/src/scripts/settings/appSettings.js @@ -132,6 +132,44 @@ class AppSettings { return toBoolean(this.get('limitSupportedVideoResolution'), false); } + /** + * Get or set preferred transcode audio codec in video playback. + * @param {string|undefined} val - Preferred transcode audio codec or undefined. + * @return {string} Preferred transcode audio codec. + */ + preferredTranscodeVideoAudioCodec(val) { + if (val !== undefined) { + return this.set('preferredTranscodeVideoAudioCodec', val); + } + return this.get('preferredTranscodeVideoAudioCodec') || ''; + } + + /** + * Get or set 'Enable DTS' state. + * @param {boolean|undefined} val - Flag to enable 'Enable DTS' or undefined. + * @return {boolean} 'Enable DTS' state. + */ + enableDts(val) { + if (val !== undefined) { + return this.set('enableDts', val.toString()); + } + + return toBoolean(this.get('enableDts'), false); + } + + /** + * Get or set 'Enable TrueHD' state. + * @param {boolean|undefined} val - Flag to enable 'Enable TrueHD' or undefined. + * @return {boolean} 'Enable TrueHD' state. + */ + enableTrueHd(val) { + if (val !== undefined) { + return this.set('enableTrueHd', val.toString()); + } + + return toBoolean(this.get('enableTrueHd'), false); + } + set(name, value, userId) { const currentValue = this.get(name, userId); localStorage.setItem(this.#getKey(name, userId), value); diff --git a/src/strings/ar.json b/src/strings/ar.json index 96ef73e722..b8d9cabd13 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -197,7 +197,7 @@ "HeaderSelectTranscodingPathHelp": "تصفح أو أدخل المسار الذي ترغب أن يُستخدم لملفات التشفير البيني. يجب أن يكون هذا المجلد قابل للكتابة فيه.", "HeaderSendMessage": "أرسل رسالة", "HeaderServerSettings": "إعدادات الخادم", - "HeaderSetupLibrary": "ضبط مكتبة المحتوى الخاصة بك", + "HeaderSetupLibrary": "ضبط مكاتب المحتوى الخاصة بك", "HeaderSortBy": "ترتيب حسب", "HeaderSortOrder": "تسلسل الترتيب", "HeaderSpecialEpisodeInfo": "معلومات الحلقة الخاصة", @@ -255,7 +255,7 @@ "LabelCollection": "المجموعة", "LabelCommunityRating": "تقييم الجمهور", "LabelContentType": "نوع المحتوى", - "LabelCountry": "البلد", + "LabelCountry": "البلد/المنطقة", "LabelCurrentPassword": "كلمة السر الحالية", "LabelCustomCertificatePath": "مسار شهادة SSL المخصص", "LabelCustomCertificatePathHelp": "مسار ملف PKCS # 12 يحتوي على شهادة ومفتاح خاص لتمكين دعم TLS على مجال مخصص.", @@ -527,7 +527,7 @@ "MessagePasswordResetForUsers": "تم إعادة تعيين كلمات المرور للمستخدمين التاليين. يمكنهم الآن تسجيل الدخول باستخدام رموز الـPIN التي تم استخدامها لإعادة الضبط.", "MessagePleaseEnsureInternetMetadata": "الرجاء التأكد من أن إمكانية إنزال واصفات البيانات من الإنترنت ممكنة.", "MessagePluginConfigurationRequiresLocalAccess": "لضبط هذا البرنامج المساعد ، يرجى تسجيل الدخول إلى الخادم المحلي الخاص بك مباشرة.", - "MessagePluginInstallDisclaimer": "تحذير: تنصيب الملحقات التي بناها أعضاء مجتمع Jellyfin هي طريقة رائعة لتحسين متعة استخدام Jellyfin عن طريق أضافة مزايا وخدمات الجديدة. ولكن تنصيب ملحقات من مصادر ثالثة تحمل بعظ الخطورة.\nقبل تثبيت الملحقات، نرجو أخذ العلم بالآثار التي قد تلحقها بخادم Jellyfin الخاص بك، مثل أوقات أطولة لتمشيط مكتبتك، والعمليات الخلفية الإضافية وتقليل استقرار نظامك.", + "MessagePluginInstallDisclaimer": "تحذير: تنصيب مكونات إضافية من مصادر طرف ثالث تحمل بعض المخاطر. قد تتضمن بعض البرمجيات الضارة، وقد تتغير في أي وقت. فقط قم بتنصيب المكونات الإضافية من مصدر تثق به، يرجى أخذ العلم بالآثار المحتملة التي قد تلحقها، مثل أوقات أطول لتمشيط مكتبتك، والعمليات الخلفية الإضافية.", "MessageReenableUser": "أنظر أدناه لإعادة التفعيل", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "مكان الوسائط التالي سيزال من مكتبة Jellyfin الخاصة بك", "MessageUnableToConnectToServer": "لم نستطع الاتصال إلى الخادم المختار في الوقت الحالي. الرجاء التأكد من أنه يعمل ثم المحاولة مرة أخرى.", @@ -1085,7 +1085,7 @@ "Record": "سجل", "RecentlyWatched": "شاهدت مؤخرا", "Rate": "معدل", - "QuickConnectAuthorizeSuccess": "تمت الموافقة على الطلب", + "QuickConnectAuthorizeSuccess": "تمت المصادقة على الجهاز بنجاح!", "QuickConnectAuthorizeCode": "أدخل الرمز {0} لتسجيل الدخول", "QuickConnectActivationSuccessful": "تم التفعيل بنجاح", "Quality": "الجودة", @@ -1553,7 +1553,7 @@ "LabelColorPrimaries": "الألوان الأساسية", "HeaderSyncPlayPlaybackSettings": "التشغيل", "HeaderNewRepository": "مستودع جديد", - "DirectPlayHelp": "الملف المصدر متوافق تمامًا مع هذا العميل ، وتستقبل الجلسة الملف بدون تعديلات.", + "DirectPlayHelp": "الملف المصدر متوافق تمامًا مع هذا العميل والجلسة تستقبل الملف بدون تعديلات.", "LabelDashboardTheme": "قالب لوحة تحكم الخادم", "LabelTonemappingParamHelp": "ضبط خوارزمية تعيين النغمة.‌ القيم الموصى بها والافتراضية هي NaN. اتركه فارغًا بشكل عام.", "LabelTonemappingParam": "معلمة تعيين النغمة", @@ -1564,7 +1564,7 @@ "LabelAutomaticallyAddToCollection": "إضافة إلى المجموعة تلقائيا", "Console": "وحدة التحكم", "Casual": "غير رسمي", - "AllowTonemappingHelp": "يمكن أن يؤدي تعيين النغمة إلى تحويل النطاق الديناميكي لمقاطع الفيديو من HDR إلى SDR مع الحفاظ على تفاصيل الصورة والألوان. هذه بينات مهمة جدًا لتمثيل المشهد الأصلي بشكل وفي للمقطع ألأصلي. حاليًا يعمل هذا ألاعداد فقط مع مقاطع فيديو HDR10 أو HLG. يتطلب هذا ألأعداد وقت تشغيل OpenCL أو CUDA.", + "AllowTonemappingHelp": "يمكن أن يؤدي تعيين النغمة إلى تحويل النطاق الديناميكي لمقاطع الفيديو من HDR إلى SDR مع الحفاظ على تفاصيل الصورة والألوان. هذه بينات مهمة جدًا لتمثيل المشهد الأصلي بشكل وفي للمقطع ألأصلي. حاليًا يعمل هذا ألاعداد فقط مع مقاطع فيديو HDR10 أو HLG. يتطلب هذا ألأعداد وقت تشغيل GPGPU.", "RefFramesNotSupported": "الإطارات المرجعية غير مدعومة", "InterlacedVideoNotSupported": "الفيديو المتشابك غير مدعوم", "AnamorphicVideoNotSupported": "لا يتم دعم الفيديو ذي الصورة المشوهة", @@ -1663,9 +1663,9 @@ "MediaInfoVideoRangeType": "نوع نطاق الفيديو", "LabelVideoRangeType": "نوع نطاق الفيديو", "VideoRangeTypeNotSupported": "نوع نطاق الفيديو غير مدعوم", - "LabelVppTonemappingContrastHelp": "تطبيق كسب التباين في تعيين نغمة VPP. القيم الموصى بها والافتراضية هي 1.2 و 1.", + "LabelVppTonemappingContrastHelp": "تطبيق كسب التباين في تعيين نغمة VPP. القيم الموصى بها والافتراضية هي 1.", "LabelVppTonemappingContrast": "كسب تباين تعيين نغمة VPP", - "LabelVppTonemappingBrightnessHelp": "تطبيق كسب السطوع في تعيين نغمة VPP. كل من القيم الموصى بها والافتراضية هي 0.", + "LabelVppTonemappingBrightnessHelp": "تطبيق كسب السطوع في تعيين نغمة VPP. القيم الموصى بها والافتراضية هي 0.", "LabelVppTonemappingBrightness": "كسب سطوع رسم الخرائط VPP نغمة", "ScreenResolution": "تعيين مسار الترجمة على أساس البند السابق", "RememberSubtitleSelectionsHelp": "تعيين مسار الترجمة على أساس البند السابق.", @@ -1715,14 +1715,60 @@ "LogLevel.None": "لا شيئ", "MenuOpen": "أفتح القائمة", "AllowSegmentDeletion": "ألغاء القسم", - "AllowSegmentDeletionHelp": "ألغي الأقسام القديمة بعد أن يتم أرسالها للعميل. هذا يساهم بمنع أن يتم تخزين الملف ألذي تم أعادة ترميزه. ستعمل هذه الميزة فقط عندما يتم كبح الترميز. قم بأيقاف هذا الأعداد في حال واجهت مشاكل بتشغيل ألصوت أو ألفديو.", + "AllowSegmentDeletionHelp": "ألغي الأقسام القديمة بعد أن يتم تحميلها من قبل العميل. هذا يساهم بمنع أن يتم تخزين الملف ألذي تم أعادة ترميزه بالكامل. قم بأيقاف هذا الأعداد في حال واجهت مشاكل بتشغيل الصوت أو الفيديو.", "LabelThrottleDelaySeconds": "أكبح بعد", "LabelThrottleDelaySecondsHelp": "ألزمن بالثواني الذي سيتم بعده كبح أعادة الترميز. يجب أن يكون الزمن طويلاً بكفاية ليحافظ العميل على مخزون صحي. يجب أن يكون كفح أعادة الترميز مفعلاً ليعمل هذا ألاعاداد.", "LabelSegmentKeepSeconds": "الممدة للأحتفاظ على الشرائح", "LabelEnableAudioVbrHelp": "معدل البِت المتغير ينتج على جودة أفضل مقارنة بمعدل البت المتوسط، ولكن في بعض الحالات النادرة قد يسبب مشاكل في التخزين المؤقت والتوافق.", - "LabelSegmentKeepSecondsHelp": "الزمن بالثواني الذي يجب الاحتفاظ به للشرائح قبل أن يتم الكتابة فوقها. يجب أن يكون أكبر من \"بعد الخنق\". يعمل هذا ألأعداد فقط إذا كان حذف الشرائح مفعلًا.", + "LabelSegmentKeepSecondsHelp": "الزمن بالثواني الذي يجب الاحتفاظ به للشرائح بعد أن يتم تحميلها من قبل العميل. يعمل هذا ألأعداد فقط إذا كان حذف الشرائح مفعلًا.", "AiTranslated": "مترجمة من قبل ذكاء اسطناعي", "SelectAudioNormalizationHelp": "كسب الالبوم-تعديل الصوت لكل مسار لكي يعملون بنفس مستوى- كسب الالبوم- تعديل مستوى الصوت لكل المسارات في البوم واحد مع ابقاء على النطاق الديناميكي للألبوم.", "ButtonEditUser": "تعديل مستخدم", - "AllowSubtitleManagement": "اسمح لهذا المستخدم تعديل الترجمات" + "AllowSubtitleManagement": "اسمح لهذا المستخدم تعديل الترجمات", + "HeaderDeleteSeries": "حذف مسلسل", + "DeleteEntireSeries": "حذف {0} حلقات", + "DeleteSeries": "حذف المسلسل", + "HeaderEpisodesStatus": "حالة الحلقات", + "LabelSelectAudioNormalization": "تطبيع الصوت", + "DeleteEpisode": "حذف الحلقة", + "EnableLibrary": "إتاحة المكتبة", + "LabelSyncPlayNoGroups": "لا توجد مجموعات متاحة", + "DeleteName": "حذف {0}", + "LabelServerVersion": "نسخة الخادم", + "LabelWebVersion": "نسخة الويب", + "LabelBuildVersion": "نسخة الإصدار", + "SavePassword": "حفظ كلمة المرور", + "SubtitleBlack": "أسود", + "SubtitleWhite": "أبيض", + "UserMenu": "قائمة المستخدم", + "LabelScanBehavior": "سلوك المسح", + "PriorityHigh": "عالي", + "PriorityBelowNormal": "تحت الطبيعي", + "PriorityNormal": "طبيعي", + "PriorityAboveNormal": "فوق الطبيعي", + "LabelProcessPriority": "أولوية المعالجة", + "PriorityIdle": "خامل", + "PlaybackError.PLAYER_ERROR": "التشغيل فشل لخطأ في مشغل الوسائط.", + "Studio": "الأستيديو", + "SubtitleYellow": "أصفر", + "PlaybackError.NETWORK_ERROR": "التشغيل فشل لخطأ في الشبكة.", + "UnknownError": "حدث خطأ غير معلوم.", + "Select": "اختيار", + "SubtitleRed": "أحمر", + "PasswordRequiredForAdmin": "يجب توفر كلمة مرور لحسابات المسؤول.", + "SecondarySubtitles": "الترجمات الثانوية", + "PlaybackError.NO_MEDIA_ERROR": "غير قايل لإيجاد مصدر موثق للوسائط لللتشغيل.", + "PlaybackError.SERVER_ERROR": "التشغيل فشل لخطأ في الخادم.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "التشغيل فشل لأن الوسائط غير مدعومة من هذا العميل.", + "PlaybackError.NotAllowed": "تشغيل هذه الوسائط غير مسموح.", + "LabelJpegQuality": "جودة JPEG", + "SubtitleGreen": "أخضر", + "SearchResultsEmpty": "نأسف! لا يوجد نتاج لـ \"{0}\"", + "SubtitleLightGray": "رمادي فاتح", + "Short": "قصير", + "SubtitleGray": "رمادي", + "SubtitleBlue": "أزرق", + "AllowContentWithTagsHelp": "اعرض الوسائط التي تحتوي على الأقل واحدة من الاصناف المحددة.", + "AirPlay": "ايربلاي", + "Author": "الكاتب" } diff --git a/src/strings/ca.json b/src/strings/ca.json index b5ef25cc8c..7f3d8cc35a 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -749,7 +749,7 @@ "DashboardArchitecture": "Arquitectura: {0}", "DailyAt": "Diariament a {0}", "ClearQueue": "Esborra la cua", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "ButtonPlayer": "Reproductor", "ButtonCast": "Transmetre a dispositiu", "ApiKeysCaption": "Llista de les claus API activades actualment", @@ -864,7 +864,7 @@ "HeaderSelectFallbackFontPath": "Seleccioneu la ruta de la carpeta de fonts", "Yesterday": "Ahir", "Yes": "Si", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "XmlTvPathHelp": "Una ruta a un arxiu XMLTV. Jellyfin llegirà aquesta imatge i comprovar periòdicament si hi ha actualitzacions. Vostè és responsable de crear i actualitzar l'arxiu.", "XmlDocumentAttributeListHelp": "Aquests atributs s'apliquen a l'element arrel de cada resposta XML.", "Writers": "Escriptors", @@ -1335,7 +1335,7 @@ "LabelAudioChannels": "Canals d'àudio", "LabelAudioBitrate": "Taxa de bits d'àudio", "LabelAudioBitDepth": "Profunditat de bits d'àudio", - "LabelAppNameExample": "Exemple: Sickbeard, Sonarr", + "LabelAppNameExample": "Un nom llegible per persones per identificar les claus de l'API. Aquesta configuració no afectarà la funcionalitat.", "LabelAppName": "Nom de l'aplicació", "LabelAllowHWTranscoding": "Permetre la transcodificació de maquinari", "LabelAllowedRemoteAddressesMode": "La manera de filtre d'adreces IP remota", @@ -1863,5 +1863,25 @@ "DeleteLyrics": "Esborrar lletres", "HeaderNoLyrics": "No s'ha trobat cap lletra", "Lyrics": "Lletres", - "ViewLyrics": "Veure lletres" + "ViewLyrics": "Veure lletres", + "SavePassword": "Desar contrasenya", + "EnableDts": "Habilitar DTS (DCA)", + "PlaylistError.AddFailed": "S'ha produït un error en afegir a la llista de reproducció", + "PlaylistError.CreateFailed": "S'ha produït un error en crear la llista de reproducció", + "HeaderVideoAdvanced": "Vídeo Avançat", + "Author": "Autor", + "Colorist": "Colorista", + "CoverArtist": "Artista de portada", + "Creator": "Creador", + "Editor": "Editor", + "EnableDtsHelp": "Habiliteu-lo només si el vostre dispositiu és compatible amb DTS o està connectat a un receptor d'àudio compatible, en cas contrari, pot provocar un error de reproducció.", + "EnableTrueHd": "Habilitar TrueHD", + "EnableTrueHdHelp": "Habiliteu-lo només si el vostre dispositiu és compatible amb TrueHD o està connectat a un receptor d'àudio compatible, en cas contrari, pot provocar un error de reproducció.", + "Illustrator": "Il·lustrador", + "Translator": "Traductor", + "PlaylistPublic": "Permetre accés públic", + "PlaylistPublicDescription": "Permetre que qualsevol usuari registrat vegi aquesta llista de reproducció.", + "HeaderLyricDownloads": "Descàrregues de lletres", + "SaveLyricsIntoMediaFolders": "Desa la lletra a les carpetes multimèdia", + "SaveLyricsIntoMediaFoldersHelp": "Emmagatzemar les lletres al costat dels fitxers d'àudio permetrà gestionar-les més fàcilment." } diff --git a/src/strings/cs.json b/src/strings/cs.json index 7cf4c497cd..a3bd108f55 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -303,7 +303,7 @@ "HeaderSendMessage": "Poslat zprávu", "HeaderSeriesOptions": "Nastavení seriálu", "HeaderServerSettings": "Nastavení serveru", - "HeaderSetupLibrary": "Nastavení Vašich knihoven médií", + "HeaderSetupLibrary": "Nastavit knihovny médií", "HeaderSortBy": "Třídit dle", "HeaderSortOrder": "Pořadí třídění", "HeaderSpecialEpisodeInfo": "Infromace o speciální epizodě", @@ -362,7 +362,7 @@ "LabelAlbumArtists": "Alba umělce", "LabelAllowHWTranscoding": "Povolit hardwarové překódování", "LabelAppName": "Název aplikace", - "LabelAppNameExample": "Příklad: Sickbeard, Sonarr", + "LabelAppNameExample": "Čitelný název pro identifikaci klíčů k API. Toto nastavení nemá vliv na funkčnost.", "LabelArtists": "Umělci", "LabelArtistsHelp": "Více interpretů se odděluje pomocí středníku.", "LabelAudioLanguagePreference": "Preferovaný jazyk zvuku", @@ -1267,7 +1267,7 @@ "PathNotFound": "Cesta nebyla nalezena. Zkontrolujte, zda je platná a zkuste to znovu.", "WeeklyAt": "V {0} v {1}", "LastSeen": "Naposledy zobrazené {0}", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "LabelLibraryPageSizeHelp": "Počet položek k zobrazení na stránce knihovny. Nastavte na 0 pro vypnutí stránkování.", "LabelLibraryPageSize": "Velikost stránky knihovny", "LabelDeinterlaceMethod": "Metoda odstranění prokládání", @@ -1371,7 +1371,7 @@ "LabelIconMaxResHelp": "Maximální rozlišení ikon daných vlastností 'upnp:icon'.", "LabelAlbumArtMaxResHelp": "Maximální rozlišení obrázku v souboru dané vlastností 'upnp:albumArtURI'.", "Other": "Ostatní", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "UseDoubleRateDeinterlacingHelp": "Toto nastavení při odstranění prokládání zdvojnásobuje snímkovou frekvenci, aby výsledné video vypadalo stejně plynule, jako při přehrávání prokládaného obsahu v televizi.", "UseDoubleRateDeinterlacing": "Zdvojnásobit snímkovou frekvenci při odstranění prokládání", "LabelTonemappingParamHelp": "Pro ladění algoritmu mapování tónů. Doporučená a výchozí hodnota je NaN. Obecně je pole ponecháváno prázdné.", @@ -1719,7 +1719,7 @@ "Short": "Krátký film", "HeaderPerformance": "Výkon", "LabelParallelImageEncodingLimit": "Počet paralelních kódování obrázků", - "LabelParallelImageEncodingLimitHelp": "Maximální počet kódování obrázků, které mohou běžet zároveň. Nastavením na 0 bude limit nastaven dle parametrů systému.", + "LabelParallelImageEncodingLimitHelp": "Maximální počet kódování obrázků, které mohou běžet zároveň. Nastavením na 0 bude limit nastaven dle počtu jader CPU.", "LabelEnableAudioVbr": "Povolit kódování zvuku VBR", "LabelEnableAudioVbrHelp": "Proměnlivý bitový tok (VBR) nabízí lepší poměr mezi kvalitou a průměrným bitovým tokem, ale někdy může způsobit dodatečné načítání či problémy s kompatibilitou.", "Select": "Vybrat", @@ -1867,5 +1867,32 @@ "HeaderDeleteLyrics": "Odstranit texty písní", "HeaderNoLyrics": "Žádné texty písní nebyly nalezeny", "Lyrics": "Texty písní", - "ViewLyrics": "Zobrazit texty písní" + "ViewLyrics": "Zobrazit texty písní", + "SavePassword": "Uložit heslo", + "PlaylistError.AddFailed": "Přidání do seznamu skladeb se nezdařilo", + "PlaylistError.CreateFailed": "Tvorba seznamu skladeb se nezdařila", + "EnableDts": "Povolit DTS (DCA)", + "EnableDtsHelp": "Povolte pouze pokud zařízení podporuje DTS nebo je připojeno ke kompatibilnímu AV receiveru, jinak by mohlo dojít k potížím s přehráváním.", + "EnableTrueHd": "Povolit TrueHD", + "EnableTrueHdHelp": "Povolte pouze pokud zařízení podporuje TrueHD nebo je připojeno ke kompatibilnímu AV receiveru, jinak by mohlo dojít k potížím s přehráváním.", + "HeaderVideoAdvanced": "Pokročilé video", + "PlaylistPublic": "Povolit veřejný přístup", + "PlaylistPublicDescription": "Tento seznam skladeb bude možné zobrazit i nepřihlášeným uživatelům.", + "HeaderLyricDownloads": "Stažení textů písní", + "SaveLyricsIntoMediaFolders": "Uložit texty písní do složek s médii", + "SaveLyricsIntoMediaFoldersHelp": "Uložení textů písní spolu se zvukovými souboru je snazší pro správu.", + "Author": "Autor", + "Colorist": "Kolorista", + "CoverArtist": "Obálka", + "Creator": "Tvůrce", + "Editor": "Editor", + "Illustrator": "Ilustrátor", + "Inker": "Inker", + "Letterer": "Lettrista", + "Penciller": "Výtvarník", + "Translator": "Překladatel", + "LibraryScanFanoutConcurrencyHelp": "Maximální počet souběžných úloh skenování knihovny. Nastavením na 0 bude počet dán počtem jader CPU. UPOZORNĚNÍ: Příliš vyskoý počet může způsobit problémy se síťovými souborými systémy. V takovém případě počet snižte.", + "LibraryScanFanoutConcurrency": "Maximální počet souběžných skenování knihovny", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Preferovaný audio kodek pro překódovaní při přehrávání videí", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Vybrat preferovaný audio kodek pro překódovaní při přehrávání videí. Pokud preferovaný kodek není podporován, server vybere jiný dostupný kodek." } diff --git a/src/strings/da.json b/src/strings/da.json index b46b385c0a..5e2c0eafd7 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -1186,7 +1186,7 @@ "LabelServerName": "Server navn", "LabelUserLoginAttemptsBeforeLockout": "Mislykkede loginforsøg før bruger lukkes ude", "ButtonAddImage": "Tilføj billede", - "AllowFfmpegThrottlingHelp": "Når en omkodning eller ompakning kommer langt nok foran den nuværende afspilningsposition, pauser processen så der forbruges færre ressourcer. Dette er mest brugbart når man ikke spoler ofte. Slå dette fra hvis du oplever problemer under afspilning.", + "AllowFfmpegThrottlingHelp": "Når en transkodning eller remux kommer langt nok foran den aktuelle afspilningsposition, skal du sætte processen på pause, så den bruger færre ressourcer. Dette er mest nyttigt, når du ser uden ofte at søge. Slå dette fra, hvis du oplever afspilningsproblemer.", "AllowFfmpegThrottling": "Begræns omkodninger", "AlbumArtist": "Album Kunstner", "Album": "Album", @@ -1300,7 +1300,7 @@ "YoutubeNotFound": "Video ikke fundet.", "ButtonCast": "Cast til enhed", "ClearQueue": "Ryd kø", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "ButtonUseQuickConnect": "Brug Quick Connect", "ButtonPlayer": "Afspiller", "Authorize": "Tillad", @@ -1842,5 +1842,19 @@ "MediaInfoElPresentFlag": "DV el forudindstillelses flag", "MediaInfoBlPresentFlag": "DV bl forudindstillelses flag", "LabelTonemappingMode": "Tone mapnings metode", - "TonemappingModeHelp": "Vælg tonemapnings metode. Hvis du oplever udsprængte højlys, prøv at skifte til RGB metoden." + "TonemappingModeHelp": "Vælg tonemapnings metode. Hvis du oplever udsprængte højlys, prøv at skifte til RGB metoden.", + "Author": "Forfatter", + "Colorist": "Farvelægger", + "ConfirmDeleteLyrics": "Sletning af disse tekster vil slette dem både fra filsystemet og dit mediebibliotek. Er du sikker på, at du vil fortsætte?", + "CoverArtist": "Omslagskunstner", + "Creator": "Skaber", + "Editor": "Redaktør", + "DeleteLyrics": "Slet sangtekster", + "ErrorDeletingLyrics": "Der opstod en fejl ved sletning af sangteksterne fra serveren. Kontroller, at Jellyfin har skriveadgang til mediemappen, og prøv igen.", + "EnableDts": "Aktiver DTS (DCA)", + "EnableDtsHelp": "Aktiver kun, hvis din enhed understøtter DTS eller er tilsluttet en kompatibel lydmodtager, ellers kan det medføre afspilningsfejl.", + "EnableTrueHd": "Aktiver TrueHD", + "EnableTrueHdHelp": "Aktiver kun, hvis din enhed understøtter TrueHD eller er tilsluttet en kompatibel lydmodtager, ellers kan det medføre afspilningsfejl.", + "HeaderDeleteLyrics": "Slet Sangtekster", + "HeaderLyricDownloads": "Sangtekst-downloads" } diff --git a/src/strings/de.json b/src/strings/de.json index 055fb5c8cb..c7c35fe5a6 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -406,7 +406,7 @@ "LabelAllowedRemoteAddresses": "Filter für externe IP-Adressen", "LabelAllowedRemoteAddressesMode": "Filtermodus für externe IP-Adressen", "LabelAppName": "Applikationsname", - "LabelAppNameExample": "Beispiel: Sickbeard, Sonarr", + "LabelAppNameExample": "Ein von Menschen lesbarer Name zur Identifizierung von API-Schlüsseln. Diese Einstellung hat keinen Einfluss auf die Funktionalität.", "LabelArtists": "Interpreten", "LabelArtistsHelp": "Trenne mehrere Künstler durch ein Semikolon.", "LabelAudioLanguagePreference": "Bevorzugte Audiosprache", @@ -1366,7 +1366,7 @@ "Poster": "Poster", "Photo": "Foto", "Other": "Sonstiges", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver Zeilenentflechtungs Filter (BWDIF)", "UseDoubleRateDeinterlacingHelp": "Diese Einstellung verwendet die Halbbildrate beim Deinterlacing, oft auch als Bob-Deinterlacing bezeichnet. Dabei wird die Bildrate des Videos verdoppelt, um eine vollständige Bewegung wie beim Betrachten eines Interlaced-Video auf einem Fernseher zu erzielen.", "UseDoubleRateDeinterlacing": "Verdoppelung der Bildfrequenz beim Deinterlacing", "LabelIconMaxResHelp": "Maximale Auflösung der Icons, die über die Eigenschaft 'upnp:icon' bereitgestellt wird.", @@ -1789,7 +1789,7 @@ "ButtonEditUser": "Editiere Benutzer", "DlnaMovedMessage": "Die DLNA-Funktion wurde in ein Plugin verschoben.", "DeleteName": "Löschen {0}", - "AllowSubtitleManagement": "Erlaube dem Nutzer Untertitel zu bearbeiten", + "AllowSubtitleManagement": "Erlaube diesem Nutzer Untertitel zu bearbeiten", "LabelUseReplayGainTagsHelp": "Audiodateien nach Replaygain-Tags durchsuchen statt den LUFS-Wert zu Berechnen. (Nutzt weniger Rechenleistung. Wird die \"LUFS Scan\" option überschreiben)", "LabelUseReplayGainTags": "ReplayGain-Tags Benutzen", "ChannelResolutionSD": "SD", @@ -1867,5 +1867,26 @@ "ErrorDeletingLyrics": "Es trat ein Fehler beim Löschen der Songtexte vom Server auf. Bitte stelle sicher, dass Jellyfin die notwendigen Zugriffsrechte besitzt.", "HeaderDeleteLyrics": "Songtexte löschen", "HeaderNoLyrics": "Keine Songtexte gefunden", - "ViewLyrics": "Songtexte ansehen" + "ViewLyrics": "Songtexte ansehen", + "Author": "Autor", + "CoverArtist": "Cover-Künstler", + "Creator": "Ersteller", + "Editor": "Bearbeiter", + "EnableTrueHdHelp": "Schalte dies nur ein wenn dein Gerät TrueHD unterstützt oder an einem kompatiblem audio Empfänger angeschlossen ist, andernfalls könnte es zu Widergabefehlern führen.", + "EnableDts": "DTS zulassen (DCA)", + "EnableDtsHelp": "Schalte dies nur ein, wenn dein Gerät DTS unterstützt oder mit einem kompatiblem audio Empfänger angeschlossen ist, andernfalls könnte es zu Widergabefehlern führen.", + "EnableTrueHd": "TrueHD zulassen", + "Illustrator": "Illustrator", + "HeaderLyricDownloads": "Lyrik Downloads", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Bevorzugter Transcode-Audiocodec bei der Videowiedergabe", + "Translator": "Übersetzer", + "LibraryScanFanoutConcurrency": "Parallele Bibliotheks-Scan-Aufgaben Limit", + "LibraryScanFanoutConcurrencyHelp": "Maximale Anzahl der parallelen Aufgaben während der Bibliotheksscans. Wenn Sie diesen Wert auf 0 setzen, wird eine Begrenzung auf der Grundlage der Kernanzahl Ihres Systems gewählt. WARNUNG: Wenn Sie diese Zahl zu hoch einstellen, kann es zu Problemen mit Netzwerkdateisystemen kommen; wenn Sie Probleme haben, senken Sie diese Zahl.", + "PlaylistError.AddFailed": "Fehler beim Hinzufügen zur Wiedergabeliste", + "PlaylistError.CreateFailed": "Fehler beim Erstellen der Wiedergabeliste", + "SavePassword": "Passwort speichern", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Wählen Sie den bevorzugten Audiocodec für die Transkodierung von Videoinhalten. Wenn der bevorzugte Codec nicht unterstützt wird, verwendet der Server den nächstbesten verfügbaren Codec.", + "PlaylistPublicDescription": "Erlauben Sie, dass diese Wiedergabeliste für jeden eingeloggten Benutzer sichtbar ist.", + "SaveLyricsIntoMediaFolders": "Liedtexte in Medienordnern speichern", + "SaveLyricsIntoMediaFoldersHelp": "Das Speichern von Liedtexten zusammen mit den Audiodateien ermöglicht eine einfachere Verwaltung." } diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 30b7b4bc2b..fc8d253ed2 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1196,7 +1196,7 @@ "HeaderSpecialEpisodeInfo": "Special Episode Info", "HeaderSortOrder": "Sort Order", "HeaderSortBy": "Sort By", - "HeaderSetupLibrary": "Setup your media libraries", + "HeaderSetupLibrary": "Set up your media libraries", "HeaderServerSettings": "Server Settings", "HeaderSeriesStatus": "Programmes Status", "HeaderSeriesOptions": "Programmes Options", @@ -1249,7 +1249,7 @@ "NoCreatedLibraries": "Seems like you haven't created any libraries yet. {0}Would you like to create one now?{1}", "AskAdminToCreateLibrary": "Ask an administrator to create a library.", "PlaybackErrorNoCompatibleStream": "This client isn't compatible with the media and the server isn't sending a compatible media format.", - "AllowFfmpegThrottlingHelp": "When a transcode or remux gets far enough ahead from the current playback position, pause the process so it will consume less resources. This is most useful when watching without seeking often. Turn this off if you experience playback issues.", + "AllowFfmpegThrottlingHelp": "When a transcode or remux gets far enough ahead from the current playback position, pause the process so it will consume fewer resources. This is most useful when watching without seeking often. Turn this off if you experience playback issues.", "AllowFfmpegThrottling": "Throttle Transcodes", "OnApplicationStartup": "On application startup", "EveryXHours": "Every {0} hours", @@ -1860,5 +1860,13 @@ "PlaybackError.SERVER_ERROR": "Playback failed due to a server error.", "PlaybackError.NotAllowed": "Playback of this media is not allowed.", "PlaybackError.RateLimitExceeded": "This media cannot be played at this time due to rate limits.", - "Lyric": "Lyric" + "Lyric": "Lyric", + "SavePassword": "Save Password", + "ViewLyrics": "View lyrics", + "ConfirmDeleteLyrics": "Deleting these lyrics will delete them from both the file system and your media library. Are you sure you wish to continue?", + "DeleteLyrics": "Delete lyrics", + "ErrorDeletingLyrics": "There was an error deleting the lyrics from the server. Please check that Jellyfin has write access to the media folder and try again.", + "HeaderDeleteLyrics": "Delete Lyrics", + "HeaderNoLyrics": "No lyrics found", + "Lyrics": "Lyrics" } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 12b9f692a0..842eff2391 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -27,7 +27,7 @@ "AllowContentWithTagsHelp": "Only show media with at least one of the specified tags.", "AllowSubtitleManagement": "Allow this user to edit subtitles", "AllowFfmpegThrottling": "Throttle Transcodes", - "AllowFfmpegThrottlingHelp": "When a transcode or remux gets far enough ahead from the current playback position, pause the process so it will consume less resources. This is most useful when watching without seeking often. Turn this off if you experience playback issues.", + "AllowFfmpegThrottlingHelp": "When a transcode or remux gets far enough ahead from the current playback position, pause the process so it will consume fewer resources. This is most useful when watching without seeking often. Turn this off if you experience playback issues.", "AllowSegmentDeletion": "Delete segments", "AllowSegmentDeletionHelp": "Delete old segments after they have been downloaded by the client. This prevents having to store the entire transcoded file on disk. Turn this off if you experience playback issues.", "LabelThrottleDelaySeconds": "Throttle after", @@ -57,6 +57,7 @@ "AsManyAsPossible": "As many as possible", "AspectRatio": "Aspect Ratio", "Audio": "Audio", + "Author": "Author", "Authorize": "Authorize", "AuthProviderHelp": "Select an authentication provider to be used to authenticate this user's password.", "Auto": "Auto", @@ -131,7 +132,7 @@ "ButtonUninstall": "Uninstall", "ButtonUseQuickConnect": "Use Quick Connect", "ButtonWebsite": "Website", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "CancelRecording": "Cancel recording", "CancelSeries": "Cancel series", "Casual": "Casual", @@ -151,6 +152,7 @@ "ClearQueue": "Clear queue", "ClientSettings": "Client Settings", "Collections": "Collections", + "Colorist": "Colorist", "ColorPrimaries": "Color primaries", "ColorSpace": "Color space", "ColorTransfer": "Color transfer", @@ -174,6 +176,8 @@ "CopyFailed": "Could not copy", "CopyStreamURL": "Copy Stream URL", "CopyStreamURLSuccess": "URL copied successfully.", + "CoverArtist": "Cover artist", + "Creator": "Creator", "CriticRating": "Critics rating", "Cursive": "Cursive", "DailyAt": "Daily at {0}", @@ -232,6 +236,7 @@ "DrmChannelsNotImported": "Channels with DRM will not be imported.", "DropShadow": "Drop Shadow", "Edit": "Edit", + "Editor": "Editor", "EditImages": "Edit images", "EditMetadata": "Edit metadata", "EditSubtitles": "Edit subtitles", @@ -246,6 +251,8 @@ "EnableDetailsBanner": "Details Banner", "EnableDetailsBannerHelp": "Display a banner image at the top of the item details page.", "EnableDisplayMirroring": "Display mirroring", + "EnableDts": "Enable DTS (DCA)", + "EnableDtsHelp": "Only enable if your device supports DTS or is connected to a compatible audio receiver, otherwise it may cause playback failure.", "EnableExternalVideoPlayers": "External video players", "EnableExternalVideoPlayersHelp": "An external player menu will be shown when starting video playback.", "EnableFasterAnimations": "Faster animations", @@ -267,6 +274,8 @@ "EnableThemeSongsHelp": "Play the theme songs in background while browsing the library.", "EnableThemeVideosHelp": "Play theme videos in the background while browsing the library.", "EnableTonemapping": "Enable Tone mapping", + "EnableTrueHd": "Enable TrueHD", + "EnableTrueHdHelp": "Only enable if your device supports TrueHD or is connected to a compatible audio receiver, otherwise it may cause playback failure.", "EncoderPresetHelp": "Pick a faster value to improve performance, or a slower value to improve quality.", "Ended": "Ended", "EndsAtValue": "Ends at {0}", @@ -417,6 +426,7 @@ "HeaderLibrarySettings": "Library Settings", "HeaderLiveTvTunerSetup": "Live TV Tuner Setup", "HeaderLoginFailure": "Login Failure", + "HeaderLyricDownloads": "Lyric Downloads", "HeaderMedia": "Media", "HeaderMediaFolders": "Media Folders", "HeaderMetadataSettings": "Metadata Settings", @@ -474,7 +484,7 @@ "HeaderSeriesOptions": "Series Options", "HeaderSeriesStatus": "Series Status", "HeaderServerAddressSettings": "Server Address Settings", - "HeaderSetupLibrary": "Setup your media libraries", + "HeaderSetupLibrary": "Set up your media libraries", "HeaderSortBy": "Sort By", "HeaderSortOrder": "Sort Order", "HeaderSpecialEpisodeInfo": "Special Episode Info", @@ -501,6 +511,7 @@ "HeaderUploadSubtitle": "Upload Subtitle", "HeaderUser": "User", "HeaderUsers": "Users", + "HeaderVideoAdvanced": "Video Advanced", "HeaderVideoQuality": "Video Quality", "HeaderVideos": "Videos", "HeaderVideoType": "Video Type", @@ -516,9 +527,11 @@ "Identify": "Identify", "IgnoreDts": "Ignore DTS (decoding timestamp)", "IgnoreDtsHelp": "Disabling this option may resolve some issues, e.g. missing audio on channels with separate audio and video streams.", + "Illustrator": "Illustrator", "Image": "Image", "Images": "Images", "ImportFavoriteChannelsHelp": "Only channels that are marked as favorite on the tuner device will be imported.", + "Inker": "Inker", "InstallingPackage": "Installing {0} (version {1})", "InstantMix": "Instant mix", "ItemCount": "{0} items", @@ -544,7 +557,7 @@ "LabelAllowedRemoteAddressesMode": "Remote IP address filter mode", "LabelAllowHWTranscoding": "Allow hardware transcoding", "LabelAppName": "App name", - "LabelAppNameExample": "Example: Sickbeard, Sonarr", + "LabelAppNameExample": "A human readable name for identifying API keys. This setting will not affect functionality.", "LabelArtists": "Artists", "LabelArtistsHelp": "Separate multiple artists with a semicolon.", "LabelAudioBitDepth": "Audio bit depth", @@ -553,6 +566,7 @@ "LabelAudioCodec": "Audio codec", "LabelAudioLanguagePreference": "Preferred audio language", "LabelSelectAudioNormalization": "Audio Normalization", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Preferred transcode audio codec in video playback", "LabelAudioSampleRate": "Audio sample rate", "LabelAuthProvider": "Authentication Provider", "LabelAutomaticallyAddToCollection": "Automatically add to collection", @@ -759,7 +773,7 @@ "LabelOriginalTitle": "Original title", "LabelOverview": "Overview", "LabelParallelImageEncodingLimit": "Parallel image encoding limit", - "LabelParallelImageEncodingLimitHelp": "Maximum amount of image encodings that are allowed to run in parallel. Setting this to 0 will choose a limit based on your system specs.", + "LabelParallelImageEncodingLimitHelp": "Maximum number of image encodings that are allowed to run in parallel. Setting this to 0 will choose a limit based on your systems core count.", "LabelParentalRating": "Parental rating", "LabelParentNumber": "Parent number", "LabelPassword": "Password", @@ -944,7 +958,10 @@ "LatestFromLibrary": "Recently Added in {0}", "LearnHowYouCanContribute": "Learn how you can contribute.", "LeaveBlankToNotSetAPassword": "You can leave this field blank to set no password.", + "Letterer": "Letterer", "LibraryAccessHelp": "Select the libraries to share with this user. Administrators will be able to edit all folders using the metadata manager.", + "LibraryScanFanoutConcurrency": "Parallel library scan tasks limit", + "LibraryScanFanoutConcurrencyHelp": "Maximum number of parallel tasks during library scans. Setting this to 0 will choose a limit based on your systems core count. WARNING: Setting this number too high may cause issues with network file systems; if you encounter problems lower this number.", "LimitSupportedVideoResolution": "Limit maximum supported video resolution", "LimitSupportedVideoResolutionHelp": "Use 'Maximum Allowed Video Transcoding Resolution' as maximum supported video resolution.", "List": "List", @@ -1230,6 +1247,7 @@ "PasswordResetProviderHelp": "Pick a password reset provider to be used when this user requests a password reset.", "PasswordSaved": "Password saved.", "PathNotFound": "The path could not be found. Please ensure the path is valid and try again.", + "Penciller": "Penciler", "People": "People", "PerfectMatch": "Perfect match", "Person": "Person", @@ -1257,6 +1275,10 @@ "PlayCount": "Play count", "Played": "Played", "PlayFromBeginning": "Play from beginning", + "PlaylistError.AddFailed": "Error adding to playlist", + "PlaylistError.CreateFailed": "Error creating playlist", + "PlaylistPublic": "Allow public access", + "PlaylistPublicDescription": "Allow this playlist to be viewed by any logged in user.", "Playlists": "Playlists", "PlayNext": "Play next", "PlayNextEpisodeAutomatically": "Play next episode automatically", @@ -1347,6 +1369,9 @@ "Saturday": "Saturday", "Save": "Save", "SaveChanges": "Save changes", + "SaveLyricsIntoMediaFolders": "Save lyrics into media folders", + "SaveLyricsIntoMediaFoldersHelp": "Storing lyrics next to audio files will allow them to be more easily managed.", + "SavePassword": "Save Password", "SaveRecordingNFO": "Save recording EPG metadata in NFO", "SaveRecordingNFOHelp": "Save metadata from EPG listings provider along side media.", "SaveRecordingImages": "Save recording EPG images", @@ -1366,6 +1391,7 @@ "Season": "Season", "SecondarySubtitles": "Secondary Subtitles", "SelectAdminUsername": "Please select a username for the admin account.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Select the preferred audio codec to transcode to for video content. If the preferred codec is not supported, the server will use the next best available codec.", "SelectServer": "Select Server", "SendMessage": "Send message", "Series": "Series", @@ -1472,6 +1498,7 @@ "TrackCount": "{0} tracks", "Trailers": "Trailers", "Transcoding": "Transcoding", + "Translator": "Translator", "Tuesday": "Tuesday", "TV": "TV", "TvLibraryHelp": "Review the {0}TV naming guide{1}.", @@ -1542,7 +1569,7 @@ "XmlTvNewsCategoriesHelp": "Programs with these categories will be displayed as news programs. Separate multiple with '|'.", "XmlTvPathHelp": "A path to a XMLTV file. Jellyfin will read this file and periodically check it for updates. You are responsible for creating and updating the file.", "XmlTvSportsCategoriesHelp": "Programs with these categories will be displayed as sports programs. Separate multiple with '|'.", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "Yes": "Yes", "Yesterday": "Yesterday", "HeaderSelectFallbackFontPath": "Select Fallback Font Folder Path", diff --git a/src/strings/es.json b/src/strings/es.json index 06d8d795cc..87b2ca3531 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -171,7 +171,7 @@ "GuestStar": "Estrella invitada", "Guide": "Guía", "GuideProviderSelectListings": "Seleccionar listados", - "H264CrfHelp": "El 'Factor de Velocidad Constante' (CRF) es el ajuste de calidad predeterminado para los codificadores x264 y x265. Puede establecer los valores entre 0 y 51, donde valores más bajos resultarían en una mejor calidad (a expensas de tamaños de archivo más altos). Los valores sanos están entre 18 y 28. El valor predeterminado para x264 es 23, y para x265 es 28, por lo que puede utilizar esto como punto de partida.", + "H264CrfHelp": "El 'Factor de Velocidad Constante' (CRF) es el ajuste de calidad predeterminado para los codificadores de software x264 y x265. Puede establecer los valores entre 0 y 51, donde valores más bajos resultarían en una mejor calidad (a expensas de tamaños de archivo más altos). Los valores sanos están entre 18 y 28. El valor predeterminado para x264 es 23, y para x265 es 28, por lo que puede utilizar esto como punto de partida. Los codificadores de hardware no usan estos ajustes.", "EncoderPresetHelp": "Elige un valor más rápido para mejorar el rendimiento o un valor más lento para mejorar la calidad.", "HDPrograms": "Programas en HD", "HardwareAccelerationWarning": "Activar la aceleración por hardware puede producir inestabilidades en algunos entornos. Asegúrate de que tu sistema operativo y tus controladores de vídeo están actualizados. Si tienes dificultades para reproducir los vídeos después de activar esto, tendrás que volver a poner este ajuste en None.", @@ -311,7 +311,7 @@ "HeaderSendMessage": "Enviar mensaje", "HeaderSeriesOptions": "Opciones de series", "HeaderServerSettings": "Ajustes del servidor", - "HeaderSetupLibrary": "Configure sus bibliotecas de medios", + "HeaderSetupLibrary": "Configure su biblioteca multimedia", "HeaderSortBy": "Ordenar por", "HeaderSortOrder": "Orden", "HeaderSpecialEpisodeInfo": "Información del episodio especial", @@ -374,7 +374,7 @@ "LabelAllowedRemoteAddresses": "Filtro de dirección IP remota", "LabelAllowedRemoteAddressesMode": "Modo de filtro de dirección IP remota", "LabelAppName": "Nombre de la aplicación", - "LabelAppNameExample": "Ejemplo: Sickbeard, Sonarr", + "LabelAppNameExample": "Un nombre leible por humanos para identificar llaves de API. Esta opcion no afectara funcionalidad. Ejemplo: Sickbeard, Sonarr", "LabelArtists": "Artistas", "LabelArtistsHelp": "Separar múltiples artistas utilizando punto y coma.", "LabelAudioLanguagePreference": "Idioma de audio preferido", @@ -1275,7 +1275,7 @@ "LabelLibraryPageSize": "Tamaño de la página de la biblioteca", "LabelLibraryPageSizeHelp": "Establece la cantidad de ítems a mostrar en una página de la biblioteca. Ponlo en 0 para desactivar la paginación.", "UnsupportedPlayback": "Jellyfin no puede desencriptar contenido protegido por DRM aunque intentará reproducirlo de todas formas. Algunos archivos pueden aparecer completamente negros debido a encriptación u otras características no soportadas, como títulos interactivos.", - "Yadif": "YADIF", + "Yadif": "Otro filtro de desentrelazado YADIF", "ButtonTogglePlaylist": "Lista de reproducción", "Filter": "Filtro", "New": "Nuevo", @@ -1363,7 +1363,7 @@ "Restart": "Reiniciar", "ResetPassword": "Reiniciar Contraseña", "Profile": "Perfil", - "Bwdif": "BWDIF", + "Bwdif": "Filtro de Desentrelazado de Bob Weaver", "UseDoubleRateDeinterlacing": "Duplicar el número de cuadros por segundo al desentrelazar", "Photo": "Fotografía", "MusicVideos": "Vídeos musicales", @@ -1708,7 +1708,7 @@ "PreferEmbeddedExtrasTitlesOverFileNames": "Prefiere títulos incrustados sobre nombres de archivo para extras", "LabelDummyChapterCountHelp": "Número máximo de imágenes de capítulos que se extraerán para cada archivo multimedia.", "LabelEnableAudioVbrHelp": "La tasa de bits variable ofrece una mejor relación entre calidad y tasa de bits promedio, pero en algunos casos raros puede causar problemas de almacenamiento de búfer y compatibilidad.", - "LabelParallelImageEncodingLimitHelp": "Cantidad máxima de codificaciones de imágenes que pueden ejecutarse en paralelo. Establecer esto en 0 elegirá un límite basado en las especificaciones de su sistema.", + "LabelParallelImageEncodingLimitHelp": "Cantidad máxima de codificaciones de imágenes que pueden ejecutarse en paralelo. Establecer esto en 0 elegirá un límite basado en la cantidad de nucleos (CPU) en su sistema.", "ResolutionMatchSource": "Coincidir fuente", "SubtitleMagenta": "Magenta", "SubtitleWhite": "Blanco", @@ -1801,7 +1801,7 @@ "LabelServerVersion": "Versión del servidor", "AllowMjpegEncoding": "Permitir codificación en formato MJPEG (utilizado durante la generación de trickplay)", "Trickplay": "Trickplay", - "LabelTrickplayAccel": "Habilitar aceleración por hardware", + "LabelTrickplayAccel": "Habilitar descodificación por hardware", "LabelScanBehavior": "Comportamiento de Escaneo", "ConfirmDeleteSeries": "Eliminar esta serie eliminará TODOS {0} episodios tanto del sistema de archivos como de tu biblioteca de medios. ¿Estás seguro de que deseas continuar?", "DeleteEntireSeries": "Eliminar {0} Episodios", @@ -1827,8 +1827,69 @@ "PlaybackError.SERVER_ERROR": "La reproducción falló por un error del servidor.", "PlaybackError.NotAllowed": "La reproducción de este medio no está permitida.", "PlaybackError.RateLimitExceeded": "Este medio no puede reproducirse en este momento debído a límites.", - "EnableLibrary": "Activar la librería", - "EnableLibraryHelp": "Desactivando la biblioteca hará que no sea visible para ningún usuario.", - "ConfirmDeleteLyrics": "Borrando estas letras también las borrará tanto del sistema de ficheros como de tu librería de medios. ¿Estás seguro de que deseas continuar?", - "DeleteLyrics": "Borrar letras" + "EnableLibrary": "Activar la biblioteca", + "EnableLibraryHelp": "Desactivar la biblioteca hará que no sea visible para ningún usuario.", + "ConfirmDeleteLyrics": "Borrando estas letras también las borrará tanto del sistema de ficheros como de tu biblioteca de medios. ¿Estás seguro de que deseas continuar?", + "DeleteLyrics": "Borrar letras", + "HeaderNoLyrics": "No se han encontrado letras", + "ErrorDeletingLyrics": "Ha ocurrido un error al borrar las letras del servidor. Por favor asegúrate que Jellyfin tiene permisos de escritura para la carpeta de medios e inténtalo otra vez.", + "HeaderDeleteLyrics": "Borrar letras", + "Lyrics": "Letras", + "LabelTrickplayAccelEncodingHelp": "Actualmente solo disponible en QSV y VAAPI, esta opción no tiene ningún efecto en otros métodos de aceleración por hardware.", + "LabelProcessPriorityHelp": "Configurar esto más bajo o alto determinará cómo la CPU priorizará el proceso de generación de ffmpeg para trickplay en relación con otros procesos. Si notas bajadas de rendimiento mientras las imágenes de trickplay se generan pero no quieres parar su generación por completo, intenta reducir tanto esto como el número de hilos.", + "EncodingFormatHelp": "Selecciona la codificación de vídeo a la que Jellyfin debe transcodificar. Jellyfin usará codificación por software cuando la aceleración por hardware para el formato seleccionado no esté disponible. La codificación H264 siempre estará habilitada.", + "NonBlockingScan": "No bloqueante - encola la generación, después devuelve", + "BlockingScan": "Bloqueante - encola la generación, el escaneo se bloquea hasta que termine", + "LabelTrickplayAccelEncoding": "Habilitar la codificación MJPEG por hardware", + "PriorityHigh": "Alto", + "LabelScanBehaviorHelp": "El comportamiento por defecto es no bloqueante, que añadirá los medios a la biblioteca antes de que la generación trickplay se complete. El comportamiento bloqueante se asegurará de que los archivos de trickplay hayan sido generados antes de que los medios se añadan a la biblioteca, pero hará los escaneos significativamente más largos.", + "PriorityBelowNormal": "Más bajo de lo normal", + "LabelProcessPriority": "Prioridad de procesos", + "PriorityIdle": "Libre", + "LabelImageInterval": "Intervalo de imágenes", + "LabelAllowContentWithTags": "Permitir items con etiquetas", + "ViewLyrics": "Ver letras", + "PriorityAboveNormal": "Superior a lo normal", + "PriorityNormal": "Normal", + "SavePassword": "Guardar contraseña", + "LabelTileWidth": "Anchura de pieza", + "LabelTileHeight": "Altura de pieza", + "LabelTileHeightHelp": "Máximo número de imágenes por pieza en la dirección Y.", + "LabelJpegQuality": "Calidad JPEG", + "ExtractTrickplayImagesHelp": "Las imágenes de trickplay son similares a las de los capítulos, excepto por que se distribuyen a lo largo del contenido y se usan para mostrarse como una previsualización mientras te mueves por el vídeo.", + "LabelImageIntervalHelp": "Intervalo de tiempo (ms) entre cada nueva imagen de trickplay.", + "LabelWidthResolutions": "Resoluciones de anchura", + "LabelQscale": "Qscale", + "LabelJpegQualityHelp": "La calidad de compresión JPEG para las imágenes de trickplay.", + "LabelExtractTrickplayDuringLibraryScan": "Extraer imágenes para trickplay durante el escaneo de la biblioteca", + "LabelTileWidthHelp": "Máximo número de imágenes por pieza en la dirección X.", + "LabelQscaleHelp": "La escala de calidad de imágenes de la salida de ffmpeg, siendo 2 la mayor calidad y 31 la peor.", + "LabelTrickplayThreads": "Hilos FFmpeg", + "LabelTrickplayThreadsHelp": "El número de hilos para pasar al argumento '-threads' de ffmpeg.", + "LabelWidthResolutionsHelp": "Lista separada por comas de las anchuras (px) en las que se generarán las imágenes de trickplay. Todas las imágenes se generarán proporcionalmente a la fuente, así que una anchura de 320 en un vídeo 16:9 acabará sobre 320x180.", + "OptionExtractTrickplayImage": "Habilitar la extracción de imágenes de trickplay", + "LabelExtractTrickplayDuringLibraryScanHelp": "Generar imágenes de trickplay cuando los vídeos se importan durante el escaneo de la biblioteca. De lo contrario se extraerán durante la tarea programada de extracción de imágenes de trickplay. Si la generación es no bloqueante esto no afectará al tiempo que la biblioteca tarda en escanearse.", + "Author": "Autor", + "LibraryScanFanoutConcurrencyHelp": "Numero maximo de tareas de escaneos en librerias paralelas. Marcar esta opcion en 0 escogera un limite basado en la cantidad de nucleos (CPU) en sus sistema. ADVERTENCIA: Marcar este numero demasiado alto puede causar problemas con sistemas de archivos de red; si encuentra problemas baje este numero.", + "LibraryScanFanoutConcurrency": "Limite de escaneos de tareas en librerias paralelas", + "Penciller": "Lapicista", + "PlaylistError.CreateFailed": "Error creando lista de reproduccion", + "PlaylistError.AddFailed": "Error agregando a lista de reproduccion", + "SaveLyricsIntoMediaFoldersHelp": "Almacenar letras junto a archivos de audio les permitira ser administradas mas facilmente.", + "Colorist": "Colorista", + "CoverArtist": "Caratula de Artista", + "Creator": "Creador", + "Editor": "Editor", + "Illustrator": "Ilustrador", + "Letterer": "Rotulador", + "Translator": "Traductor", + "EnableTrueHdHelp": "Solo habilitar si su dispositivo soporta TrueHD o esta conectado a receptor de audio compatible, de otra manera puede causar fallos de reproduccion.", + "EnableDts": "Habilitar DTS (DCA)", + "EnableDtsHelp": "Solo habilitar si su dispositivo soporta DTS o esta conectado a un receptor de audio compatible, de otra forma puede causar fallos de reproduccion.", + "EnableTrueHd": "Habilitar TrueHD", + "PlaylistPublic": "Permitir acceso publico", + "PlaylistPublicDescription": "Permitir que esta lista de reproduccion sea vista por cualquier usuario que este logueado.", + "HeaderLyricDownloads": "Descarga de letras", + "HeaderVideoAdvanced": "Video Avanzado", + "SaveLyricsIntoMediaFolders": "Guardar letras en carpeta de media" } diff --git a/src/strings/et.json b/src/strings/et.json index 19287de1da..9eb69e3ac4 100644 --- a/src/strings/et.json +++ b/src/strings/et.json @@ -285,7 +285,7 @@ "CustomDlnaProfilesHelp": "Loo kohandatud profiil uue seadme jaoks või tühista süsteemi profiil.", "ConfigureDateAdded": "Seadista, kuidas lisamise kuupäev kuvatakse juhtpaneeli meediakogu seadetes", "Banner": "Bänner", - "AllowTonemappingHelp": "Värvikaardistus võib muuta video dünaamilise ulatuse HDR -st SDR -ks, säilitades samal ajal pildi üksikasjad ja värvid, mis on algse stseeni kujutamisel väga oluline teave. Praegu töötab ainult 10-bitise HDR10, HLG ja DoVi videotega. See vajab vastavat OpenGL või CUDA käitusaega.", + "AllowTonemappingHelp": "Värvikaardistus võib muuta video dünaamilise ulatuse HDR -st SDR -ks, säilitades samal ajal pildi üksikasjad ja värvid, mis on algse stseeni kujutamisel väga oluline teave. Praegu töötab ainult 10-bitise HDR10, HLG ja DoVi videotega. See vajab vastavat GPGPU käitusaega.", "HeaderDirectPlayProfile": "Otse-esituse profiil", "HeaderContainerProfileHelp": "Konteineri profiilid näitavad seadme piiranguid teatud vormingute esitamisel. Kui kehtib piirang, meedium transkooditakse, isegi kui vorming on seadistatud otse-esituseks.", "HeaderCodecProfileHelp": "Koodeki profiilid näitavad seadme piiranguid konkreetsete koodekite esitamisel. Kui kehtivad piirangud, transkooditakse meedia, isegi kui koodek on seadistatud otse-esituseks.", @@ -1656,7 +1656,7 @@ "Select": "Vali", "EnableIntelLowPowerH264HwEncoder": "Luba Intel Low-Power H.264 riistvara kodeerija", "HeaderDummyChapter": "Peatükipildid", - "LabelSegmentKeepSecondsHelp": "Aeg sekundites, mille jooksul segmente tuleks hoida, enne kui need üle kirjutatakse. Peab olema suurem kui „Drossel pärast”. Töötab ainult siis, kui segmendi kustutamine on lubatud.", + "LabelSegmentKeepSecondsHelp": "Aeg sekundites, kui kaua segmente tuleks hoida, peale seda kui need on kliendi poolt alla laetud. Töötab ainult siis, kui segmendi kustutamine on lubatud.", "DeinterlaceMethodHelp": "Valige lahtipõimitud sisu tarkvara ümberkodeerimisel kasutatav lahtipõimimis meetod. Kui riistvaralist lahtipõimimist toetav riistvarakiirendus on lubatud, kasutatakse selle sätte asemel riistvaralist lahtipõimijat.", "EnableRewatchingNextUp": "Luba uuesti vaatamine Järgmises", "IntelLowPowerEncHelp": "Madala võimsusega kodeering võib hoida tarbetut CPU-GPU sünkroonimist. Linuxis tuleb need keelata, kui i915 HuC püsivara pole konfigureeritud.", @@ -1666,8 +1666,12 @@ "PreferSystemNativeHwDecoder": "Eelistage OS-i DXVA või VA-API riistvaradekoodereid", "AllowCollectionManagement": "Luba sellel kasutajal kogusid hallata", "AllowSegmentDeletion": "Kustuta segmendid", - "AllowSegmentDeletionHelp": "Kustuta vanad segmendid pärast nende kliendile saatmist. See hoiab ära kogu ümberkodeeritud faili kettale salvestamise. Töötab ainult siis, kui drossel on lubatud. Kui teil on taasesitusprobleeme, lülitage see välja.", + "AllowSegmentDeletionHelp": "Kustuta vanad segmendid pärast nende alla laadimist kliendi poolt. See hoiab ära kogu ümberkodeeritud faili kettale salvestamise. Lülita see välja, kui taasesitusega tekib probleeme.", "LabelThrottleDelaySeconds": "Drossel pärast", "LabelThrottleDelaySecondsHelp": "Aeg sekundites, mille järel transkooder pidurdatakse. Peab olema piisavalt suur, et klient säilitaks terve puhvri. Töötab ainult siis, kui drossel on lubatud.", - "LabelSegmentKeepSeconds": "Aeg hoida segmente" + "LabelSegmentKeepSeconds": "Aeg hoida segmente", + "Author": "Autor", + "BlockContentWithTagsHelp": "Peida meedia, millel on vähemalt üks antud silt.", + "ButtonEditUser": "Redigeeri kasutajat", + "AllowSubtitleManagement": "Luba sellel kasutajal subtiitreid muuta" } diff --git a/src/strings/fa.json b/src/strings/fa.json index 11fa9eab51..551be4c5c2 100644 --- a/src/strings/fa.json +++ b/src/strings/fa.json @@ -1605,7 +1605,7 @@ "EnableAudioNormalization": "معمول سازی صوت", "AllowCollectionManagement": "به این کاربر اجازه مدیریت مجموعه را بده", "AllowSegmentDeletion": "تکه ها را پاک کن", - "AllowSegmentDeletionHelp": "پاک کردن تکه های قدیمی را بعد از فرستادن به کلاینت. این کار از ذخیره کل فایل transcode شده بر روی هارد جلوگیری می‌ کند. این تنها زمانی کار می کند که throttling فعال باشد. درصورت مشکل در هنگام پخش این ویژگی را غیرفعال کنید.", + "AllowSegmentDeletionHelp": "پاک کردن تکه های قدیمی بعد از دریافت کلاینت. این کار از ذخیره کل فایل transcode شده بر روی هارد جلوگیری می‌ کند. این تنها زمانی کار می کند که throttling فعال باشد. درصورت مشکل در هنگام پخش این ویژگی را غیرفعال کنید.", "LogLevel.Error": "خطا", "LogLevel.Critical": "بحرانی", "LogLevel.None": "هیچکدام", @@ -1625,5 +1625,8 @@ "LogLevel.Information": "اطلاعات", "LogoScreensaver": "محافظ صفحه لوگو", "Localization": "محلی‌سازی", - "HeaderGuestCast": "بازیگران مهمان" + "HeaderGuestCast": "بازیگران مهمان", + "AirPlay": "پخش هوا", + "AllowContentWithTagsHelp": "فقط رسانه های دارای حداقل یکی از برچسب های مشخص شده را نشان بده.", + "AllowSubtitleManagement": "به این کاربر اجازه ویرایش زیرنویس بده" } diff --git a/src/strings/fi.json b/src/strings/fi.json index a84f21897c..6427a8f1c9 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1856,5 +1856,23 @@ "ExtractTrickplayImagesHelp": "Trickplay-kuvat ovat samankaltaisia kuin kappalekuvat, paitsi että ne ovat koko sisällön pituudelta ja niitä käytetään esikatseluna videota selattaessa.", "NonBlockingScan": "Ei-blokkaava - asettaa generoinnin jonoon ja palaa", "BlockingScan": "Blokkaava - asettaa generoinnin jonoon ja estää skannauksen ennen kuin se on valmis", - "LabelExtractTrickplayDuringLibraryScan": "Luo trickplay-kuvat kirjaston skannauksen yhteydessä" + "LabelExtractTrickplayDuringLibraryScan": "Luo trickplay-kuvat kirjaston skannauksen yhteydessä", + "PlaylistError.AddFailed": "Virhe soittolistaan lisättäessä", + "PlaylistError.CreateFailed": "Virhe soittolistaa luodessa", + "LibraryScanFanoutConcurrency": "Rinnakkaisten kirjastopäivityksien raja", + "Lyrics": "Sanoitukset", + "SavePassword": "Tallenna salasana", + "Author": "Tekijä", + "Colorist": "Koloristi", + "CoverArtist": "Kansitaiteilija", + "Creator": "Luoja", + "Illustrator": "Kuvittaja", + "Translator": "Kääntäjä", + "DeleteLyrics": "Poista sanoitukset", + "HeaderDeleteLyrics": "Poista sanoitukset", + "HeaderNoLyrics": "Sanoituksia ei löydy", + "ViewLyrics": "Näytä sanoitukset", + "HeaderLyricDownloads": "Sanoitusten lataaminen", + "SaveLyricsIntoMediaFolders": "Tallenna sanoitukset mediakansioon", + "PlaylistPublic": "Salli julkinen pääsy" } diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index be0bbab48e..20a80cfa43 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -6,7 +6,7 @@ "ButtonGotIt": "J'ai compris", "ButtonQuickStartGuide": "Guide de démarrage rapide", "ButtonSignOut": "Sign out", - "ConfirmDeleteItem": "La suppression de cet élément le supprimera à la fois du système de fichiers et de votre médiathèque. Êtes-vous sûr de vouloir continuer ?", + "ConfirmDeleteItem": "Supprimer cet élément l'effacera à la fois du système de fichiers et de votre médiathèque. Êtes-vous sûr de vouloir continuer?", "Delete": "Supprimer", "Disconnect": "Se déconnecter", "Download": "Télécharger", @@ -70,7 +70,7 @@ "WelcomeToProject": "Bienvenue dans Jellyfin !", "WizardCompleted": "C'est tout ce dont nous avons besoin pour le moment. Jellyfin a commencé à récolter les informations de votre bibliothèque de médias. Jetez un oeil à quelques unes de nos applications, puis cliquez sur Terminer pour consulter le Tableau de bord.", "Absolute": "Absolu", - "AccessRestrictedTryAgainLater": "L'accès est présentement limité. Veuillez réessayer plus tard.", + "AccessRestrictedTryAgainLater": "L'accès est présentement restreint. Veuillez réessayer plus tard.", "Actor": "Acteur", "AddToPlayQueue": "Ajouter à la file d'attente", "AddedOnValue": "Ajouté le {0}", @@ -88,7 +88,7 @@ "AllowMediaConversion": "Autoriser la conversion des médias", "AllowMediaConversionHelp": "Autoriser ou refuser l'accès à la fonctionnalité de conversion des médias.", "AllowOnTheFlySubtitleExtraction": "Autoriser l'extraction des sous-titres à la volée", - "AllowOnTheFlySubtitleExtractionHelp": "Les sous-titres intégrés peuvent être extraits des vidéos et distribués aux clients en texte brut pour éviter le transcodage. Sur certains systèmes, cela peut prendre du temps et arrêter la lecture de la vidéo pendant le processus d'extraction. Désactivez cette option pour graver les sous-titres avec un transcodage quand l'appareil ne les prend pas en charge nativement.", + "AllowOnTheFlySubtitleExtractionHelp": "Les sous-titres intégrés peuvent être extraits des vidéos et distribués aux clients en texte brut pour éviter le transcodage. Sur certains systèmes, cela peut prendre du temps et arrêter la lecture de la vidéo pendant le processus d'extraction. Désactivez cette option pour graver les sous-titres avec un transcodage quand l'appareil ne le supporte pas nativement.", "AllowRemoteAccess": "Autoriser les connexions à distance sur ce serveur Jellyfin", "AllowRemoteAccessHelp": "Si l'option est désactivée, toutes les connexions distantes seront bloquées.", "Artists": "Artistes", @@ -128,7 +128,7 @@ "BoxRear": "Dos de boîtier", "Browse": "Parcourir", "MessageBrowsePluginCatalog": "Explorer notre catalogue des plugins pour voir les plugins disponibles.", - "AllowHWTranscodingHelp": "Permet au récepteur TV de transcoder les flux à la volée. Cela peut aider à réduire le transcodage requis par le serveur .", + "AllowHWTranscodingHelp": "Permet au syntoniseur TV de transcoder les streams à la volée. Cela peut aider à réduire le transcodage requis par le serveur .", "BurnSubtitlesHelp": "Détermine si le serveur doit incruster les sous-titres lors du transcodage vidéo. Éviter ceci améliorera les performances du serveur. Sélectionnez Auto pour incruster les formats basés sur l'image (par exemple, VobSub, PGS, SUB/IDX, etc.) ainsi que certains sous-titres ASS/SSA.", "ButtonAddMediaLibrary": "Ajouter une médiathèque", "ButtonAddScheduledTaskTrigger": "Ajouter un déclencheur", @@ -150,15 +150,15 @@ "AspectRatio": "Format de l'image", "AskAdminToCreateLibrary": "Demander un administrateur de créer une médiathèque.", "Artist": "Artiste", - "AllowFfmpegThrottlingHelp": "Quand un transcodage ou un remultiplexage a traité une période suffisamment longue depuis la position de lecture, le processus sera interrompu afin d'économiser des ressources. Ceci est utile principalement lors de lectures continues. À désactiver si vous éprouvez des problèmes de lecture.", - "AllowFfmpegThrottling": "Limiter la vitesse de transcodage", + "AllowFfmpegThrottlingHelp": "Quand un transcodage ou un remultiplexage est suffisament en avance sur la position de lecture actuelle, le processus sera interrompu afin d'économiser des ressources. Ceci est utile principalement lors de lectures continues. À désactiver si vous éprouvez des problèmes de lecture.", + "AllowFfmpegThrottling": "Limiter le transcodage", "AlbumArtist": "Artiste de l'album", "Album": "Album", "AuthProviderHelp": "Sélectionner un fournisseur d'authentification pour authentifier le mot de passe de cet utilisateur.", "ButtonSyncPlay": "SyncPlay", "Default": "Par défaut", "DeathDateValue": "Mort: {0}", - "DatePlayed": "Date écoutée", + "DatePlayed": "Date d'écoute", "DateAdded": "Date d'ajout", "CriticRating": "Évaluation des critiques", "CopyStreamURLSuccess": "URL copié avec succès.", @@ -167,7 +167,7 @@ "Connect": "Connexion", "ConfirmEndPlayerSession": "Voulez-vous éteindre Jellyfin sur {0}?", "ConfirmDeletion": "Confirmer la suppression", - "ConfirmDeleteItems": "Supprimer ceux-ci les effacera du système de fichiers et votre médiathèque. Êtes-vous sûr de vouloir continuer?", + "ConfirmDeleteItems": "Supprimer ces éléments les effaceront du disque et de votre médiathèque. Êtes-vous sûr de vouloir continuer?", "ConfirmDeleteImage": "Effacer l'image?", "ClientSettings": "Paramètres du client", "ChannelNumber": "Numéro de canal", @@ -186,7 +186,7 @@ "ButtonShutdown": "Éteindre", "ButtonSend": "Envoyer", "ButtonSelectDirectory": "Sélectionner le répertoire", - "ButtonScanAllLibraries": "Analyser toutes les médiathèques", + "ButtonScanAllLibraries": "Scanner toutes les médiathèques", "ButtonRevoke": "Révoquer", "ButtonResume": "Reprendre la lecture", "ButtonResetEasyPassword": "Remettre à nouveau le code NIP Facile", @@ -215,7 +215,7 @@ "LabelVideo": "Vidéo", "DashboardArchitecture": "Architecture : {0}", "DashboardOperatingSystem": "Système d'exploitation : {0}", - "ConfigureDateAdded": "Définissez la façon dont les métadonnées de la date d’ajout sont déterminées dans le tableau de bord > Bibliothèques > Paramètres NFO", + "ConfigureDateAdded": "Définissez la façon dont la métadonnée \"Date d'ajout\" est déterminée dans le Tableau de bord > Bibliothèques > Paramètres NFO", "Composer": "Compositeur(trice)", "CommunityRating": "Évaluation de la communauté", "ColorTransfer": "Transfert de couleur", @@ -234,9 +234,9 @@ "Episodes": "Épisodes", "Episode": "Épisode", "Ended": "Terminé", - "EnableThemeSongsHelp": "Jouer les bandes sonores en arrière-plan pendant la navigation de la médiathèque.", - "EnableStreamLoopingHelp": "À activer si le contenu de la diffusion en continu ne contient que quelques secondes de données et doit être rafraîchi sans arrêt. Ne pas activer cette option sans raison car elle peut causer des problèmes.", - "EnableStreamLooping": "Lecture en boucle des diffusions en direct", + "EnableThemeSongsHelp": "Jouer les chansons thème en arrière-plan pendant la navigation de la médiathèque.", + "EnableStreamLoopingHelp": "Activer cette option si les streams en direct ne contiennent que quelques secondes de données et doivent être continuellement redemandés. Ne pas activer sans raison car cette option peut causer des problèmes.", + "EnableStreamLooping": "Lecture en boucle des streams en direct", "EnableQuickConnect": "Activer la connexion rapide sur ce serveur", "EnablePhotosHelp": "Les images seront détectées et affichées avec les autres fichiers multimédia.", "EnableExternalVideoPlayers": "Lecteurs vidéo externes", @@ -257,9 +257,9 @@ "HeaderApiKeys": "Clés API", "HeaderApiKey": "Clé API", "DeinterlaceMethodHelp": "Sélectionnez la méthode de désentrelacement à utiliser lorsque le logiciel transcode le contenu entrelacé. Lorsque l'accélération matérielle prenant en charge le désentrelacement matériel est activée, le désentrelaceur matériel sera utilisé à la place de ce paramètre.", - "DefaultSubtitlesHelp": "Les sous-titres seront chargés selon les marqueurs par défaut et forcé dans les métadonnées intégrées. Les langues préférées seront utilisées quand plusieurs options seront disponibles.", + "DefaultSubtitlesHelp": "Les sous-titres seront chargés selon les marqueurs par défaut et forcé dans les métadonnées intégrées. Les préférences de langues seront utilisées quand plusieurs options sont disponibles.", "DailyAt": "Tous les jours à {0}", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "ButtonPlayer": "Joueur", "ButtonCast": "Diffuser sur l'appareil", "ApiKeysCaption": "Liste des clés API actuellement activées", @@ -284,7 +284,7 @@ "HeaderAccessSchedule": "Programme d'accès", "HardwareAccelerationWarning": "L'activation de l'accélération matérielle peut provoquer une instabilité dans certains environnements. Assurez-vous que votre système d'exploitation et vos pilotes vidéo sont complètement à jour. Si vous avez des difficultés pour lire des vidéos après l'activation, vous devrez régler à nouveau ce paramètre sur « Aucun ».", "HDPrograms": "Programmes HD", - "H264CrfHelp": "Le ‘facteur de débit constant’ (CRF) est le paramètre de qualité par défaut pour les encodeurs x264 et x265. Vous pouvez définir les valeurs entre 0 et 51, où des valeurs inférieures entraîneraient une meilleure qualité (au prix de fichiers lourds). Les valeurs saines sont comprises entre 18 et 28. La valeur par défaut pour x264 est 23 et pour x265 est 28, vous pouvez donc l'utiliser comme point de départ.", + "H264CrfHelp": "Le ‘facteur de débit constant’ (CRF) est le paramètre de qualité par défaut pour les encodeurs logiciels x264 et x265. Vous pouvez définir les valeurs entre 0 et 51, où des valeurs inférieures entraîneraient une meilleure qualité (au prix de fichiers lourds). Les valeurs saines sont comprises entre 18 et 28. La valeur par défaut pour x264 est 23 et pour x265 est 28, vous pouvez donc l'utiliser comme point de départ. Les encodeurs matériels n'utilisent pas ces paramètres.", "GuideProviderLogin": "Connexion", "Guide": "Guide", "GroupVersions": "Regrouper les versions", @@ -312,15 +312,15 @@ "EveryNDays": "Tous les {0} jours", "EveryHour": "A chaque heure", "ErrorStartHourGreaterThanEnd": "La date de fin doit être postérieure à la date de début.", - "ErrorSavingTvProvider": "Une erreur est survenue lors de la sauvegarde du fournisseur TV. Assurez-vous qu'il est accessible et réessayez.", + "ErrorSavingTvProvider": "Une erreur est survenue lors de la sauvegarde du fournisseur télé. Assurez-vous qu'il est accessible et réessayez.", "ErrorPleaseSelectLineup": "Veuillez sélectionner une programmation et réessayer. Si aucune programmation n'est disponible, veuillez vérifier que vos identifiant, mot de passe et code postal sont corrects.", - "ErrorGettingTvLineups": "Une erreur est survenue lors du téléchargement des programmes TV. Assurez-vous que vos informations soient correctes et réessayez.", + "ErrorGettingTvLineups": "Une erreur est survenue lors du téléchargement des programmes télé. Assurez-vous que vos informations soient correctes et réessayez.", "ErrorDeletingItem": "Une erreur s'est produite lors de la suppression de l'élément du serveur. Vérifiez que Jellyfin a un accès en écriture au dossier multimédia et réessayez.", "ErrorAddingXmlTvFile": "Une erreur est survenue lors de l'accès au fichier XMLTV. Assurez-vous que le fichier existe et réessayez.", "ErrorAddingMediaPathToVirtualFolder": "Une erreur est survenue pendant l'ajout du chemin des médias. Veuillez vérifier que le chemin est valide et que Jellyfin peut y accéder.", "ErrorAddingListingsToSchedulesDirect": "Une erreur est survenue pendant l'ajout de la programmation avec votre compte Schedules Direct. Schedules Direct autorise uniquement un nombre limité de programmations par compte. Vous devez vous connecter au site Schedules Direct et supprimer d'autres programmations depuis votre compte avant de pouvoir réessayer.", "EncoderPresetHelp": "Choisissez une valeur plus rapide pour améliorer la performance, ou plus lente pour améliorer la qualité.", - "EnableThemeVideosHelp": "Lire les thèmes vidéos en arrière-plan en parcourant la médiathèque.", + "EnableThemeVideosHelp": "Jouer les génériques en arrière-plan en parcourant la médiathèque.", "EnableNextVideoInfoOverlayHelp": "À la fin d'une vidéo, afficher les informations sur la vidéo suivante dans la liste de lecture.", "EnableNextVideoInfoOverlay": "Voir les informations de la vidéo suivante pendant la lecture", "EnableHardwareEncoding": "Activer l'encodage matériel", @@ -362,9 +362,9 @@ "DisplayInMyMedia": "Afficher sur l’écran d’accueil", "Display": "Affichage", "Disc": "Disque", - "DirectStreaming": "Diffusion en continu directe", - "DirectStreamHelp2": "La puissance utilisée par la diffusion en continue directe dépend en général du profil audio. Seul le flux vidéo est sans perte.", - "DirectStreamHelp1": "Le flux vidéo est compatible avec l'appareil, mais utilise un format audio (DTS, Dolby TrueHD, etc.) ou un nombre de canaux audio incompatibles. Le média va être rempaqueté à la volée avant d'être diffusé sur l'appareil. Seul le flux audio va être transcodé.", + "DirectStreaming": "Streaming direct", + "DirectStreamHelp2": "La puissance nécéssaire pour le streaming directe dépend en général du profil audio. Seul le flux vidéo est sans perte.", + "DirectStreamHelp1": "Le stream vidéo est compatible avec l'appareil, mais utilise un format audio (DTS, Dolby TrueHD, etc.) ou un nombre de canaux audio incompatibles. La vidéo sera rempaqueté à la volée avant d'être envoyé à l'appareil. Seul le stream audio sera transcodé.", "DirectPlaying": "Lecture directe", "DeviceAccessHelp": "Ceci ne s'applique qu'aux appareils qui peuvent être identifiés de manière unique et n'empêchera pas l'accès par navigateur. Bloquer l'accès aux appareils par utilisateur empêchera l'utilisation de nouveaux appareils jusqu'à ce qu'ils soient approuvés ici.", "Descending": "Décroissant", @@ -388,7 +388,7 @@ "LabelDay": "Jour de la semaine", "LabelDateAdded": "Date d'ajout", "LabelCustomDeviceDisplayNameHelp": "Entrez un nom d'affichage personnalisé ou laissez vide pour utiliser le nom rapporté par l'appareil.", - "LabelCustomCssHelp": "Appliquer votre code CSS pour le thème/l'image de marque personnalisé à l'interface web.", + "LabelCustomCssHelp": "Appliquer votre code CSS personalisé pour le thème/branding de l'interface web.", "LabelCustomCss": "Code CSS personnalisé", "LabelCurrentStatus": "État actuel", "LabelCurrentPassword": "Mot de passe actuel", @@ -399,13 +399,13 @@ "LabelCollection": "Collection", "LabelChromecastVersion": "Version de Google Cast", "LabelChannels": "Chaînes", - "LabelCertificatePasswordHelp": "Si votre certificat nécessite un mot de passe, veuillez le saisir ici.", + "LabelCertificatePasswordHelp": "Si votre certificat nécessite un mot de passe, veuillez l'entrer ici.", "LabelCertificatePassword": "Mot de passe du certificat", "LabelCancelled": "Annulé", "LabelBirthYear": "Année de naissance", "LabelBirthDate": "Date de naissance", "LabelArtists": "Artistes", - "LabelAppNameExample": "Examples : Sickbeard, Sonarr", + "LabelAppNameExample": "Nom humainement lisible pour identifier les clés API. Ce paramètre n'affecte pas les fonctionnalités.", "LabelAppName": "Nom de l'application", "LabelAlbum": "Album", "LabelAirTime": "Heure de diffusion", @@ -501,7 +501,7 @@ "HeaderIdentificationHeader": "En-tête d'identification", "HeaderIdentificationCriteriaHelp": "Saisissez au moins un critère d'identification.", "HeaderIdentification": "Identification", - "HeaderGuideProviders": "Fournisseurs de données de guides TV", + "HeaderGuideProviders": "Fournisseurs de données des guides télé", "HeaderForKids": "Pour les enfants", "HeaderFetchImages": "Récupérer les images", "HeaderFetcherSettings": "Paramètres du récupérateur", @@ -542,17 +542,17 @@ "DoNotRecord": "Ne pas enregistrer", "HeaderDebugging": "Débogage et traçage", "HeaderContainerProfile": "Profile conteneur", - "EnableTonemapping": "Activer la correspondance de tonalité", + "EnableTonemapping": "Activer le mappage tonal", "EnableBlurHash": "Activer remplacements brouillés pour les images", "DisplayMissingEpisodesWithinSeasonsHelp": "Ceci doit aussi être activé pour les médiathèques télé dans la configuration serveur.", "InstantMix": "Mix instantanné", - "ImportFavoriteChannelsHelp": "Seul les chaînes favorites du syntoniseur seront importé.", + "ImportFavoriteChannelsHelp": "Seul les chaînes favorites du syntoniseur seront importées.", "HttpsRequiresCert": "Pour activer les connections sécurisées, il faut fournir un certificat SSL reconnu, tel Let's Encrypt. Fournissez un certificat ou désactivez les connections sécurisées.", "HeaderXmlSettings": "Options XML", "HeaderXmlDocumentAttributes": "Attributs de document XML", "HeaderXmlDocumentAttribute": "Attribut de document XML", - "HeaderUploadSubtitle": "téléverser des sous-titres", - "HeaderUploadImage": "téléverser une image", + "HeaderUploadSubtitle": "Uploader des sous-titres", + "HeaderUploadImage": "Uploader une image", "HeaderUpcomingOnTV": "Bientôt à la télé", "HeaderUninstallPlugin": "Désinstaller l'extension", "HeaderTunerDevices": "Syntoniseur", @@ -576,7 +576,7 @@ "HeaderOnNow": "Jouant maintenant", "HeaderNewApiKey": "Nouvelle clef d'API", "HeaderNetworking": "Protocoles IP", - "HeaderLiveTvTunerSetup": "Configuration syntoniseur télé en direct", + "HeaderLiveTvTunerSetup": "Configuration du syntoniseur télé en direct", "HeaderKodiMetadataHelp": "Pour (dés)activer les métadonnées NFO, modifiez une médiathèque et teouver la section \"Métadonnées\".", "LabelMetadataSavers": "Métadonnées", "HeaderInstantMix": "Mix instantané", @@ -591,7 +591,7 @@ "HeaderConfirmRevokeApiKey": "Révoquer la clef d'API", "HeaderCodecProfileHelp": "Les profils de codec indiquent les codecs supportés par un appareil. Si un codec n'est pas supporté, le média sera transcodé, même si ce codec est configuré pour la lecture directe.", "HeaderCastAndCrew": "Distribution et équipe", - "HeaderBranding": "Slogan", + "HeaderBranding": "Branding", "LabelAudioSampleRate": "Taux d’échantillonnage audio", "LabelAudioLanguagePreference": "Langue audio préférée", "LabelAudioCodec": "Codec audio", @@ -639,7 +639,7 @@ "ShowYear": "Montrer l'année", "ShowTitle": "Montrer le titre", "LabelDropImageHere": "Glisser l'image ici, ou cliquez pour parcourir vos fichiers.", - "LabelDownMixAudioScale": "Booster l'audio lors du downmix", + "LabelDownMixAudioScale": "Boost audio lors du downmixage", "LabelBitrate": "Débit binaire", "LabelDidlMode": "Mode DIDL", "LabelDeinterlaceMethod": "Méthode pour désentrelacer", @@ -701,7 +701,7 @@ "Small": "Petit", "SkipEpisodesAlreadyInMyLibraryHelp": "Les épisodes seront comparés en utilisant les saisons et les numéros d'épisodes, si disponibles.", "Schedule": "Planning", - "ScanLibrary": "Scanner la bibliothèque", + "ScanLibrary": "Scanner la médiathèque", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Ces paramètres s'appliquent également à toute lecture Google Cast démarrée par cet appareil.", "Subtitle": "Sous-titres", "Studios": "Studios", @@ -709,12 +709,12 @@ "Sports": "Sports", "LabelEmbedAlbumArtDidl": "Intégrer la couverture d'album dans le DIDL", "DisableCustomCss": "Désactiver le CSS personnalisé fourni par le serveur", - "LabelDisableCustomCss": "Désactiver le code CSS personnalisé pour theme/l'image de marque fournie par le serveur.", + "LabelDisableCustomCss": "Désactiver le code CSS personnalisé pour le thème/branding fournie par le serveur.", "HeaderContinueReading": "Continuer à lire", - "MusicVideos": "Vidéos musicales", + "MusicVideos": "Vidéoclips", "OptionBluray": "BD", "LabelEnableDlnaPlayTo": "Activer la fonction DLNA \"Play To\"", - "Engineer": "Ingénieur du son", + "Engineer": "Ingénieur de son", "Conductor": "Conducteur", "Casual": "Casuel", "LabelEnableDlnaPlayToHelp": "Détecte les appareils de votre réseau et offre la possibilité de les contrôler à distance.", @@ -728,13 +728,13 @@ "ErrorPlayerNotFound": "Aucun lecteur trouvé pour le média demandé.", "Console": "Console", "AgeValue": "({0} an(s))", - "MessagePasswordResetForUsers": "Les utilisateurs suivants ont vu leur mot de passe réinitialisé. Ils peuvent se connecter avec les codes PIN qui ont été utilisés pour faire la réinitialisation.", + "MessagePasswordResetForUsers": "Les utilisateurs suivants ont vu leur mot de passes réinitialisés. Ils peuvent se connecter avec les codes PIN qui ont été utilisés pendant la réinitialisation.", "MessageNothingHere": "Rien ici.", "MessageNoServersAvailable": "Aucun serveur n'a été trouvé par la découverte de serveur automatique.", "MessageNoRepositories": "Pas de dépôts.", "MessageNoPluginsInstalled": "Vous n'avez pas de plugins installés.", "MessageNoPluginConfiguration": "Ce plugin n'a pas de paramètres à configurer.", - "MessageNoNextUpItems": "Rien n'a été trouvé. Commencez à regarder vos émissions !", + "MessageNoNextUpItems": "Rien à continuer. Commencez à regarder vos émissions !", "MessageNoMovieSuggestionsAvailable": "Aucune suggestion de film n'est disponible. Commencez à regarder et noter vos films, pour avoir des recommandations.", "MessageNoGenresAvailable": "Utiliser des fournisseurs de métadonnées pour récupérer les genres depuis internet.", "MessageNoAvailablePlugins": "Aucun plugin disponible.", @@ -742,11 +742,11 @@ "MessageInvalidUser": "Nom d'utilisateur ou mot de passe invalide. Réessayer.", "MessageInvalidForgotPasswordPin": "Un code PIN invalide ou expiré a été saisi. Réessayer.", "MessageImageTypeNotSelected": "Sélectionner un type d'image dans le menu déroulant.", - "MessageImageFileTypeAllowed": "Seuls les fichiers JPEG et PNG sont pris en charge.", + "MessageImageFileTypeAllowed": "Seuls les fichiers JPEG et PNG sont supportés.", "MessageGetInstalledPluginsError": "Une erreur s'est produite lors de la récupération de la liste des plugins actuellement installés.", "MessageForgotPasswordFileCreated": "Le fichier suivant a été créé sur votre serveur et contient des instructions sur la marche à suivre", "MessageFileReadError": "Une erreur s'est produite lors de la lecture du fichier. Réessayer.", - "MessageEnablingOptionLongerScans": "L'activation de cette option peut entraîner des analyses de bibliothèque beaucoup plus longues.", + "MessageEnablingOptionLongerScans": "L'activation de cette option peut entraîner des scans de médiathèque beaucoup plus longues.", "MessageDownloadQueued": "Téléchargement en file d'attente.", "MessageDeleteTaskTrigger": "Es-tu sûr de vouloir supprimer ce déclencheur de tâche ?", "MessageCreateAccountAt": "Créez un compte sur {0}", @@ -757,7 +757,7 @@ "MessageConfirmRemoveMediaLocation": "Es-tu sûr de vouloir supprimer cet emplacement ?", "MessageConfirmRecordingCancellation": "Canceller l'enregistrement ?", "MessageConfirmDeleteTunerDevice": "Es-tu sûr de vouloir supprimer cet appareil ?", - "MessageConfirmDeleteGuideProvider": "Es-tu sûr de vouloir supprimer ce fournisseur de guide TV ?", + "MessageConfirmDeleteGuideProvider": "Es-tu sûr de vouloir supprimer ce fournisseur de guide télé ?", "MessageConfirmAppExit": "Veux-tu sortir ?", "MessageAreYouSureYouWishToRemoveMediaFolder": "Es-tu sûr de vouloir supprimer ce dossier multimédia ?", "MessageAreYouSureDeleteSubtitles": "Es-tu sûr de vouloir supprimer ce fichier de sous-titre ?", @@ -783,7 +783,7 @@ "MediaInfoChannels": "Chaînes", "MediaInfoBitDepth": "Profondeur de couleur", "MediaInfoAspectRatio": "Rapport de forme", - "LiveTV": "TV en direct", + "LiveTV": "Télé en direct", "MediaInfoBitrate": "Débit binaire", "MediaInfoForced": "Forcé", "MediaInfoTitle": "Titre", @@ -793,10 +793,10 @@ "MessageForgotPasswordInNetworkRequired": "Veuillez réessayer sur votre réseau local pour lancer la réinitialisation du mot de passe.", "LabelInNetworkSignInWithEasyPasswordHelp": "Utilisez le code PIN pour vous connecter sur votre réseau local. Votre mot de passe habituel ne sera nécessaire qu'à l'extérieur de du réseau local. Si le code PIN est vide, vous n'aurez pas besoin d'un mot de passe sur votre réseau local.", "LabelHDHomerunPortRange": "Plage de ports HDHomeRun", - "OptionEnableExternalContentInSuggestionsHelp": "Autoriser l'inclusion de bandes-annonces sur Internet et d'émissions de TV en direct dans le contenu suggéré.", + "OptionEnableExternalContentInSuggestionsHelp": "Autoriser l'inclusion de bandes-annonces sur Internet et d'émissions de télé en direct dans le contenu suggéré.", "OptionEnableExternalContentInSuggestions": "Activer le contenu externe dans les suggestions", "OptionEnableAccessToAllLibraries": "Activer l'accès à toutes les bibliothèques", - "OptionEnableAccessToAllChannels": "Activer l'accès à toutes les chaînes de TV", + "OptionEnableAccessToAllChannels": "Activer l'accès à toutes les chaînes", "OptionEnableAccessFromAllDevices": "Autoriser l'accès depuis tous les appareils", "OptionEmbedSubtitles": "Intégrer dans l'conteneur", "OptionDvd": "DVD", @@ -824,14 +824,14 @@ "OptionAllowRemoteSharedDevicesHelp": "Les appareils DLNA sont considérés comme partagés tant qu'un utilisateur ne commence pas à les contrôler.", "OptionAllowRemoteSharedDevices": "Autoriser le contrôle à distance des appareils partagés", "OptionAllowRemoteControlOthers": "Autoriser le contrôle à distance de d'autres utilisateurs", - "OptionAllowMediaPlaybackTranscodingHelp": "Limiter l'accès au transcodage peut entraîner des échecs de lecture dans les clients en raison de formats multimédias non pris en charge.", + "OptionAllowMediaPlaybackTranscodingHelp": "Limiter l'accès au transcodage peut entraîner des échecs de lecture sur les clients en raison de formats multimédias non supportés.", "OptionAllowMediaPlayback": "Autoriser la lecture multimédia", - "OptionAllowManageLiveTv": "Autoriser la gestion des enregistrements TV en direct", + "OptionAllowManageLiveTv": "Autoriser la gestion des enregistrements télé en direct", "OptionAllowLinkSharingHelp": "Seules les pages Web contenant des informations sur les médias sont partagées. Les fichiers multimédias ne sont jamais partagés publiquement. Les partages sont limités dans le temps et expireront après {0} jours.", "OptionAllowLinkSharing": "Autoriser le partage sur les réseaux sociaux", "OptionAllowContentDownloadHelp": "Les utilisateurs peuvent télécharger les médias pour les stocker sur leurs appareils. Ce n'est pas la même chose qu'une fonction de synchronisation. Les bibliothèques de livres nécessitent cette activation pour fonctionner correctement.", "OptionAllowContentDownload": "Autoriser les téléchargements des fichiers", - "OptionAllowBrowsingLiveTv": "Autoriser l'accès à la TV en direct", + "OptionAllowBrowsingLiveTv": "Autoriser l'accès à la télé en direct", "OptionAllowAudioPlaybackTranscoding": "Autoriser la lecture audio nécessitant un transcodage", "OptionAdminUsers": "Administrateurs", "Option3D": "3D", @@ -860,7 +860,7 @@ "Name": "Nom", "MySubtitles": "Mes sous-titres", "Mute": "Muet", - "MusicVideo": "Vidéo musical", + "MusicVideo": "Vidéoclip", "MusicLibraryHelp": "Consultez le {0}guide de dénomination de musique{1}.", "MusicArtist": "Artiste de musique", "MusicAlbum": "Album de musique", @@ -908,17 +908,17 @@ "MessagePlayAccessRestricted": "La lecture de ce contenu est restreinte. Contactez l'administrateur pour plus d'informations.", "Arranger": "Arrangeur", "AddToFavorites": "Ajouter aux favoris", - "EnableRewatchingNextUp": "Activer le re-visionnage dans \"La Prochaine\"", + "EnableRewatchingNextUp": "Activer le re-visionnage dans \"À suivre\"", "Digital": "Numérique", "Cursive": "Cursive", - "CopyFailed": "Me pouvait pas copier", - "Copy": "Copie", + "CopyFailed": "Impossible de copier", + "Copy": "Copier", "Copied": "Copié", "ButtonSpace": "Espace", "ButtonExitApp": "Ferme l'application", "ButtonClose": "Fermer", "ButtonBackspace": "Retour Arrière", - "LabelEnableRealtimeMonitorHelp": "Les modifications apportées aux fichiers seront traitées immédiatement sur les systèmes de fichiers pris en charge.", + "LabelEnableRealtimeMonitorHelp": "Les modifications apportées aux fichiers seront traitées immédiatement sur les systèmes de fichiers supportés.", "LabelEnableRealtimeMonitor": "Activer la surveillance en temps réel", "LabelEnableIP6Help": "Activez la fonctionnalité IPv6.", "LabelEnableIP6": "Activez IPv6", @@ -930,7 +930,7 @@ "LabelEnableDlnaServerHelp": "Autoriser les appareils UPnP de votre réseau à parcourir et à lire du contenu.", "LabelEnableDlnaServer": "Activer le serveur DLNA", "LabelEnableBlastAliveMessages": "Diffuser les messages 'vivante'", - "LabelDownMixAudioScaleHelp": "Amplifiez l'audio lors du sous-mixage. Une valeur de un préservera le volume d'origine.", + "LabelDownMixAudioScaleHelp": "Amplifier l'audio lors du downmix. Une valeur de 1 préservera le volume d'origine.", "LabelAutomaticallyAddToCollectionHelp": "Lorsqu'au moins 2 films ont le même nom de collection, ils seront automatiquement ajoutés à la collection.", "LabelAutomaticallyAddToCollection": "Ajouter automatiquement à la collection", "ItemDetails": "Détails de L'article", @@ -938,7 +938,7 @@ "HeaderSyncPlayTimeSyncSettings": "Synchronisation de L'heure", "HeaderSyncPlayPlaybackSettings": "Relecture", "GoogleCastUnsupported": "Google cast non supporté", - "EnableRewatchingNextUpHelp": "Activezr l'affichage des épisodes déjà regardés dans les sections \"La Prochaine\".", + "EnableRewatchingNextUpHelp": "Activer l'affichage des épisodes déjà regardés dans les sections \"À suivre\".", "MessageLeaveEmptyToInherit": "Laisser vide pour hériter des paramètres d'un item parent ou de la valeur par défaut globale.", "IgnoreDts": "Désactiver DTS (horodateur de décodage)", "IgnoreDtsHelp": "Désactiver cette option peu résoudre des problèmes, par exemple: canal audio manquant sur des chaînes ayant des flux audios et vidéos distincts.", @@ -951,8 +951,8 @@ "LabelEpisodeNumber": "Numéro d'épisode", "LabelEvent": "Évènement", "LabelEveryXMinutes": "Tous les", - "LabelExtractChaptersDuringLibraryScan": "Extraire les images des chapitres pendant l'actualisation de la médiathèque", - "LabelExtractChaptersDuringLibraryScanHelp": "Générer les images des chapitres lors de l'importation de vidéos pendant l'actualisation de la médiathèque. Sinon, elles seront extraites pendant la tâche planifiée des images des chapitres, permettant de terminer plus rapidement l'actualisation de la médiathèque.", + "LabelExtractChaptersDuringLibraryScan": "Extraire les images des chapitres pendant le scan de la médiathèque", + "LabelExtractChaptersDuringLibraryScanHelp": "Générer les images des chapitres lors de l'importation de vidéos pendant le scan de la médiathèque. Sinon, elles seront extraites pendant la tâche planifiée des images des chapitres, permettant de terminer plus rapidement l'actualisation de la médiathèque.", "LabelFailed": "Échoué", "LabelForgotPasswordUsernameHelp": "Saisissez votre nom d'utilisateur, si vous vous en souvenez.", "LabelImportOnlyFavoriteChannels": "Restreindre aux chaînes ajoutées aux favoris", @@ -977,12 +977,12 @@ "LabelFormat": "Format", "LabelFolder": "Dossier", "Experimental": "Expérimental", - "LabelStereoDownmixAlgorithm": "Algorithme de mixage réducteur en stéréo", + "LabelStereoDownmixAlgorithm": "Algorithme de downmixage en stéréo", "LabelHardwareAccelerationTypeHelp": "L'accélération matérielle nécessite une configuration supplémentaire.", "LabelHDHomerunPortRangeHelp": "Restreint la plage de ports UDP pour HDHomeRun à cette valeur. (La plage par défaut est 1024 - 65535).", "LabelHttpsPortHelp": "Le numéro de port TCP pour le serveur HTTPS.", "DownloadAll": "Tout télécharger", - "LabelMaxDaysForNextUpHelp": "Définir le nombre maximal de jours sans regarder une série avant qu'elle ne soit enlevée de la section « À suivre ».", + "LabelMaxDaysForNextUpHelp": "Définir le nombre maximal de jours sans regarder une série avant qu'elle ne soit enlevée de la section \"À suivre\".", "LabelLocalCustomCss": "Style CSS personnalisé s’appliquant à ce client seul. Désactiver le code CSS personnalisé fourni par le serveur pourrait s'avérer nécessaire.", "LabelMaxAudiobookResumeHelp": "Les titres seront assumés entièrement lus lorsque le temps restant est inférieur à cette valeur.", "LabelMaxMuxingQueueSizeHelp": "Nombre maximal de paquets pouvant être mis en mémoire tampon lors de l'initialisation des flux. Augmenter la valeur si des messages \"Trop de paquets en mémoire tampon pour le flux de sortie\" apparaissent dans les journaux FFmpeg. La valeur recommandée est 2048.", @@ -1000,7 +1000,7 @@ "LabelMaxBackdropsPerItem": "Nombre maximal d'images d'arrière-plan par élément", "LabelLineup": "Programmation", "LabelMatchType": "Type recherché", - "LabelMaxDaysForNextUp": "Nombre de jours maximal dans « À suivre »", + "LabelMaxDaysForNextUp": "Nombre de jours maximal dans \"À suivre\"", "LabelIsForced": "Forcé", "LabelInNetworkSignInWithEasyPassword": "Activer l'authentification locale avec un code Easy PIN", "LabelInternetQuality": "Qualité d'Internet", @@ -1052,7 +1052,7 @@ "LabelProfileCodecs": "Codecs", "LabelProtocolInfoHelp": "La valeur utilisée pour répondre aux requêtes « GetProtocolInfo » de l’appareil.", "Bold": "Gras", - "LabelTonemappingDesatHelp": "Applique la desaturation pour les points points forts qui dépassent ce niveau de luminosité. Plus la valeur est élevée, plus les informations de couleur seront préservées. Ce paramètre permet d’empêcher les couleurs super saturées en les tournant graduellement au blanc afin de produire une image plus naturelle, au détriment de la fidélité de couleurs. Les valeurs recommandées sont 0 et 0.5.", + "LabelTonemappingDesatHelp": "Applique la désaturation pour les points forts qui dépassent ce niveau de luminosité. Plus la valeur est élevée, plus les informations de couleur seront préservées. Ce paramètre permet d’empêcher les couleurs super saturées en les tournant graduellement au blanc afin de produire une image plus naturelle, au détriment de la fidélité de couleurs. Les valeurs recommandées sont 0 et 0.5.", "LabelTonemappingParamHelp": "Paramètre pour régler l’algorithme de tone-mapping. La valeur par défaut et recommandée est vide.", "LabelSyncPlayLeaveGroupDescription": "Désactiver SyncPlay", "LabelSyncPlayNewGroup": "Nouveau groupe", @@ -1132,7 +1132,7 @@ "LabelPostProcessorArguments": "Arguments de ligne de commande pour l’application de post-traitement", "EnableAudioNormalizationHelp": "La normalisation audio ajoutera un gain constant pour maintenir un niveau désiré (-18dB).", "EnableAudioNormalization": "Normalisation audio", - "LabelEnableLUFSScanHelp": "Les clients peuvent normaliser la lecture audio pour obtenir une intensité sonore égale parmi les pistes. Cela rendra les analyses de la bibliothèque plus longues et plus demandantes en ressources.", + "LabelEnableLUFSScanHelp": "Les clients peuvent normaliser la lecture audio pour obtenir une intensité sonore égale parmi les pistes. Cela rendra les scan de la médiathèque plus longues et plus demandantes en ressources.", "LabelParallelImageEncodingLimit": "Limite d’encodage d’image en parallèle", "LabelProtocolInfo": "Infos protocole", "LabelRecordingPath": "Chemin par défaut pour l’enregistrement", @@ -1183,7 +1183,7 @@ "LabelNumberOfGuideDays": "Nombre de jours de guide à télécharger", "LabelOpenclDeviceHelp": "Le périphérique OpenCL qui sera utilisé pour le « tone mapping » HDR. Le chiffre a gauche du point est le numéro de plateforme, et celui de droite est le numéro de périphérique sur la plateforme. La valeur par défaut est 0.0. Le fichier d’application FFmpeg prenant en charge l’accélération OpenCL est requis.", "LabelParentNumber": "Numéro parent", - "LabelParallelImageEncodingLimitHelp": "Nombre maximal d’encodages d’images qui peuvent être exécutés en parallèle. Une valeur de 0 entraînera une sélection automatique d’une limite selon les caractéristiques de votre système.", + "LabelParallelImageEncodingLimitHelp": "Nombre maximal d’encodages d’images qui peuvent être exécutés en parallèle. Une valeur de 0 entraînera une sélection automatique d’une limite selon le nombre de coeurs de votre système.", "LabelPasswordResetProvider": "Fournisseur de récupération de mot de passe", "LabelPlayDefaultAudioTrack": "Lire la piste audio par défaut peu importe la langue", "LabelPostProcessor": "Application de post-traitement", @@ -1248,7 +1248,7 @@ "Large": "Grand", "LabelWeb": "Réseau", "LabelUnstable": "Instable", - "LabelUserAgent": "Agent d'utilisateur", + "LabelUserAgent": "Agent utilisateur", "LabelTranscodingThreadCount": "Nombre de threads de transcodage", "LiveBroadcasts": "Diffusions en direct", "LabelVaapiDevice": "Appareil VA-API", @@ -1262,19 +1262,19 @@ "LabelZipCode": "Code postal", "LabelTriggerType": "Type de déclencheur", "LabelTranscodingThreadCountHelp": "Sélectionnez le nombre maximum de threads à utiliser lors du transcodage. La réduction du nombre de threads réduira l'utilisation du processeur, mais risque de ne pas convertir assez rapidement pour une expérience de lecture fluide.", - "LabelTunerIpAddress": "Adresse IP du tuner", + "LabelTunerIpAddress": "Adresse IP du syntoniseur", "LabelUserLoginAttemptsBeforeLockout": "Échec des tentatives de connexion avant que l'utilisateur ne soit verrouillé", "LogLevel.Debug": "Déboguer", "LogLevel.Information": "Information", "LogLevel.Error": "Erreur", "LogLevel.Critical": "Critique", "LabelXDlnaDoc": "ID de classe d'appareil", - "LabelTonemappingPeak": "Pic de mappage de tonalité", + "LabelTonemappingPeak": "Pic de mappage de tons", "LabelXDlnaCap": "ID de capacité de l'appareil", "LabelTranscodes": "Transcodages", - "LabelBackdropScreensaverIntervalHelp": "Le temps en secondes entre les différents arrière-plans lors de l'utilisation de l'écran de veille des arrière-plans.", + "LabelBackdropScreensaverIntervalHelp": "Temps en secondes entre les différents arrière-plans de l'écran de veille.", "LabelVideoResolution": "Résolution vidéo", - "LabelTunerType": "Type de tuner", + "LabelTunerType": "Type de syntoniseur", "LabelUserLibrary": "Librairie d'utilisateur", "LabelVaapiDeviceHelp": "Il s'agit du nœud de rendu utilisé pour l'accélération matérielle.", "Larger": "Plus grand", @@ -1294,11 +1294,11 @@ "SelectAudioNormalizationHelp": "Gain de piste - ajuste le volume de chaque piste pour qu'elles jouent au même niveau d'intensité. Gain d'album - ajuste le volume de toutes les pistes uniquement dans un album, conservant la plage dynamique de l'album.", "LabelTonemappingRange": "Plage de mappage de tons", "LabelTonemappingThreshold": "Seuil de mappage de tons", - "LabelTVHomeScreen": "Écran d'accueil du mode TV", + "LabelTVHomeScreen": "Écran d'accueil du mode télé", "LanNetworksHelp": "Liste d'adresses IP ou d'entrées IP/masque de réseau séparées par des virgules pour les réseaux qui seront prises en compte sur le réseau local lors de l'application des restrictions de bande passante. Si elles sont définies, toutes les autres adresses IP seront considérées comme se trouvant sur le réseau externe et seront soumises aux restrictions de bande passante externe. Si ce champ est laissé vide, seul le sous-réseau du serveur est considéré comme faisant partie du réseau local.", "LearnHowYouCanContribute": "Découvrez comment vous pouvez contribuer.", "Localization": "Localisation", - "LogLevel.Trace": "Tracer", + "LogLevel.Trace": "Trace", "LibraryAccessHelp": "Sélectionnez les bibliothèques à partager avec cet utilisateur. Les administrateurs pourront modifier tous les dossiers à l'aide du gestionnaire de métadonnées.", "LabelTrackNumber": "Numéro de piste", "LabelTonemappingThresholdHelp": "Les paramètres de l’algorithme de mappage de tons sont affinés pour chaque scène. Et un seuil permet de détecter si la scène a changé ou non. Si la distance entre la luminosité moyenne de l'image actuelle et la moyenne courante actuelle dépasse une valeur seuil, nous recalculerons la moyenne de la scène et la luminosité maximale. Les valeurs recommandées et par défaut sont 0,8 et 0,2.", @@ -1308,7 +1308,7 @@ "LabelUseReplayGainTagsHelp": "Scanne les fichiers audio pour des étiquettes « ReplayGain » et les utilise au lieu de calculer la valeur LUFS. (Utilise moins de ressources. Passe outre l'option du « scan LUFS »)", "DeleteName": "Supprimer {0}", "MediaInfoLevel": "Niveau", - "HeaderAllRecordings": "Tous les Enregistrements", + "HeaderAllRecordings": "Tous les enregistrements", "ChannelResolutionSD": "SD", "ChannelResolutionHD": "HD", "ChannelResolutionFullHD": "Full HD", @@ -1337,11 +1337,377 @@ "MenuClose": "Fermer le menu", "AllowContentWithTagsHelp": "Afficher uniquement les médias avec un ou plusieurs des étiquettes spécifiées.", "BlockContentWithTagsHelp": "Masquer les médias avec un ou plusieurs des étiquettes spécifiées.", - "ConfirmDeleteSeries": "La suppression de cette série entraînera la suppression des {0} épisodes depuis le disque ET la médiathèque. Êtes-vous sûr de vouloir continuer?", + "ConfirmDeleteSeries": "La suppression de cette série entraînera la suppression des {0} épisodes du disque et de la médiathèque. Êtes-vous sûr de vouloir continuer?", "DeleteEpisode": "Supprimer l’épisode", "EnableLibrary": "Activer la médiathèque", "EnableLibraryHelp": "La désactivation de la médiathèque la masquera depuis toutes les vues utilisateur.", "AirPlay": "AirPlay", "DeleteEntireSeries": "Supprimer {0} épisodes", - "DeleteSeries": "Supprimer la série" + "DeleteSeries": "Supprimer la série", + "ConfirmDeleteLyrics": "Supprimer ces paroles les effaceront du disque et de votre médiathèque. Êtes-vous sûr de vouloir continuer?", + "DeleteLyrics": "Supprimer les paroles", + "EnableTrueHdHelp": "N'activez cette option que si votre appareil prend en charge la norme TrueHD ou s'il est connecté à un lecteur audio compatible, sinon la lecture risque d'échouer.", + "ErrorDeletingLyrics": "Une erreur est survenu lors de la suppression des paroles du serveur. Verifiez que Jellyfin peut modifier les fichier dans le dossier média et réessayez à nouveau.", + "HeaderDeleteLyrics": "Supprimer les paroles", + "MixedMoviesShows": "Films et séries mélangés", + "Letterer": "Lettreur", + "Next": "Suivant", + "LibraryScanFanoutConcurrency": "Limite de tâches de scan de médiathèque en parallèle", + "LibraryScanFanoutConcurrencyHelp": "Nombre maximal de tâches en parallèle pour les scans de médiathèque. Une valeur de 0 laissera le système choisir une limite en fonction du nombre de coeurs. ATTENTION: Définir une valeur trop élevée peut causer des problèmes avec les systèmes de fichers réseau. Si vous avez des problèmes, réduisez cette valeur.", + "OptionEveryday": "Tous les jours", + "OptionForceRemoteSourceTranscoding": "Forcer le transcodage pour les sources de média externes comme la télé en direct", + "OptionHasThemeVideo": "Générique", + "OptionHideUser": "Cacher cet utilisateur des écrans de connexion", + "MapChannels": "Associer les canaux", + "NotificationsMovedMessage": "Les notifications ont été déplacé vers l'extension Webhook.", + "EnableSmoothScroll": "Activer le défilement fluide", + "HeaderDeleteSeries": "Supprimer les séries", + "LabelAllowContentWithTags": "Autoriser les éléments comportants des étiquettes", + "MessageNoItemsAvailable": "Aucun élément n'est actuellement disponible.", + "MessageNoTrailersFound": "Installez la chaîne \"Bande-Annonces\" pour agrémenter votre expérience de cinéma par l'ajout de bandes-annonces disponibles sur internet.", + "Author": "Auteur", + "Colorist": "Coloriste", + "CoverArtist": "Artiste de pochette", + "Creator": "Créateur", + "Editor": "Éditeur", + "EnableTrueHd": "Activer le TrueHD", + "HeaderNoLyrics": "Aucune parole trouvée", + "Illustrator": "Illustrateur", + "Inker": "Encreur", + "OptionDateEpisodeAdded": "Date d'ajout de l'épisode", + "MessageChangeRecordingPath": "Modifier votre dossier d'enregistrement ne déplacera pas les enregistrements existants de l'ancien emplacement vers le nouveau. Vous devrez les déplacer manuellement si vous le souhaitez.", + "MessageNoFavoritesAvailable": "Aucun favori n'est actuellement disponible.", + "OptionHasThemeSong": "Chansons thème", + "OptionExtractChapterImage": "Activer l'extraction des images de chapitres", + "OptionHideUserFromLoginHelp": "Utile pour les comptes privés ou d'administrateurs. L'utilisateur devra se connecter manuellement en saisissant son nom d'utilisateur et son mot de passe.", + "OptionImdbRating": "Évaluation IMDB", + "OptionIsSD": "SD", + "EnableDts": "Activer DTS (DCA)", + "EnableDtsHelp": "N'activez cette option que si votre appareil prend en charge le DTS ou s'il est connecté à un lecteur audio compatible, sinon la lecture risque d'échouer.", + "HeaderVideoAdvanced": "Vidéo avancée", + "MessageNoCollectionsAvailable": "Les collections vous permettent de profiter de groupes personnalisés de films, de séries et d'albums. Cliquer sur le bouton '+' pour commencer à créer des collections.", + "MessageRenameMediaFolder": "Renommer une médiathèque entraînera la perte de toutes les métadonnées, procédez avec prudence.", + "MessageRepositoryInstallDisclaimer": "ATTENTION: Installer un dépôt d'extensions tierces comporte des risques. Celui-ci peut contenir du code instable ou malveillant et peut être modifié à tout moment. N'installez que des dépôts provenant d'auteurs en qui vous avez confiance.", + "OptionEnableForAllTuners": "Activer pour tous les syntoniseurs", + "Notifications": "Notifications", + "HeaderLyricDownloads": "Téléchargements de paroles", + "Lyrics": "Paroles", + "MessagePluginInstallDisclaimer": "ATTENTION: Installer une extension tierce comporte des risques. Celle-ci peut contenir du code instable ou malveillant et peut être modifiée à tout moment. N'installez que des extensions provenant d'auteurs en qui vous avez confiance et soyez conscient des effets potentiels que cela peut avoir, incluant des requête vers des services externes, une augmentation de la durée des scans de la médiathèque, ou des tâches de fonds additionnelles.", + "OptionDateShowAdded": "Date d'ajout de la série", + "MessageDirectoryPickerBSDInstruction": "Sur BSD, vous devrez peut-être configurer le stockage de votre 'Jail FreeNAS' pour autoriser Jellyfin à accéder à vos médias.", + "MessageDirectoryPickerLinuxInstruction": "Pour Linux sur Arch Linux, CentOS, Debian, Fedora, openSUSE ou Ubuntu, vous devez autoriser au moins l'accès en lecture à vos répertoires de stockage à l'utilisateur du service.", + "OptionIsHD": "HD", + "Lyric": "Parole", + "LimitSupportedVideoResolution": "Limiter la résolution vidéo maximale supportée", + "LimitSupportedVideoResolutionHelp": "Utiliser la \"Résolution maximale du transcodage vidéo\" comme résolution vidéo maximale supportée.", + "MessageUnauthorizedUser": "Vous n'êtes pas autorisé à accéder au serveur pour le moment. Veuillez contacter votre administrateur de serveur pour plus d'informations.", + "PasswordResetComplete": "Le mot de passe a été réinitialisé.", + "PlaylistError.AddFailed": "Erreur d'ajout à la liste de lecture", + "PlaylistError.CreateFailed": "Erreur lors de la création de la liste de lecture", + "OriginalAirDate": "Date de diffusion originale", + "PathNotFound": "Le chemin d'accès n'a pas pu être trouvé. Vérifiez qu'il est valide et réessayez.", + "People": "Personnes", + "OptionMaxActiveSessions": "Défini le nombre maximal de sessions utilisateur simultanées.", + "PasswordMatchError": "Le mot de passe et sa confirmation doivent correspondre.", + "PasswordRequiredForAdmin": "Un mot de passe est requis pour les comptes administrateur.", + "PersonRole": "en tant que {0}", + "PlaybackErrorNoCompatibleStream": "Ce client n'est pas compatible avec le média et le serveur n'envoie pas de format compatible.", + "PreferEmbeddedEpisodeInfosOverFileNames": "Préférer les informations intégrées aux épisodes plutôt que les noms de fichiers", + "Overview": "Survol", + "OptionMaxActiveSessionsHelp": "Une valeur de 0 désactive la fonctionnalité.", + "OptionMissingEpisode": "Épisodes manquants", + "OptionOnInterval": "À intervalle", + "OptionParentalRating": "Classification parentale", + "OtherArtist": "Autre artiste", + "PackageInstallCompleted": "L'installation de {0} (version {1}) est terminée.", + "PictureInPicture": "Incrustation d'image", + "PlaybackError.ASS_RENDER_ERROR": "Une erreur est survenue avec le moteur de rendu des sous-titres ASS/SSA.", + "PlaybackData": "Données de lecture", + "PlaybackError.FATAL_HLS_ERROR": "Une erreur fatale est survenue dans le stream HLS.", + "PleaseRestartServerName": "Veuillez redémarrer le serveur Jellyfin sur {0}.", + "PleaseSelectTwoItems": "Veuillez sélectionner au moins deux éléments.", + "Poster": "Affiche", + "PosterCard": "Carton d'affiche", + "PleaseEnterNameOrId": "Veuillez entrer un nom ou un identifiant externe.", + "AllowEmbeddedSubtitlesHelp": "Désactiver les sous-titres intégrés aux fichiers. Nécessite un rafraichissement complet de la médiathèque.", + "AllowEmbeddedSubtitlesAllowNoneOption": "Autoriser aucun", + "AllowEmbeddedSubtitlesAllowImageOption": "Autoriser les images", + "PreviousChapter": "Chapitre précédent", + "PreviousTrack": "Revenir au précédent", + "Production": "Production", + "ProductionLocations": "Lieux de production", + "Profile": "Profil", + "Penciller": "Crayonneur", + "PlaceFavoriteChannelsAtBeginning": "Mettre les chaînes favorites au début", + "OptionLoginAttemptsBeforeLockout": "Défini le nombre de connexions échoués avant le vérouillage du compte.", + "OptionLoginAttemptsBeforeLockoutHelp": "Une valeur de 0 applique la politique par défaut de 3 essais pour les utilisateurs et 5 essais pour les administrateurs. Une valeur de -1 désactive le vérouillage.", + "OptionResumable": "Reprise possible", + "OptionPlayCount": "Nombre de lectures", + "OptionPremiereDate": "Date de l'avant-première", + "OptionRandom": "Aléatoire", + "OptionReleaseDate": "Date de sortie", + "OptionRequirePerfectSubtitleMatch": "Télécharger uniquement les sous-titres qui correspondent parfaitement aux fichiers vidéo", + "OptionSaveMetadataAsHiddenHelp": "Changer ceci s'appliquera aux nouvelles métadonnées sauvegardés à partir de maintenant. Les fichiers de métadonnés existants seront mis à jours la prochaine fois qu'ils seront sauvegardés par le serveur.", + "OptionSpecialEpisode": "Spéciaux", + "OptionSaveMetadataAsHidden": "Enregistrer les métadonnées et les images en tant que fichiers cachés", + "OptionTrackName": "Titre de la piste", + "PasswordResetProviderHelp": "Choisissez le fournisseur de réinitialisation de mot de passe à utiliser lorsqu'un utilisateur demande la réinitialisation de son mot de passe.", + "PasswordSaved": "Mot de passe sauvegardé.", + "Played": "Lu", + "PlayFromBeginning": "Lire depuis le début", + "PlaybackError.MEDIA_NOT_SUPPORTED": "La lecture a échoué car le média n'est pas supporté par ce client.", + "PleaseConfirmPluginInstallation": "Veuillez cliquer sur 'OK' pour confirmer que vous avez lu ce qui précède et que vous souhaitez poursuivre l'installation de l'extension.", + "PleaseAddAtLeastOneFolder": "Veuillez ajouter au moins un dossier à cette médiathèque en cliquant sur le bouton '+' de la section 'Dossiers'.", + "OptionMax": "Maximum", + "PackageInstallCancelled": "L'installation de {0} (version {1}) a été annulée.", + "PasswordResetConfirmation": "Êtes-vous sûr de vouloir réinitialiser le mot de passe?", + "OptionTvdbRating": "Évaluation TheTVDB", + "OptionUnairedEpisode": "Épisodes non diffusés", + "OptionWakeFromSleep": "Réveiller", + "PackageInstallFailed": "L'installation de {0} (version {1}) a échouée.", + "PlayCount": "Nombre de lectures", + "PlayNext": "Lire le suivant", + "Play": "Lire", + "PlayAllFromHere": "Tout lire à partir d'ici", + "PlayNextEpisodeAutomatically": "Lire l'épisode suivant automatiquement", + "PlaybackError.MEDIA_DECODE_ERROR": "La lecture a échouée en raison d'une erreur de décodage du média.", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Les bonus possèdent souvent le même titre intégré que le fichier parent, cocher l'option pour utiliser ce titre quand même.", + "PleaseConfirmRepositoryInstallation": "Veuillez cliquer sur 'OK' pour confirmer que vous avez lu ce qui précède et que vous souhaitez poursuivre l'installation du dépôt d'extensions.", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utiliser les informations de l'épisode des métadonnées intégrées lorsque disponibles.", + "PreferEmbeddedExtrasTitlesOverFileNames": "Préférer les titres intégrés plutôt que les noms de fichiers pour les bonus", + "Photo": "Photo", + "PerfectMatch": "Correspondance parfaite", + "Person": "Personne", + "PlaybackRate": "Vitesse de lecture", + "PluginFromRepo": "{0} du dépôt {1}", + "QuickConnect": "Connexion rapide", + "QuickConnectActivationSuccessful": "Activé avec succès", + "QuickConnectAuthorizeCode": "Entrer le code {0} pour se connecter", + "PlaylistPublic": "Autoriser l'accès public", + "PlaylistPublicDescription": "Autoriser la lecture de cette liste de lecture par n'importe quel utilisateur connecté.", + "PreferEmbeddedTitlesOverFileNames": "Préférer les titres intégrés aux noms de fichiers", + "AllowEmbeddedSubtitles": "Désactiver différents types de sous-titres intégrés", + "PreferEmbeddedTitlesOverFileNamesHelp": "Déterminer le titre à afficher lorsqu'aucune métadonnée en ligne ou locale n'est disponible.", + "AllowEmbeddedSubtitlesAllowAllOption": "Autoriser tous", + "AllowEmbeddedSubtitlesAllowTextOption": "Autoriser le texte", + "Premieres": "Avant-premières", + "Preview": "Aperçu", + "Previous": "Précédent", + "Print": "Imprimer", + "Producer": "Producteur", + "Programs": "Programmes", + "OptionWeekdays": "Jours de semaine", + "OptionWeekends": "Fin de semaines", + "OptionWeekly": "Chaque semaine", + "Other": "Autre", + "PlaybackError.NETWORK_ERROR": "La lecture a échoué à cause d'un problème réseau.", + "PlaybackError.NotAllowed": "La lecture de ce média n'est pas autorisée.", + "PlaybackError.RateLimitExceeded": "Ce média ne peut pas être lu à cause des limites de débit.", + "PlaybackError.NO_MEDIA_ERROR": "Impossible de trouver une source multimédia valide à lire.", + "PlaybackError.PLAYER_ERROR": "La lecture a échoué en raison d'une erreur fatale du lecteur.", + "PlaybackError.SERVER_ERROR": "La lecture a échoué à cause d'une erreur serveur.", + "QuickConnectDeactivated": "La connexion rapide a été désactivée avant que la requête ne puisse être approuvée", + "RemoveFromPlaylist": "Retirer de la liste de lecture", + "XmlTvPathHelp": "Un chemin d'accès à un fichier XMLTV. Jellyfin lira ce fichier et en vérifiera périodiquement les mises à jour. Vous êtes responsable de la création et de la mise à jour du fichier.", + "UseEpisodeImagesInNextUpHelp": "Les sections \"À suivre\" et \"Reprendre le visionnage\" utiliseront les images des épisodes comme vignettes plutôt que la vignette principale de la série.", + "LabelScanBehaviorHelp": "Le comportement par défaut est non bloquant, ce qui ajoutera les médias à la médiathèque avant que la génération trickplay ne soit terminée. Le blocage garantira que les fichiers trickplay sont générés avant que le média ne soit ajouté à la médiathèque, mais rendra les scans beaucoup plus longs.", + "LabelExtractTrickplayDuringLibraryScan": "Extraire les images trickplay pendant le scan de la médiathèque", + "UseDoubleRateDeinterlacingHelp": "Ce réglage utilise la fréquence de trame lors du désentrelacement, souvent appelé désentrelacement \"bob\", qui double la fréquence d'images de la vidéo pour fournir un mouvement fluide comme en regardant une vidéo entrelacée sur une télévision.", + "UseEpisodeImagesInNextUp": "Utiliser l'image de l'épisode dans \"À suivre\" et \"Reprendre le visionnage\"", + "ValueOneSong": "1 chanson", + "RefreshMetadata": "Actualiser les métadonnées", + "RememberSubtitleSelectionsHelp": "Choisir la piste de sous-titres la plus proche de la dernière vidéo.", + "SaveRecordingImagesHelp": "Sauvegarder les images du guide avec l'enregistrement.", + "PreferFmp4HlsContainerHelp": "Préférer l'utilisation de fMP4 comme conteneur pour HLS rendant possible la lecture directe des stream HEVC et AV1 sur les appareils compatibles.", + "EnableGamepadHelp": "Détecter le signal d'entrée de toute manette connectée. (Nécessite le mode d’affichage 'télé'.)", + "NonBlockingScan": "Non bloquant - génération de files d'attente, puis retour", + "LabelScanBehavior": "Comportement du scan", + "QuickConnectInvalidCode": "Code de connexion rapide invalide", + "RefreshDialogHelp": "Les métadonnées sont actualisées en fonction des paramètres et des services Internet activés dans le tableau de bord.", + "RepeatOne": "Répéter un", + "TabStreaming": "Streaming", + "Up": "Haut", + "SavePassword": "Sauvegarder le mot de passe", + "Trailers": "Bandes-annonces", + "TV": "Télé", + "Transcoding": "Transcodage", + "Uniform": "Uniforme", + "TypeOptionPluralMusicAlbum": "Albums de musique", + "UseDoubleRateDeinterlacing": "Doubler la fréquence d'image lors du désentrelacement", + "ValueEpisodeCount": "{0} épisodes", + "ThemeSong": "Chanson thème", + "RecordSeries": "Enregistrer la série", + "RememberMe": "Se souvenir de moi", + "Remixer": "Remixer", + "RemoveFromCollection": "Retirer de la collection", + "TabOther": "Autre", + "TabParentalControl": "Contrôle parental", + "TabPlugins": "Extensions", + "ValueOneMusicVideo": "1 vidéoclip", + "ValueOneSeries": "1 série", + "QuickConnectNotAvailable": "Demandez à votre administrateur système d'activer la connexion rapide", + "TabServer": "Serveur", + "TonemappingAlgorithmHelp": "Le mappage de ton peut être affiné. Si vous n'êtes pas familier avec ces options, gardez les valeurs par défaut. L'option recommandée est 'BT.2390'.", + "TonemappingRangeHelp": "Sélectionnez le gamme de coleur de sortie. \"Auto\" sélectionne la même game qu'en entrée.", + "Translator": "Traducteur", + "TypeOptionPluralBook": "Livres", + "TypeOptionPluralBoxSet": "Coffrets", + "TypeOptionPluralEpisode": "Épisodes", + "TypeOptionPluralMovie": "Films", + "UninstallPluginConfirmation": "Êtes-vous sûr de vouloir désinstaller {0}?", + "ValueAlbumCount": "{0} albums", + "ReleaseDate": "Date de sortie", + "ReleaseGroup": "Groupe de sortie", + "RememberAudioSelections": "Définir la piste audio en fonction de l'élément précédent", + "RememberAudioSelectionsHelp": "Choisir la piste audio la plus proche de la dernière vidéo.", + "RememberSubtitleSelections": "Définir la piste de sous-titre en fonction de l'élément précédent", + "ReplaceAllMetadata": "Remplacer toutes les métadonnées", + "ReplaceExistingImages": "Remplacer les images existantes", + "ResetPassword": "Réinitialiser le mot de passe", + "ResolutionMatchSource": "Résolution de la source", + "Thumb": "Miniature", + "TitleHardwareAcceleration": "Accélération matérielle", + "Upload": "Uploader", + "ValueMinutes": "{0} minutes", + "ValueMovieCount": "{0} films", + "ValueMusicVideoCount": "{0} vidéoclips", + "ValueOneAlbum": "1 album", + "LabelExtractTrickplayDuringLibraryScanHelp": "Générer les images trickplay lorsque les vidéos sont importées pendant le scan de la médiathèque. Autrement, elles seront extraites lors de la tâche programmée \"images trickplay\". Si la génération est définie sur non bloquante, cela n’affectera pas le temps nécessaire au scan de la médiathèque.", + "QuickConnectAuthorizeSuccess": "Vous avez authentifié votre appareil avec succès!", + "QuickConnectDescription": "Pour utiliser la connexion rapide, appuyez sur le bouton 'Connexion rapide' de l'appareil à connecter et entrez le code affiché ci-dessous.", + "QuickConnectNotActive": "La connexion rapide n'est pas activée sur ce serveur", + "TypeOptionPluralAudio": "Audios", + "UserAgentHelp": "Fournir un en-tête \"'User-Agent\" personnalisé.", + "UserMenu": "Menu utilisateur", + "ValueDiscNumber": "Disque {0}", + "ValueOneEpisode": "1 épisode", + "TextSent": "Texte envoyé.", + "ResumeAt": "Reprendre depuis {0}", + "QuickConnectAuthorizeFail": "Code de connexion rapide inconnu", + "RepeatAll": "Répéter tous", + "RepeatEpisodes": "Répéter les épisodes", + "RepeatMode": "Mode de répétition", + "Rewind": "Rembobiner", + "Runtime": "Durée", + "Restart": "Redémarrer", + "SaveRecordingNFO": "Sauvegarder les données du guide dans le fichier NFO", + "SaveRecordingImages": "Sauvegarder les images du guide", + "SaveChanges": "Enregistrer les modifications", + "SaveLyricsIntoMediaFolders": "Enregistrer les paroles dans les dossiers média", + "SaveRecordingNFOHelp": "Sauvegarder les métadonnées du guide avec l'enregistrement.", + "SaveLyricsIntoMediaFoldersHelp": "Stocker les paroles avec les fichiers audio permet de les gérer plus facilement.", + "SaveSubtitlesIntoMediaFolders": "Sauvegarder les sous-titres dans les dossiers média", + "TabScheduledTasks": "Tâches planifiées", + "TheseSettingsAffectSubtitlesOnThisDevice": "Ces paramètres affectent les sous-titres sur cet appareil", + "TitleHostingSettings": "Paramètres d'hébergement", + "TitlePlayback": "Lecture", + "Track": "Piste", + "TypeOptionPluralMusicVideo": "Vidéoclips", + "LabelDirectStreamingInfo": "Informations de streaming direct", + "ValueSongCount": "{0} chansons", + "TypeOptionPluralSeason": "Saisons", + "TypeOptionPluralVideo": "Vidéos", + "TypeOptionPluralSeries": "Séries Télé", + "ValueOneMovie": "1 films", + "BlockingScan": "Bloquant - génération de files d'attente, bloquer les scans jusqu'à la fin", + "RecentlyWatched": "Vu récemment", + "RecommendationBecauseYouLike": "Parce que vous aimez {0}", + "RecommendationBecauseYouWatched": "Parce que vous avez regardé {0}", + "RecommendationStarring": "Mettant en vedette {0}", + "Recordings": "Enregistrements", + "SaveSubtitlesIntoMediaFoldersHelp": "Stocker les sous-titres avec les fichiers vidéos permet de les gérer plus facilement.", + "ScanForNewAndUpdatedFiles": "Scanner les nouveaux fichiers et les fichiers modifiés", + "TabMusic": "Musique", + "TabMyPlugins": "Mes extensions", + "TabNetworking": "Réseau", + "TabNfoSettings": "Paramètres NFO", + "TabNetworks": "Réseaux télé", + "TabUpcoming": "À venir", + "Tags": "Étiquettes", + "TagsValue": "Étiquettes: {0}", + "ThemeVideos": "Génériques", + "ThemeSongs": "Chansons thème", + "TypeOptionPluralMusicArtist": "Artistes musicaux", + "ThemeVideo": "Générique", + "ExtractTrickplayImagesHelp": "Les images Trickplay sont similaires aux images de chapitre, sauf qu'elles couvrent toute la longueur du contenu et sont utilisées pour afficher un aperçu lors du parcours des vidéos.", + "SortName": "Trier par nom", + "StopPlayback": "Arrêter la lecture", + "ShowIndicatorsFor": "Afficher les indicateurs pour", + "SimultaneousConnectionLimitHelp": "Le nombre maximal de streams simultanés autorisés. Entrez 0 pour ne pas limiter.", + "SearchResultsEmpty": "Désolé! Aucun résultat trouvé pour \"{0}\"", + "SkipEpisodesAlreadyInMyLibrary": "Ne pas enregistrer les épisodes qui sont déjà dans ma médiathèque", + "StereoDownmixAlgorithmHelp": "Algorithme utilisé pour downmixer les pistes multi-canaux en stéréo.", + "ShowLess": "Afficher moins", + "SortChannelsBy": "Trier les chaînes par", + "Studio": "Studio", + "SecondarySubtitles": "Sous-titres secondaires", + "ShowParentImages": "Afficher les images des séries", + "Shuffle": "Lecture aléatoire", + "SmartSubtitlesHelp": "Les sous-titres correspondant à la préférences de langue seront chargés lorsque l'audio est dans une langue étrangère.", + "ShowMore": "Afficher plus", + "OptionExtractTrickplayImage": "Activer l'extraction d'images trickplay", + "ScreenResolution": "Résolution d'écran", + "SubtitleAppearanceSettingsDisclaimer": "Les options suivantes ne s'appliquent aux sous-titres gaphiques mentionnés plus haut ni aux formats ASS/SSA qui incorporent leurs propres styles.", + "SubtitleGray": "Gris", + "SubtitleBlack": "Noir", + "SubtitleBlue": "Bleu", + "SubtitleCyan": "Cyan", + "SubtitleDownloadersHelp": "Actier et classer vos outils de téléchargements de sous-titres préférés en ordre de priorité.", + "SubtitleGreen": "Vert", + "SubtitleLightGray": "Gris pâle", + "SubtitleMagenta": "Magenta", + "SubtitleOffset": "Décalage des sous-titres", + "SubtitleRed": "Rouge", + "Rate": "Évaluer", + "ViewPlaybackInfo": "Voir les informations de lecture", + "AudioCodecNotSupported": "Le codec audio n'est pas supporté", + "Watched": "Vu", + "WeeklyAt": "{0}s à {1}", + "WriteAccessRequired": "Jellyfin a besoin d'accès en écriture à ce dossier. Vérifiez les permissions et réessayez.", + "Writers": "Scénaristes", + "XmlTvNewsCategoriesHelp": "Les émissions dans ces catégories seront affichés commes des émissions d'actualités. S'il y en a plusieurs, les séparer à l'aide du caractère \"|\".", + "HeaderSelectFallbackFontPath": "Choisir le dossier des polices de secours", + "LabelFallbackFontPathHelp": "Ces polices sont utilisées par certains clients pour afficher les sous-titres. Veuillez vous référer à la documentation pour plus d'informations.", + "HeaderSelectFallbackFontPathHelp": "Parcourir ou saisir le chemin du dossier de polices de secours à utiliser pour le rendu des sous-titres ASS/SSA.", + "AspectRatioCover": "Couvrir", + "Whitelist": "Whitelist", + "EnableFallbackFont": "Activer les polices de secours", + "EnableFallbackFontHelp": "Activer des polices alternatives personnalisées. Ceci peut éviter les problèmes de rendu incorrecte des sous-titres.", + "LabelRemuxingInfo": "Informations de remultiplexage", + "LabelAllowedAudioChannels": "Nombre maximal de canaux audio autorisés", + "Controls": "Contrôles", + "LabelSelectStereo": "Stéréo", + "YoutubeBadRequest": "Mauvaise requête.", + "LabelEnableGamepad": "Activer la manette de jeu", + "ContainerNotSupported": "Le conteneur n'est pas supporté", + "XmlTvSportsCategoriesHelp": "Les émissions dans ces catégories seront affichés commes émissions de sports. S'il y en a plusieurs, les séparer à l'aide du caractère \"|\".", + "Yesterday": "Hier", + "LabelSelectMono": "Mono", + "MessagePlaybackError": "Une erreur s'est produite lors de la lecture de ce fichier sur votre récepteur Google Cast.", + "EnableEnhancedNvdecDecoder": "Activer le décodeur NVDEC amélioré", + "ViewLyrics": "Voir les paroles", + "Writer": "Scénariste", + "LabelFallbackFontPath": "Chemin du dossier de secours des polices", + "PreferFmp4HlsContainer": "Préférer le conteneur fMP4-HLS", + "XmlTvKidsCategoriesHelp": "Les émissions dans ces catégories seront affichés comme des émissions pour enfants. S'il y en a plusieurs, les séparer à l'aide du caractère \"|\".", + "XmlTvMovieCategoriesHelp": "Les émissions dans ces catégories seront affichés commes films. S'il y en a plusieurs, les séparer à l'aide du caractère \"|\".", + "YoutubePlaybackError": "La vidéo demandée ne peut pas être jouée.", + "YoutubeNotFound": "Vidéo introuvable.", + "YoutubeDenied": "La vidéo demandée n'est pas autorisée à être lue dans des lecteurs intégrés.", + "MessageChromecastConnectionError": "Votre récepteur Google Cast ne parvient pas à contacter le serveur Jellyfin. Veuillez vérifier la connexion et réessayer.", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", + "LabelVideoInfo": "Informations vidéo", + "LabelTrackGain": "Gain de la piste", + "LabelOriginalMediaInfo": "Informations sur le média original", + "LabelSyncPlayInfo": "Informations SyncPlay", + "AllowHevcEncoding": "Autoriser l'encodage en format HEVC", + "LabelSelectAudioChannels": "Canaux", + "EnableVppTonemapping": "Activer le mappage de ton VPP", + "AspectRatioFill": "Remplir", + "Remuxing": "Remultiplexage", + "RemuxHelp1": "Le média est dans un conteneur incompatible (MKV, AVI, WMV, etc.), mais les streams vidéo et audio sont compatibles avec l'appareil. Le média sera rempaqueté à la volée avant d'être envoyé à l'appareil.", + "RemuxHelp2": "Remultiplexer utilise une très faible puissance de calcul sans aucune perte de qualité du média.", + "LabelPlaybackInfo": "Informations de lecture", + "LabelAudioInfo": "Informations audio", + "LabelTranscodingInfo": "Informations de transcodage" } diff --git a/src/strings/fr.json b/src/strings/fr.json index 5d04a7bbea..f67209802c 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -3,9 +3,9 @@ "AccessRestrictedTryAgainLater": "L'accès est actuellement restreint. Merci de réessayer plus tard.", "Actor": "Acteur", "Add": "Ajouter", - "AddToCollection": "Ajouter à une collection", + "AddToCollection": "Ajouter à la collection", "AddToPlayQueue": "Ajouter à la file d'attente", - "AddToPlaylist": "Ajouter à une liste de lecture", + "AddToPlaylist": "Ajouter à la liste de lecture", "AddedOnValue": "Ajouté le {0}", "AdditionalNotificationServices": "Visiter le catalogue d'extensions pour installer des services de notifications supplémentaires.", "AirDate": "Date de diffusion", @@ -426,7 +426,7 @@ "LabelAllowedRemoteAddresses": "Filtre d'adresse IP distante", "LabelAllowedRemoteAddressesMode": "Type de filtre des adresses IP distantes", "LabelAppName": "Nom de l'application", - "LabelAppNameExample": "Exemple : Sickbeard, Sonarr", + "LabelAppNameExample": "Nom humainement lisible pour identifier les clés d'API. Ce paramètre n'affecte pas les fonctionnalités.", "LabelArtists": "Artistes", "LabelArtistsHelp": "Séparer les artistes par un point-virgule.", "LabelAudioLanguagePreference": "Langue audio préférée", @@ -940,7 +940,7 @@ "Overview": "Synopsis", "PackageInstallCancelled": "L'installation de {0} (version {1}) a été annulée.", "PackageInstallCompleted": "L'installation de {0} (version {1}) est terminée.", - "PackageInstallFailed": "L'installation de {0} (version {1}) a échoué.", + "PackageInstallFailed": "L'installation de {0} (version {1}) a échouée.", "ParentalRating": "Classification parentale", "PasswordMatchError": "Le mot de passe et sa confirmation doivent correspondre.", "PasswordResetComplete": "Le mot de passe a été réinitialisé.", @@ -1082,13 +1082,13 @@ "TabServer": "Serveur", "TabUpcoming": "À venir", "Tags": "Étiquettes", - "TagsValue": "Mots clés : {0}", + "TagsValue": "Étiquettes : {0}", "TellUsAboutYourself": "Parlez-nous de vous", "ThemeSongs": "Thèmes musicaux", "ThemeVideos": "Génériques", "TheseSettingsAffectSubtitlesOnThisDevice": "Ces paramètres affectent les sous-titres de cet appareil", "ThisWizardWillGuideYou": "Cet assistant vous guidera dans le processus de configuration. Pour commencer, merci de sélectionner votre langue préférée.", - "Thumb": "Miniature", + "Thumb": "Vignettes", "Thursday": "Jeudi", "TitleHardwareAcceleration": "Accélération matérielle", "TitleHostingSettings": "Paramètres d'hébergement", @@ -1245,7 +1245,7 @@ "LabelDroppedFrames": "Images perdues", "LabelCorruptedFrames": "Images corrompues", "AskAdminToCreateLibrary": "Demander à un administrateur de créer une médiathèque.", - "AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment en avant de la position de lecture, le processus se mettra en pause afin d’économiser des ressources. Ceci est particulièrement utile lors d’une lecture continue. À désactiver en cas de problèmes de lecture.", + "AllowFfmpegThrottlingHelp": "Quand le transcodage ou le remultiplexage est suffisamment en avance sur la lecture, le processus se mettra en pause afin d’économiser des ressources. Ceci est particulièrement utile lors d’une lecture continue. À désactiver en cas de problèmes de lecture.", "AllowFfmpegThrottling": "Adapter la vitesse du transcodage", "NoCreatedLibraries": "Il semble que vous n'ayez pas encore créé de bibliothèques. {0}Voulez-vous en créer une maintenant ?{1}", "PlaybackErrorNoCompatibleStream": "Ce client n'est pas compatible avec le média et le serveur n'envoie pas de format compatible.", @@ -1272,7 +1272,7 @@ "ListPaging": "{0}-{1} de {2}", "WriteAccessRequired": "Jellyfin a besoin d'un accès en écriture à ce dossier. Merci de vérifier les permissions de ce-dernier puis de réessayer.", "PathNotFound": "Le chemin d'accès n'a pas pu être trouvé. Merci de vérifier qu'il est valide et de réessayer.", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "LabelDeinterlaceMethod": "Méthode de désentrelacement", "DeinterlaceMethodHelp": "Sélectionner la méthode de désentrelacement à utiliser lors du transcodage de contenu entrelacé. Lorsque l'accélération matérielle supportant le désentrelacement matériel est activée, le désentrelaceur matériel sera utilisé à la place de ce paramètre.", "LabelLibraryPageSize": "Taille des pages de la médiathèque", @@ -1377,7 +1377,7 @@ "Other": "Autre", "PosterCard": "Affiche sur carte", "UseDoubleRateDeinterlacing": "Multiplier par deux la fréquence d'images lors du désentrelacement", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "UseDoubleRateDeinterlacingHelp": "Ce réglage utilise la fréquence de trame lors du désentrelacement, souvent appelé désentrelacement \"bob\", qui double la fréquence d'images de la vidéo pour fournir un mouvement fluide comme en regardant une vidéo entrelacée sur un téléviseur.", "LabelTonemappingDesat": "Désaturation tonale", "TonemappingRangeHelp": "Définir la gamme de couleurs de sortie. Choisir 'Auto' pour utiliser la même gamme de couleurs qu'en entrée.", @@ -1615,7 +1615,7 @@ "SelectAll": "Tout sélectionner", "ButtonExitApp": "Quitter l'application", "Clip": "Clip", - "ThemeVideo": "Thème Vidéo", + "ThemeVideo": "Thème vidéo", "ThemeSong": "Thème musical", "Sample": "Échantillon", "Scene": "Scène", @@ -1676,7 +1676,7 @@ "RememberSubtitleSelections": "Définir la piste de sous-titre en fonction de l'élément précédent", "RememberAudioSelectionsHelp": "Choisir la piste audio la plus proche de la dernière vidéo.", "RememberAudioSelections": "Définir la piste audio en fonction de l'élément précédent", - "IgnoreDtsHelp": "Désactiver cette option peut résoudre certains problèmes, par exemple une piste audio manquante sur les chaines TV avec flux audio et vidéo séparés.", + "IgnoreDtsHelp": "Désactiver cette option peut résoudre certains problèmes, par exemple une piste audio manquante sur les chaînes avec flux audio et vidéo séparés.", "OptionDateShowAdded": "Date d'ajout de la série", "OptionDateEpisodeAdded": "Date d'ajout de l'épisode", "IgnoreDts": "Ignorer le DTS (horodatage de décodage)", @@ -1719,7 +1719,7 @@ "Short": "Court-métrage", "HeaderPerformance": "Performance", "LabelParallelImageEncodingLimit": "Limite de parallélisation de l'encodage d'image", - "LabelParallelImageEncodingLimitHelp": "Nombre maximal d’encodages d’image autorisés à s’exécuter en parallèle. Si vous définissez cette valeur sur 0, vous choisirez une limite en fonction des spécifications de votre système.", + "LabelParallelImageEncodingLimitHelp": "Nombre maximal d’encodages d’image autorisés à s’exécuter en parallèle. Si vous définissez cette valeur sur 0, la limite sera choisie en fonction du nombre de cœurs de votre système.", "LabelEnableAudioVbr": "Activer l’encodage audio VBR", "LabelEnableAudioVbrHelp": "Le débit binaire variable offre une qualité supérieure à la moyenne mais peut, dans de rares cas, causer des problèmes de mise en mémoire tampon et de compatibilité.", "LabelTonemappingMode": "Mode de mappage tonal", @@ -1807,8 +1807,8 @@ "LabelAllowContentWithTags": "Autoriser les objets comportants des étiquettes", "ConfirmDeleteSeries": "La suppression de cette série effacera l'ENTIÈRETÉ des {0} épisodes à la fois de votre système de ficher et de votre médiathèque. Êtes-vous sur de vouloir continuer ?", "DeleteEntireSeries": "Supprimer {0} Épisodes", - "DeleteSeries": "Supprimer Séries", - "DeleteEpisode": "Suppri", + "DeleteSeries": "Supprimer la série", + "DeleteEpisode": "Supprimer l'épisode", "HeaderDeleteSeries": "Supprimer Séries", "EnableSmoothScroll": "Activer le défilement fluide", "Lyric": "Parole", @@ -1835,7 +1835,7 @@ "LabelProcessPriorityHelp": "Un réglage inférieur ou supérieur déterminera la manière dont le processeur donne la priorité au processus de génération de trickplay ffmpeg par rapport aux autres processus. Si vous remarquez un ralentissement lors de la génération d'images trickplay mais que vous ne souhaitez pas arrêter complètement leur génération, essayez de réduire ce ralentissement en modifiant le nombre de threads.", "LabelImageIntervalHelp": "Intervalle de temps (ms) entre chaque nouvelle image trickplay.", "LabelWidthResolutions": "Largeur des résolutions", - "LabelTrickplayAccel": "Activer l'accélération matérielle", + "LabelTrickplayAccel": "Activer le décodage matériel", "LabelTrickplayAccelHelp": "Assurez-vous d'activer « Autoriser l'encodage MJPEG » dans Transcodage si votre matériel le prend en charge.", "NonBlockingScan": "Non bloquant - génération de files d'attente, puis retour", "BlockingScan": "Bloquant - génération de files d'attente, analyse des blocs jusqu'à la fin", @@ -1858,14 +1858,38 @@ "PlaybackError.MEDIA_NOT_SUPPORTED": "La lecture a échoué car le média n'est pas pris en charge par ce client.", "PlaybackError.NETWORK_ERROR": "La lecture a échoué à cause d'une erreur réseau.", "PlaybackError.NO_MEDIA_ERROR": "Impossible de trouver une source multimédia valide à lire.", - "PlaybackError.PLAYER_ERROR": "La lecture a échoué en raison d'une erreur fatale du joueur.", + "PlaybackError.PLAYER_ERROR": "La lecture a échoué en raison d'une erreur fatale du lecteur.", "LabelTrickplayAccelEncoding": "Activer l'encodage MJPEG accéléré par le matériel", "LabelTrickplayAccelEncodingHelp": "Actuellement disponible uniquement sur QSV et VAAPI, cette option n'a aucun effet sur les autres méthodes d'accélération matérielle.", "ErrorDeletingLyrics": "Une erreur est survenu lors de la suppression des paroles du serveur. S'il vous plaît verifier que Jellyfin peut modifier les fichier dans le dossier multimedia et réessayez.", - "HeaderDeleteLyrics": "Supprimez ces paroles", + "HeaderDeleteLyrics": "Suppression des paroles", "ConfirmDeleteLyrics": "En supprimant ces paroles vous les supprimez a la fois de votre systeme de fichier et de votre bibliothèque. Êtes vous sure de vouloir continuez ?", - "DeleteLyrics": "Supprimez ces paroles", - "HeaderNoLyrics": "Aucune paroles n'ont êtes trouves", + "DeleteLyrics": "Supprimer ces paroles", + "HeaderNoLyrics": "Aucune parole trouvée", "Lyrics": "Paroles", - "ViewLyrics": "Voir les paroles" + "ViewLyrics": "Voir les paroles", + "SavePassword": "Sauvegarder le mot de passe", + "EnableDts": "Activer DTS (DCA)", + "EnableDtsHelp": "N'activez cette option que si votre appareil prend en charge le DTS ou s'il est connecté à un lecteur audio compatible, sinon la lecture risque d'échouer.", + "EnableTrueHdHelp": "N'activez cette option que si votre appareil prend en charge la norme TrueHD ou s'il est connecté à un lecteur audio compatible, sinon la lecture risque d'échouer.", + "EnableTrueHd": "Activer le TrueHD", + "PlaylistError.CreateFailed": "Erreur lors de la création d'une liste de lecture", + "SaveLyricsIntoMediaFolders": "Enregistrer les paroles dans les dossiers média", + "PlaylistError.AddFailed": "Erreur d'ajout à la liste de lecture", + "SaveLyricsIntoMediaFoldersHelp": "Le stockage des paroles à côté des fichiers audio permet de les gérer plus facilement.", + "HeaderVideoAdvanced": "Vidéo avancée", + "PlaylistPublic": "Autoriser l'accès public", + "PlaylistPublicDescription": "Autoriser la lecture de cette liste de lecture par n'importe quel utilisateur connecté.", + "HeaderLyricDownloads": "Téléchargements des paroles", + "Illustrator": "Illustrateur", + "Author": "Auteur", + "LibraryScanFanoutConcurrencyHelp": "Nombre maximal de tâches en parallèle pour les scans de bibliothèque. Si vous définissez cette valeur à 0, la limite sera choisie en fonction du nombre de cœurs de votre système. ATTENTION : Définir une valeur trop élevée peut causer des problèmes avec les systèmes de fichiers en réseau ; si vous rencontrez des problèmes, diminuez cette valeur.", + "Colorist": "Coloriste", + "Creator": "Créateur", + "LibraryScanFanoutConcurrency": "Limite de tâches de scan de bibliothèque en parallèle", + "Translator": "Traducteur", + "Editor": "Éditeur", + "Inker": "Encreur", + "Letterer": "Lettreur", + "Penciller": "Crayonneur" } diff --git a/src/strings/he.json b/src/strings/he.json index b76b68354a..03525018f3 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1281,5 +1281,6 @@ "LabelMaxAudiobookResume": "דקות נותרות בספר המוקלט להמשך", "LabelMaxAudiobookResumeHelp": "כותרים נחשבים כנוגנו במלואם כאשר משך הזמן הנותר קטן יותר מערך זה.", "LabelMetadataReaders": "קוראי מטא-דאטה", - "LabelMetadataSavers": "שומרי מטא-דאטה" + "LabelMetadataSavers": "שומרי מטא-דאטה", + "PlaybackError.RateLimitExceeded": "מדיה" } diff --git a/src/strings/hr.json b/src/strings/hr.json index e0e701b611..053ba990c4 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -1071,7 +1071,7 @@ "ButtonUseQuickConnect": "Omogući brzo povezivanje", "ButtonActivate": "Aktiviraj", "AllowedRemoteAddressesHelp": "Popis IP adresa ili mrežnih maska odvojen zarezom za mreže kojima će biti dopušten udaljeni pristup. Ako ostane prazno, bit će dopuštene sve udaljene adrese.", - "AllowFfmpegThrottlingHelp": "Kada se transkodira ili remiks dovoljno udalji od trenutne pozicije reprodukcije, zaustavite postupak tako da će potrošiti manje resursa. Ovo je najkorisnije kada gledate bez čestog traženja. Isključite ovo ako imate problema s reprodukcijom.", + "AllowFfmpegThrottlingHelp": "Kada se transkodira ili se remuks dovoljno udalji od trenutne pozicije reprodukcije, zaustavite postupak tako da se troši manje resursa. Ovo je najkorisnije kada gledate bez čestog traženja. Isključite ovo ako imate problema s reprodukcijom.", "BurnSubtitlesHelp": "Odredite treba li server snimati titlove tijekom transkodiranja videozapisa. Izbjegavanje toga uvelike će poboljšati performanse. Odaberite Automatski za snimanje slikovnih formata (VobSub, PGS, SUB, IDX itd.) i određenih ASS ili SSA titlova.", "BoxSet": "Komplet", "Authorize": "Ovlastite", @@ -1512,7 +1512,7 @@ "ShowYear": "Prikaži godinu", "LabelLocalCustomCss": "Prilagođeni CSS kod za stil koji se odnosi samo na ovog klijenta. Možda ćete htjeti onemogućiti prilagođeni CSS kod poslužitelja.", "LabelPlayerDimensions": "Dimenzije izvođača", - "LabelSegmentKeepSecondsHelp": "Vrijeme u sekundama za koje se segmenti trebaju čuvati prije nego što se prebrišu. Mora biti veći od \"Throttle after\". Radi samo ako je omogućeno brisanje segmenta.", + "LabelSegmentKeepSecondsHelp": "Vrijeme u sekundama za koje se segmenti trebaju čuvati prije nego što se prebrišu. Radi samo ako je omogućeno brisanje segmenta.", "LabelKnownProxies": "Poznati proxy-i", "ButtonBackspace": "Backspace", "LabelHomeScreenSectionValue": "{0}. odjeljak početne", diff --git a/src/strings/hu.json b/src/strings/hu.json index 49b416302f..534ba445c2 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -142,7 +142,7 @@ "HeaderSeasons": "Évadok", "HeaderSelectMetadataPath": "Válaszd ki a metaadat útvonalat", "HeaderSendMessage": "Üzenet küldése", - "HeaderSetupLibrary": "Média könyvtárak beállítása", + "HeaderSetupLibrary": "Állítsd be a média könyvtáraidat", "HeaderSortBy": "Megjelenítés", "HeaderSortOrder": "Sorrend", "HeaderStatus": "Állapot", @@ -482,7 +482,7 @@ "ButtonSelectView": "Válassz nézetet", "ButtonStart": "Indítás", "CancelRecording": "Felvétel törlése", - "CancelSeries": "Sorozat törlése", + "CancelSeries": "Sorozat visszavonása", "Categories": "Kategóriák", "ChangingMetadataImageSettingsNewContent": "A metaadatok vagy az artwork fileok letöltési beállításainak módosítása csak a könyvtárhoz hozzáadott új tartalomra vonatkozik. A meglévő címek módosításainak alkalmazásához manuálisan kell frissíteni a metaadatokat.", "ChannelAccessHelp": "Válaszd ki a megosztani kívánt csatornákat a felhasználóval. A rendszergazdák a metaadatkezelő segítségével szerkeszthetik az összes csatornát.", @@ -494,8 +494,8 @@ "Composer": "Zeneszerző", "ConfigureDateAdded": "Állítsa be, hogy a „Hozzáadás Dátuma” metaadatok hogyan legyenek meghatározva az Irányítópult > Könyvtárak > NFO-beállítások menüpontban", "ConfirmDeleteImage": "Kép törlése?", - "ConfirmDeleteItem": "Az elem törlése mind a fájlrendszerből, mind a médiakönyvtárból törlődik. Biztosan folytatni akarod?", - "ConfirmDeleteItems": "Az elem törlése mind a fájlrendszerből, mind a médiakönyvtárból törlődik. Biztosan folytatni akarod?", + "ConfirmDeleteItem": "Az elem törlésével az törlődni fog a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", + "ConfirmDeleteItems": "Az elemek törlésével azok törlődni fognak a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", "ConfirmDeletion": "Törlés megerősítése", "ConfirmEndPlayerSession": "Szeretnéd leállítani a Jellyfin-t {0}?", "ContinueWatching": "Megtekintés folytatása", @@ -563,7 +563,7 @@ "HeaderActivity": "Tevékenységek", "HeaderAdditionalParts": "További részek", "HeaderAdmin": "Felügyelet", - "HeaderAlbumArtists": "Albumelőadók", + "HeaderAlbumArtists": "Album előadók", "HeaderAlert": "Figyelem", "HeaderAllowMediaDeletionFrom": "Médiatörlés engedélyezése innen", "HeaderApiKey": "API kulcs", @@ -1114,7 +1114,7 @@ "EnableStreamLooping": "Élő műsorfolyamok automatikus újrajátszása", "EnableStreamLoopingHelp": "Kapcsold be, ha az élő stream csak néhány másodpercnyi adatot tartalmaz és folyamatosan újra kell kérni. Ennek szükségtelen bekapcsolása problémát okozhat.", "Guide": "Műsorújság", - "H264CrfHelp": "A 'Constant Rate Factor' (CRF) az alapértelmezett minőségi beállítás az x264 és x265 enkóderhez. Az értékek 0 és 51 között állíthatók, ahol az alacsonyabb érték jobb minőséget eredményez (nagyobb fájl méret mellett). Az ajánlott érték 18 és 28 között van. Az x264 alapértelmezett beállítása 23, x265-é 28, ez lehet kiindulási alap.", + "H264CrfHelp": "A 'Constant Rate Factor' (CRF) az alapértelmezett minőségi beállítás az x264 és x265 enkóderekhez. Az értékek 0 és 51 között állíthatók, ahol az alacsonyabb érték jobb minőséget eredményez (nagyobb fájl méret mellett). Az ajánlott érték 18 és 28 között van. Az x264 alapértelmezett beállítása 23, x265-é 28, ez lehet kiindulási alap. A hardveresen gyorsított enkóderek nem használják ezt a beállítást.", "HeaderApiKeysHelp": "A külső alkalmazásoknak egy API kulcsra van szüksége, hogy kommunikáljanak a szerverrel. A kulcsokat egy fiókkal történő belépéssel lehet megkapni, vagy kézileg felvenni egy alkalmazáshoz tartozó kulcsot.", "HeaderBranding": "Személyes arculat", "HeaderContinueListening": "Folyamatban lévő zenék", @@ -1397,7 +1397,7 @@ "LabelTonemappingRange": "Tónusleképezés tartomány", "TonemappingAlgorithmHelp": "A tónusleképezés finomhangolható. Ha még nem ismered ezeket az opciókat, tartsd meg az alapértelmezett értéket. Az ajánlott érték 'BT.2390'.", "LabelTonemappingAlgorithm": "Válaszd ki a használni kívánt tónusleképezési algoritmust", - "AllowTonemappingHelp": "", + "AllowTonemappingHelp": "A tónusleképzés képes a HDR videók dinamika tartományát SDR tartományba átalakítani, miközben megtartja a kép színét és részleteit, ami elengedhetetlen az eredeti látvány megőrzéséhez. Jelenleg csak 10 bites HDR10, HLG és DoVi tartalmakon működik. Használatához szükséges a vonatkozó GPGPU szolgáltatás.", "EnableTonemapping": "Tónusleképezés engedélyezése", "LabelOpenclDeviceHelp": "Ez az OpenCL eszköz, amelyet a tónusleképezéshez használnak. A pont bal oldala a platform száma, a jobb oldala pedig a platformon található eszköz száma. Az alapértelmezett érték 0.0. Az OpenCL hardveres gyorsítási módszert tartalmazó FFmpeg alkalmazásfájl szükséges.", "LabelOpenclDevice": "OpenCL eszköz", @@ -1649,7 +1649,7 @@ "OriginalAirDate": "Eredeti megjelenési dátum", "MessageUnauthorizedUser": "Jelenleg nincs jogosultsága a szerver elérésére. További információért fordulj a szerver rendszergazdájához.", "Digital": "Digitális", - "EnableEnhancedNvdecDecoderHelp": "Kísérleti NVDEC implementáció, csak akkor engedélyezze ezt a lehetőséget, ha dekódolási hibákat észlel.", + "EnableEnhancedNvdecDecoderHelp": "Bővített NVDEC implementáció, csak akkor engedélyezze, ha dekódolási hibákat észlel.", "HomeVideosPhotos": "Otthoni videók és fotók", "Bold": "Félkövér", "LabelTextWeight": "Betűvastagság", @@ -1795,5 +1795,74 @@ "LabelServerVersion": "Szerver verzió", "AllowSubtitleManagement": "Feliratok szerkesztésének engedélyezése ennél a felhasználónál", "AllowContentWithTagsHelp": "Csak a megadott címkék legalább egyikével rendelkező médiát jeleníti meg.", - "AirPlay": "AirPlay" + "AirPlay": "AirPlay", + "LabelScanBehaviorHelp": "A kiindulási magatartás nem blokkoló, tehát a tartalom a könyvtárba kerül a lejátszástrükk generálás befejezése előtt. A blokkoló magatartás meggátolja könyvtárba kerülést a generálás befejeződéséig, de lényegesen hosszabbá teszi a könyvtárak beolvasását.", + "PlaybackError.SERVER_ERROR": "A lejátszás meghiúsult kiszolgáló hiba miatt.", + "PlaybackError.NO_MEDIA_ERROR": "Nem található lejátszható tartalom.", + "BlockContentWithTagsHelp": "Rejtse el a legalább egy megadott címkével ellátott tartalmakat.", + "PlaybackError.NETWORK_ERROR": "A lejátszás meghiúsult hálózati hiba miatt.", + "PlaybackError.PLAYER_ERROR": "A lejátszás meghiúsult végzetes lejátszó hiba miatt.", + "SavePassword": "Jelszó mentése", + "LabelEncodingFormatOptions": "Enkóder formátum beállítások", + "EncodingFormatHelp": "Válaszd ki, hogy a Jellyfin melyik enkódert használja. Ha hardveres gyorsítás nem elérhető a választott enkóderhez, a Jellyfin szoftver enkódert fog helyette használni. A H264 enkóder mindig engedélyezve lesz.", + "Trickplay": "Lejátszótrükk", + "PlaybackError.MEDIA_DECODE_ERROR": "A lejátszás meghiúsult tartalom dekódolási hiba miatt.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "A lejátszás meghiúsult, mert a tartalmat a kliens nem támogatja.", + "PlaybackError.NotAllowed": "Ennek a tartalomnak a lejátszása nem engedélyezett.", + "BlockingScan": "Blokkoló - beütemezi a generációt és blokkolja a tartalom keresést ameddig elkészül", + "LabelTrickplayAccelEncodingHelp": "Jelenleg csak QSV és VAAPI gyorsítókon elérhető, más hardveres gyorsítókat nem befolyásol.", + "PriorityHigh": "Magas", + "LabelTrickplayAccelEncoding": "Hardveresen gyorsított MJPEG enkódolás engedélyezése", + "ConfirmDeleteLyrics": "A dalszövegek törlésével azok törlődni fognak a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", + "DeleteEntireSeries": "{0} Epizód törlése", + "DeleteEpisode": "Epizód törlése", + "DeleteLyrics": "Dalszövegek törlése", + "DeleteSeries": "Sorozat törlése", + "DeleteName": "{0} Törlése", + "ErrorDeletingLyrics": "A dalszövegek törlése közben hiba lépett fel. Kérlek ellenőrizd, hogy a Jellyfin rendelkezik e írási jogosultsággal a könyvtárhoz, majd próbáld újra.", + "HeaderDeleteSeries": "Sorozat törlése", + "HeaderDeleteLyrics": "Dalszövegek Törlése", + "HeaderNoLyrics": "Nem található dalszöveg", + "LimitSupportedVideoResolutionHelp": "Használja a maximum engedélyezett videó átkódolási felbontást a maximum támogatott videó felbontásként.", + "Lyric": "Dalszöveg", + "Lyrics": "Dalszövegek", + "PlaybackError.RateLimitExceeded": "Ez a tartalom jelenleg nem játszható adatkorlát miatt.", + "ViewLyrics": "Dalszövegek megtekintése", + "EnableVideoToolboxTonemapping": "VideoToolbox tónusleképzés engedélyezése", + "AllowVideoToolboxTonemappingHelp": "Hardveresen gyorsított tónusleképzés a VideoToolbox-tól. Képes a HDR10, HDR10+ és HLG formátumok dekódolására, de nem támogatja a Dolby Vision Profile 5-öt. Ez magasabb prioritású más Metal implementációkhoz képest.", + "PriorityAboveNormal": "Normális feletti", + "PriorityNormal": "Normális", + "PriorityBelowNormal": "Normális alatti", + "PriorityIdle": "Üresjárat", + "EnableLibrary": "Könyvtár engedélyezése", + "EnableLibraryHelp": "Könyvtár tiltása, miközben rejtve marad az összes felhasználó elől.", + "LabelProcessPriority": "Folyamat prioritása", + "EnableSmoothScroll": "Folyékony görgetés engedélyezése", + "LabelAllowContentWithTags": "Engedje a címkézett elemeket", + "LimitSupportedVideoResolution": "Korlátozza a maximális támogatott videó felbontást", + "PlaybackError.ASS_RENDER_ERROR": "Hiba történt az ASS/SSA feliratok renderelésekor.", + "PlaybackError.FATAL_HLS_ERROR": "Végzetes hiba jelentkezett a HLS stream-ben.", + "LabelTrickplayAccel": "Hardveres dekódolás engedélyezése", + "NonBlockingScan": "Nem blokkoló - beütemezi a generálást, majd visszatér", + "LabelScanBehavior": "Tartalom keresési magatartás", + "ConfirmDeleteSeries": "A sorozat törlésével törlődni fog az ÖSSZES {0} epizód a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", + "LabelQscaleHelp": "Az ffmpeg kimeneti képkockák minőségskálája, melyen 2 a legmagasabb és 31 a legalacsonyabb minőségi érték.", + "LabelTrickplayThreads": "FFmpeg szálak", + "LabelWidthResolutions": "Horizontális felbontás", + "ExtractTrickplayImagesHelp": "A lejátszástrükk képkockák hasonlóak a fejezetképekhez, de a tartalom teljes hosszában generálódnak hogy aztán a videó tekerésekor megjelenjenek az idővonalon előnézeteként.", + "LabelProcessPriorityHelp": "Ennek az alacsonyabbra vagy magasabbra állításával szabályozható, hogy a processzoron az ffmpeg lejátszástrükk generálás folyamata milyen prioritással fusson más folyamatokhoz képest. Ha lassulást tapasztal lejátszástrükk generálás közben, de nem akarja leállítani a folyamatot, próbálja meg csökkenteni a prioritást és a használt processzor szálak számát.", + "LabelImageInterval": "Kép intervallum", + "LabelTileWidth": "Csempe szélesség", + "LabelTileHeight": "Csempe magasság", + "LabelTileWidthHelp": "Csempén elhelyezkedő képek maximális száma vízszintesen.", + "LabelImageIntervalHelp": "Időintervallum (ms) lejátszástrükk képkockák között.", + "LabelJpegQuality": "JPEG minőség", + "LabelWidthResolutionsHelp": "A generálandó lejátszástrükk képkockák szélességének (px) vesszővel elválasztott listája. Minden képkocka a forrás képarányával arányos, így egy 320 széles 16:9 arányú képkocka felbontása körülbelül 320x180 lesz.", + "LabelJpegQualityHelp": "Lejátszástrükk képkockák JPEG tömörítési minősége.", + "LabelQscale": "Qskála", + "LabelTileHeightHelp": "Csempén elhelyezkedő képek maximális száma függőlegesen.", + "LabelTrickplayThreadsHelp": "Az ffmpeg '-threads' argumentumának átadandó szálak száma.", + "OptionExtractTrickplayImage": "Lejátszástrükk képkockák kinyerésének engedélyezése", + "LabelExtractTrickplayDuringLibraryScan": "Lejátszástrükk képkockák kinyerése a könyvtár beolvasásakor", + "LabelExtractTrickplayDuringLibraryScanHelp": "Lejátszástrükk képkockák generálása könyvtár beolvasáskor a frissen importált videóknál. Ha nincs bekapcsolva, a lejátszástrükk képkockákat az erre ütemezett feladat fogja kinyerni. Nem blokkoló magatartás esetén ez nem befolyásolja a könyvtár beolvasás idejét." } diff --git a/src/strings/id.json b/src/strings/id.json index fef3296620..dc048bc640 100644 --- a/src/strings/id.json +++ b/src/strings/id.json @@ -915,11 +915,11 @@ "MinutesAfter": "Menit Setelah", "MetadataManager": "Manajer Metadata", "Metadata": "Metadata", - "MessageSyncPlayErrorMedia": "Gagal Mengaktifkan SyncPlay! Media Error cok.", + "MessageSyncPlayErrorMedia": "Gagal Mengaktifkan SyncPlay! Media Error.", "MessageSyncPlayErrorMissingSession": "SyncPlay gagal! Sesi Hilang njir...", "MessageSyncPlayErrorNoActivePlayer": "SyncPlay dimatikan. Tidak ada pemutar aktif.", "MessageSyncPlayErrorAccessingGroups": "Muncul Error ketika mengakses list grup.", - "MessageSyncPlayLibraryAccessDenied": "Akses konten ini Dibatasi cok.", + "MessageSyncPlayLibraryAccessDenied": "Akses konten ini Dibatasi.", "MessageSyncPlayJoinGroupDenied": "Tidak dapat bergabung dengan grup.", "MessageSyncPlayCreateGroupDenied": "ijin diperlukan untuk membuat grup.", "MessageSyncPlayGroupDoesNotExist": "Gagal bergabung dengan grup karena tidak ada njing!.", @@ -1681,5 +1681,7 @@ "AllowCollectionManagement": "Izinkan pengguna ini untuk mengatur koleksi", "AllowSegmentDeletion": "Hapus segmen", "LabelThrottleDelaySeconds": "Batasi setelah", - "LabelSegmentKeepSeconds": "" + "LabelSegmentKeepSeconds": "Waktu untuk menetapkan segmen", + "AllowSubtitleManagement": "Izinkan user untuk mengubah tarakir", + "AllowSegmentDeletionHelp": "Hapus bagian lama setelah terunduh oleh pengguna. Fitur ini akan mencegah penyimpanan file teralihsandikan ke dalam penyimpanan. Matikan fitur ini jika terjadi masalah dalam pemutaran." } diff --git a/src/strings/it.json b/src/strings/it.json index 40c814541e..24649913bc 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1264,7 +1264,7 @@ "ListPaging": "{0}-{1} di {2}", "WriteAccessRequired": "Jellyfin richiede il permesso di scrittura su questa cartella. Verificare l'autorizzazione e riprovare.", "PathNotFound": "Percorso non trovato. Assicurarsi che sia valido e riprovare.", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "Season": "Stagione", "Movie": "Film", "LabelLibraryPageSizeHelp": "Numero di elementi presenti nella paginazione della libreria. Il valore 0 disabilita la paginazione.", @@ -1369,7 +1369,7 @@ "Image": "Immagine", "Other": "Altro", "Data": "Dati", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "UseDoubleRateDeinterlacing": "Raddoppia il frame rate durante il deinterlacciamento", "KnownProxiesHelp": "Lista degli IP o hostname separati da virgola dei proxy utilizzati per connettersi a Jellyfin. Ciò consente di gestire al meglio gli header 'X-Forwarded-For'. Richiede il riavvio dopo il salvataggio.", "LabelKnownProxies": "Proxy conosciuti", @@ -1721,7 +1721,7 @@ "LabelEnableAudioVbr": "Abilita codifica audio VBR", "LabelEnableAudioVbrHelp": "Il bitrate variabile offre una migliore qualità rispetto al rapporto bitrate medio, ma in alcuni rari casi può causare problemi di buffering e compatibilità.", "LabelParallelImageEncodingLimit": "Limite codifica parallela delle immagini", - "LabelParallelImageEncodingLimitHelp": "Numero massimo di codifiche di immagini che possono essere eseguite in parallelo. Impostandolo su 0 sceglierai un limite basato sulle specifiche del tuo sistema.", + "LabelParallelImageEncodingLimitHelp": "Numero massimo di codifiche di immagini che possono essere eseguite in parallelo. Impostandolo su 0 sceglierai un limite basato sul numero di core del sistema.", "PreferEmbeddedExtrasTitlesOverFileNames": "Preferisci i titoli incorporati ai nomi dei file per gli extra", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Gli extra hanno spesso lo stesso nome incorporato del parent, controlla questo per usare comunque titoli incorporati per loro.", "SaveRecordingImagesHelp": "Salva le immagini dal fornitore di elenchi EPG insieme ai media.", @@ -1867,5 +1867,23 @@ "HeaderDeleteLyrics": "Cancella Testi", "HeaderNoLyrics": "Nessun testo trovato", "Lyrics": "Testi", - "ViewLyrics": "Visualizza testi" + "ViewLyrics": "Visualizza testi", + "PlaylistError.AddFailed": "Errore nell'aggiunta alla playlist", + "PlaylistError.CreateFailed": "Errore nella creazione della playlist", + "SavePassword": "Salva Password", + "Author": "Autore", + "Creator": "Creatore", + "Editor": "Editore", + "Illustrator": "Illustratore", + "Letterer": "Paroliere", + "SaveLyricsIntoMediaFolders": "Salva le liriche nella cartella dei media", + "Translator": "Traduttore", + "EnableDts": "Abilita DTS (DCA)", + "EnableDtsHelp": "Abilitare solo se il device supporta DTS o se connesso a un ricevitore audio compatibile, altrimenti può causare errori di riproduzione.", + "EnableTrueHd": "Abilita TrueHD", + "EnableTrueHdHelp": "Abilita solo se il device supporta TrueHD o se connesso a un ricevitore audio compatibile, altrimenti può causare errori di riproduzione.", + "HeaderVideoAdvanced": "Avanzate Video", + "PlaylistPublic": "Consenti accesso pubblico", + "PlaylistPublicDescription": "Consenti che questa playlist sia visibile ad ogni utente loggato.", + "HeaderLyricDownloads": "Downloads Liriche" } diff --git a/src/strings/ja.json b/src/strings/ja.json index 46f5e3202a..b9cf409cb1 100644 --- a/src/strings/ja.json +++ b/src/strings/ja.json @@ -190,7 +190,7 @@ "ColorTransfer": "Color transfer", "DeathDateValue": "死亡日:{0}", "Depressed": "陰鬱", - "ErrorAddingListingsToSchedulesDirect": "Schedules Directのアカウントにラインナップを追加中にエラーが発生しました。 スケジュールダイレクトでは、アカウントごとに限られた数のラインナップしか許可されません。続けるには、Schedules Direct にログインしてアカウントから他のリストを削除する必要があります。", + "ErrorAddingListingsToSchedulesDirect": "Schedules Direct のアカウントにラインナップを追加中にエラーが発生しました。Schedules Direct では、アカウントごとに限られた数のラインナップしか許可されません。続けるには、Schedules Direct にログインしてアカウントから他のリストを削除する必要があります。", "ErrorAddingMediaPathToVirtualFolder": "メディアパスの追加中にエラーが発生しました。 パスが有効で、Jellyfin がその場所にアクセスできることを確認してください。", "ErrorAddingTunerDevice": "チューナーデバイスの追加中にエラーが発生しました。 アクセス可能であることを確認して、もう一度やり直してください。", "ErrorAddingXmlTvFile": "XMLTV ファイルへのアクセス中にエラーが発生しました。 ファイルが存在することを確認して、やり直してください。", @@ -227,7 +227,7 @@ "Guide": "ガイド", "GuideProviderLogin": "ログイン", "GuideProviderSelectListings": "リストを選択", - "H264CrfHelp": "Constant Rate Factor」(CRF)は、x264 および x265 エンコーダのデフォルトの品質設定です。0 から 51 の間で値を設定することができ、低い値はより良い品質となります(より高いファイルサイズを犠牲にして)。正常な値は18と28の間です。x264のデフォルトは23、x265のデフォルトは28なので、これを出発点として使用することができます。", + "H264CrfHelp": "「Constant Rate Factor」(CRF)は、x264 および x265 ソフトウェアエンコーダのデフォルトの品質設定です。0 から 51 の間で値を設定することができ、低い値はより良い品質となります(より高いファイルサイズを犠牲にして)。正常な値は18と28の間です。x264のデフォルトは23、x265のデフォルトは28なので、これを出発点として使用することができます。ハードウェアエンコーダーはこれらの設定を使用しません。", "EncoderPresetHelp": "パフォーマンスを向上させるには小さい値を、品質を向上させるには大きい値を選んでください。", "HDPrograms": "HD番組", "HardwareAccelerationWarning": "ハードウェアアクセラレーションを有効にすると、環境によっては不安定になる可能性があります。 オペレーティングシステムとビデオドライバが完全に最新であることを確認してください。 これを有効にした後でビデオの再生が困難な場合は、設定を[なし]に戻す必要があります。", @@ -713,7 +713,7 @@ "LabelAlbumArtists": "アルバムアーティスト", "LabelAllowHWTranscoding": "ハードウェアトランスコーディングを許可", "LabelAllowedRemoteAddresses": "リモートIPアドレスフィルター", - "LabelAppNameExample": "例: スケートボード、ソナー", + "LabelAppNameExample": "API キーを識別するための人が判読できる名前。この設定は機能には影響しません。", "LabelArtists": "アーティスト", "LabelAudioBitDepth": "音声ビット深度", "LabelAudioBitrate": "音声ビットレート", @@ -1387,7 +1387,7 @@ "LabelTonemappingRange": "トーンマッピングの範囲", "TonemappingAlgorithmHelp": "トーンマッピングは微調整が可能です。これらのオプションに慣れていない場合は、デフォルトのままにしておいてください。推奨値は'BT.2390'です。", "LabelTonemappingAlgorithm": "使用するトーンマッピング アルゴリズムを選択", - "AllowTonemappingHelp": "トーンマッピングは、元のシーンを表現するのに非常に重要な情報である画像のディテールや色を維持したまま、映像のダイナミックレンジを HDR から SDR に変換することができます。現在、10 ビット HDR、HLG と DoVi ビデオでのみ動作します。対応する OpenCL または CUDA ランタイムが必須です。", + "AllowTonemappingHelp": "トーンマッピングは、元のシーンを表現するのに非常に重要な情報である画像のディテールや色を維持したまま、映像のダイナミックレンジを HDR から SDR に変換することができます。現在、10 ビット HDR、HLG と DoVi ビデオでのみ動作します。対応する GPGPU ランタイムが必須です。", "EnableTonemapping": "トーンマッピングを有効化", "LabelOpenclDeviceHelp": "これはトーンマッピングに使用する OpenCL デバイスです。ドットの左側がプラットフォーム番号、右側がプラットフォーム上のデバイス番号となります。デフォルト値は 0.0。FFmpeg アプリケーションファイルは OpenCL ハードウェアアクセラレーションメソッドを含む必要があります。", "LabelOpenclDevice": "OpenCL デバイス", @@ -1415,8 +1415,8 @@ "ListPaging": "{2} 中の {0}-{1}", "WriteAccessRequired": "Jellyfin はこのフォルダへの書き込み権限を要求します。書き込みアクセスを確認してもう一度お試しください。", "PathNotFound": "パスを見つけることができませんでした。パスが有効であることを確認してもう一度お試しください。", - "Bwdif": "BWDIF", - "Yadif": "YADIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "XmlTvSportsCategoriesHelp": "これらのカテゴリの番組はスポーツ番組として表示されます。複数の場合は '|' で区切ってください。", "XmlTvPathHelp": "XMLTV ファイルのパス。Jellyfin はこのファイルを読み込んで定期的に更新を確認します。ファイルの作成と更新はあなたが責任を持って行ってください。", "XmlTvNewsCategoriesHelp": "これらのカテゴリの番組はニュース番組として表示されます。複数の場合は '|' で区切ってください。", @@ -1748,7 +1748,7 @@ "Unknown": "不明", "AllowCollectionManagement": "このユーザーにコレクションの管理を許可する", "AllowSegmentDeletion": "セグメントを削除", - "AllowSegmentDeletionHelp": "クライアントに送信した古いセグメントを削除します。トランスコードしたファイル全体をディスクに保存しておくことはできなくなります。「スロットル」が有効の場合にのみ動作します。再生に問題が起きたら、オフにしてください。", + "AllowSegmentDeletionHelp": "クライアントによりダウンロードされた古いセグメントを削除します。トランスコードしたファイル全体をディスクに保存しておくことはできなくなります。再生に問題が起きたら、オフにしてください。", "LabelThrottleDelaySeconds": "スロットルまでの時間", "LabelThrottleDelaySecondsHelp": "「スロットル」を行うまでの秒数。クライアントが安定して再生できるバッファーを維持するのに十分大きなサイズでなければなりません。「スロットル」が有効の場合にのみ動作します。", "LabelSegmentKeepSeconds": "セグメントの保存時間", @@ -1783,5 +1783,89 @@ "LabelWebVersion": "ウェブバージョン", "LabelTrackGain": "トラックゲイン", "ForeignPartsOnly": "強制/外国語パートのみ", - "HeaderGuestCast": "ゲストスター" + "HeaderGuestCast": "ゲストスター", + "AirPlay": "AirPlay", + "ChannelResolutionSD": "SD", + "LabelEncodingFormatOptions": "エンコーディングフォーマットのオプション", + "AllowSubtitleManagement": "このユーザーに字幕の編集を許可する", + "AllowContentWithTagsHelp": "指定したタグのうち、少なくとも1つが付けられているメディアのみ表示します。", + "EncodingFormatHelp": "Jellyfinがトランスコードする際の動画エンコーディングを選択してください。選択したフォーマットのハードウェアアクセラレーションが利用できない場合、Jellyfinはソフトウェアエンコーディングを使用します。H264エンコーディングは常に有効になります。", + "LabelTrickplayAccelEncoding": "ハードウェアアクセラレーションを使用したMJPEGエンコーディングを有効にする", + "LimitSupportedVideoResolution": "最大対応動画解像度を制限する", + "SavePassword": "パスワードを保存", + "LabelJpegQuality": "JPEG の品質", + "LabelAllowContentWithTags": "タグ付きのアイテムを許可する", + "PlaybackError.FATAL_HLS_ERROR": "HLSストリームで致命的なエラーが発生しました。", + "PlaybackError.PLAYER_ERROR": "プレーヤーの致命的なエラーにより、再生に失敗しました。", + "PlaybackError.SERVER_ERROR": "サーバーエラーにより、再生に失敗しました。", + "PlaybackError.NotAllowed": "このメディアの再生は許可されていません。", + "LabelScanBehavior": "スキャンの動作", + "OptionExtractTrickplayImage": "トリックプレイ画像の抽出を有効にする", + "EnableLibrary": "ライブラリーを有効にする", + "EnableSmoothScroll": "スムーズスクロールを有効にする", + "PlaybackError.ASS_RENDER_ERROR": "ASS/SSA字幕レンダラーでエラーが発生しました。", + "AllowVideoToolboxTonemappingHelp": "VideoToolboxによるハードウェアアクセラレーションを使用したトーンマッピングです。これは、HDR10、HDR10+、HLGなどのほとんどのHDRフォーマットで動作しますが、Dolby Vision Profile 5では動作しません。これは、他のMetal実装と比較して優先度が高くなっています。", + "LabelImageIntervalHelp": "新しいトリックプレイ画像が生成される時間間隔(ミリ秒)です。", + "ConfirmDeleteLyrics": "これらの歌詞を削除すると、ファイルシステムとメディアライブラリーの両方から削除されます。本当に続行しますか?", + "DeleteEntireSeries": "{0} つのエピソードを削除", + "DeleteLyrics": "歌詞を削除", + "DeleteEpisode": "エピソードを削除", + "DlnaMovedMessage": "DLNA機能がプラグインに移行されました。", + "ErrorDeletingLyrics": "サーバーから歌詞を削除する際にエラーが発生しました。Jellyfinがメディアフォルダへの書き込み権限を持っていることを確認して、もう一度お試しください。", + "HeaderNoLyrics": "歌詞が見つかりません", + "LimitSupportedVideoResolutionHelp": "「許可された最大動画トランスコード解像度」を最大対応動画解像度として使用します。", + "Lyrics": "歌詞", + "PlaybackError.MEDIA_DECODE_ERROR": "メディアのデコード中にエラーが発生したため、再生に失敗しました。", + "PlaybackError.MEDIA_NOT_SUPPORTED": "クライアントがこのメディアをサポートしていないため、再生に失敗しました。", + "PlaybackError.NETWORK_ERROR": "ネットワークエラーのため、再生に失敗しました。", + "PlaybackError.NO_MEDIA_ERROR": "再生できる有効なメディアソースが見つかりません。", + "ViewLyrics": "歌詞を表示", + "LabelTrickplayAccel": "ハードウェアデコーディングを有効にする", + "LabelTrickplayAccelEncodingHelp": "現在、QSVとVAAPIでのみ利用可能です。このオプションは、他のハードウェアアクセラレーション方式には影響しません。", + "LabelQscaleHelp": "ffmpeg で出力される画像のクオリティスケールで、2が最高品質、31が最低品質となります。", + "LabelTrickplayThreads": "FFmpeg のスレッド数", + "ExtractTrickplayImagesHelp": "トリックプレイ画像は、チャプター画像に似ていますが、コンテンツの全体にわたって使用され、ビデオをスクラブしているときにプレビューを表示するために使用されます。", + "LabelExtractTrickplayDuringLibraryScan": "ライブラリスキャン中にトリックプレイ画像を抽出する", + "Lyric": "歌詞", + "BlockContentWithTagsHelp": "指定したタグの少なくとも1つがあるメディアを隠します。", + "ChannelResolutionHD": "HD", + "ChannelResolutionFullHD": "Full HD", + "ChannelResolutionSDPAL": "SD (PAL)", + "DeleteName": "{0} を削除", + "ChannelResolutionUHD4K": "UHD (4K)", + "Colorist": "カラリスト", + "CoverArtist": "カバーアーティスト", + "HeaderDeleteSeries": "シリーズを削除", + "ConfirmDeleteSeries": "このシリーズを削除すると、システムとメディアライブラリーの両方から {0} エピソード「すべて」を削除することになります。本当に続行してもいいですか?", + "EnableLibraryHelp": "ライブラリーを無効化すると、すべてのユーザービューからライブラリーが非表示になります。", + "EnableDts": "DTS (DCA) を有効化", + "EnableDtsHelp": "デバイスが DTS をサポートしているか、互換性のある音声レシーバーに接続している場合にも見有効化してください。そうでなければ、再生が失敗する可能性があります。", + "EnableTrueHd": "TrueHD を有効化", + "EnableTrueHdHelp": "TrueHD をサポートするデバイスか、互換性のある音声レシーバーと接続した場合にのみ有効化してください。そうでなければ、再生が失敗する可能性があります。", + "HeaderDeleteLyrics": "歌詞を削除", + "DeleteSeries": "シリーズを削除", + "LabelProcessPriority": "プロセスの優先度", + "Author": "作者", + "Creator": "クリエイター", + "Editor": "編集者", + "Illustrator": "イラストレーター", + "Translator": "翻訳者", + "PriorityNormal": "普通", + "LabelTileWidth": "タイルの幅", + "LabelTileHeight": "タイルの高さ", + "PriorityIdle": "アイドル中", + "PlaybackError.RateLimitExceeded": "レート制限のため、現在このメディアは再生できません。", + "PriorityBelowNormal": "普通以下", + "PriorityAboveNormal": "普通以上", + "LabelImageInterval": "画像インターバル", + "PriorityHigh": "高", + "LabelTileWidthHelp": "X 方向のタイルあたりの画像の最大数。", + "LabelTileHeightHelp": "Y 方向のタイルあたりの画像の最大数。", + "LabelTrickplayThreadsHelp": "ffmpeg の「-threads」引数に渡すスレッドの数。", + "PlaylistPublic": "パブリックアクセスを許可", + "PlaylistPublicDescription": "ログインしているすべてのユーザーがこのプレイリストを閲覧できるようにします。", + "HeaderLyricDownloads": "歌詞のダウンロード", + "SaveLyricsIntoMediaFolders": "歌詞をメディアフォルダーに保存", + "SaveLyricsIntoMediaFoldersHelp": "歌詞をオーディオファイルの隣に保存すると、歌詞の管理がより簡単になります。", + "LabelWidthResolutions": "横の解像度" } diff --git a/src/strings/ka.json b/src/strings/ka.json index c53b230909..0905f2b261 100644 --- a/src/strings/ka.json +++ b/src/strings/ka.json @@ -51,5 +51,100 @@ "LabelThrottleDelaySecondsHelp": "წამთა ოდენობა, რის შემდეგაც ტრანსკოდირება იქნება შეფერხებული. უნდა იყოს საკმარისად ხანგრძლივი, იმისთვის რომ, კლიენტმა შეინარჩუნოს ჯანსაღი ბუფერი. მუშაობს მხოლოდ მაშინ, როდესაც შეფერხების ფუნქცია ჩართულია.", "LabelSegmentKeepSeconds": "მითითებული დროის განმავლობაში მონაკვეთები შეინახება", "AirPlay": "ეარფლეი", - "LabelThrottleDelaySeconds": "შემდეგ" + "LabelThrottleDelaySeconds": "შემდეგ", + "Audio": "აუდიო", + "AllowRemoteAccessHelp": "თუ არარის მონიშნული, ყველა გარე კავშირი დაიბლოკება.", + "AllowMediaConversionHelp": "მედიის კონვერტაციის უფლების მიცემა ან ჩამორთმევა.", + "AspectRatio": "ასპექტის თანაფარდობა", + "Auto": "ავტომატური", + "ButtonAddServer": "სერვერის დამატება", + "AllowOnTheFlySubtitleExtraction": "სუბტიტრების პროცესში ამოღების დაშვება", + "ButtonUninstall": "წაშლა", + "AllowMediaConversion": "მედიის კონვერტაციის დაშვება", + "AnyLanguage": "ნებისმიერი ენა", + "BlockContentWithTagsHelp": "ისეთი მედიის დამალვა, რომელსაც გააჩნია არჩეულებიდან ერთი თეგი მაინც.", + "ButtonParentalControl": "მშობლის კონტროლი", + "ChannelResolutionUHD4K": "UHD (4K)", + "AllowRemoteAccess": "ამ სერვერზე გარე კავშირების დაშვება", + "Artist": "მსახიობი", + "ButtonAddScheduledTaskTrigger": "ტრიგერის დამატება", + "ButtonRefreshGuideData": "გაიდის დატის გადატვირთვა", + "ButtonRename": "გადარქმევა", + "ChannelNameOnly": "მხოლოდ არხი {0}", + "ChannelNumber": "არხის ნომერი", + "Author": "ავტორი", + "Blacklist": "შავი სია", + "ButtonActivate": "აქტივაცია", + "ButtonAddMediaLibrary": "მედიის ბიბლიოთეკის დამატება", + "ButtonArrowLeft": "მარცხნივ", + "ButtonArrowRight": "მარჯვნივ", + "ButtonEditUser": "იუზერის რედაქტირება", + "ButtonForgotPassword": "პაროლი დამავიწყდა", + "ButtonPlayer": "ფლეერი", + "ButtonResume": "გაგრძელება", + "ButtonRevoke": "წართმევა", + "ButtonSelectView": "ხედვის არჩევა", + "ButtonSend": "გაგზავნა", + "ButtonStart": "დაწყება", + "CancelRecording": "ჩაწერვის გაუქმება", + "Categories": "კატეგორიები", + "ChannelResolutionFullHD": "Full HD", + "ClearQueue": "რიგის გასუფთავება", + "ClientSettings": "კლიენტის პარამეტრები", + "CommunityRating": "საზოგადოების რეიტინგი", + "Composer": "კომპოზიტორი", + "Conductor": "დირიჟორი", + "AlwaysPlaySubtitles": "ყოველთვის დაკვრა", + "AlwaysPlaySubtitlesHelp": "სუბტიტრები ჩაიტვირთება ენის პარამეტრის მიხედვით, აუდიოს ენის მიუხედავად.", + "Anytime": "ნებისმიერ დროს", + "ApiKeysCaption": "ამჟამად ჩართული API გასაღებთა სია", + "AroundTime": "დაახლოებით {0}", + "Arranger": "დამხარისხებელი", + "Ascending": "ზრდადი", + "AskAdminToCreateLibrary": "ბიბლიოთეკის შექმნისათვის, თხოვეთ ადმინისტრატორს.", + "AsManyAsPossible": "რაც შეიძლება მეტი", + "Authorize": "ნების დართვა", + "AuthProviderHelp": "აირჩიეთ აუტენთიფიკატორი რომელიც იქნება გამოყენებული იუზერის პაროლის აუტენთიფიკაციის დროს.", + "Banner": "ბანერი", + "BirthDateValue": "დაიბადა: {0}", + "BirthLocation": "დაბადების ადგილი", + "BirthPlaceValue": "დაბადების ადგილი: {0}", + "ButtonAddImage": "სურათის დამატება", + "ButtonAddUser": "იუზერის დამატება", + "ButtonAudioTracks": "აუდიო ხაზები", + "ButtonBack": "უკან", + "ButtonCancel": "გაუქმება", + "ButtonChangeServer": "სერვერის ცვლილება", + "ButtonEditOtherUserPreferences": "შეცვალეთ ამ იუზერის პროფილი, სურათი და პირადი პარამეტრები.", + "ButtonGotIt": "გასაგებია", + "ButtonInfo": "ინფო", + "ButtonManualLogin": "ხელით დალოგინება", + "ButtonMore": "კიდე", + "ButtonPause": "პაუზა", + "ButtonQuickStartGuide": "სწრაფი სტარტის გაიდი", + "ButtonRemove": "ამოღება", + "ButtonSignOut": "გამოსვლა", + "ButtonExitApp": "აპლიკაციის დახურვა", + "ButtonSpace": "სფეისი", + "ButtonSplit": "გახლეჩვა", + "ButtonTogglePlaylist": "ფლეილისთი", + "ButtonTrailer": "ტრეილერი", + "CancelSeries": "სერიალის გაუქმება", + "ButtonClose": "დახურვა", + "ButtonFullscreen": "მთელ ეკრანზე", + "ButtonScanAllLibraries": "ყველა ბიბლიოთეკის სკანირება", + "ButtonSelectDirectory": "დირექტორიის არჩევა", + "ButtonSubmit": "გაგზავნა", + "ButtonLibraryAccess": "წვდომა ბიბლიოთეკაზე", + "ButtonNextTrack": "შემდეგი თრექი", + "ButtonOk": "ოკ", + "ButtonPreviousTrack": "წინა თრექი", + "ButtonShutdown": "გამორთვა", + "ButtonSignIn": "შესვლა", + "ButtonStop": "გაჩერება", + "ButtonUseQuickConnect": "Quick Connect-ის გამოყენება", + "ButtonWebsite": "ვებსაიტი", + "ChannelResolutionHD": "HD", + "ChannelResolutionSD": "SD", + "ChannelResolutionSDPAL": "SD (PAL)" } diff --git a/src/strings/ko.json b/src/strings/ko.json index 3f1407177f..c9c0e99606 100644 --- a/src/strings/ko.json +++ b/src/strings/ko.json @@ -1774,5 +1774,46 @@ "ForeignPartsOnly": "강제/외부 파트만", "HearingImpairedShort": "청각장애/SDH", "HeaderGuestCast": "게스트", - "AirPlay": "AirPlay" + "AirPlay": "AirPlay", + "AllowContentWithTagsHelp": "지정된 태그 중 하나 이상이 포함된 미디어만 표시.", + "LibraryScanFanoutConcurrencyHelp": "라이브러리 스캔 중 최대 병렬 작업의 수입니다. 이 값을 0으로 설정하면 시스템 코어 수에 따라 제한됩니다. 경고: 이 숫자를 너무 높게 설정하면 네트워크 파일 시스템에 문제가 발생할 수 있습니다. 문제가 발생하면 이 숫자를 낮추십시오.", + "Lyric": "가사", + "AllowSubtitleManagement": "이 사용자가 자막을 편집하는 것을 허용", + "DlnaMovedMessage": "DLNA 기능은 플러그인으로 이동했습니다.", + "LabelBuildVersion": "빌드 버전", + "BlockContentWithTagsHelp": "지정된 태그 중 하나 이상이 포함된 미디어를 숨기기.", + "ButtonEditUser": "사용자 편집", + "LabelAllowContentWithTags": "태그가 있는 항목 허용", + "Author": "저자", + "ChannelResolutionSD": "SD", + "ChannelResolutionSDPAL": "SD (PAL)", + "ChannelResolutionHD": "HD", + "ChannelResolutionFullHD": "Full HD", + "ChannelResolutionUHD4K": "UHD (4K)", + "ConfirmDeleteSeries": "이 시리즈를 삭제하면 파일 시스템과 미디어 라이브러리 모두에서 모든 {0}개의 에피소드가 삭제됩니다. 계속하시겠습니까?", + "CoverArtist": "표지 아티스트", + "EnableSmoothScroll": "부드러운 스크롤 활성화", + "Illustrator": "일러스트레이터", + "LimitSupportedVideoResolution": "지원되는 최대 비디오 해상도 제한", + "DeleteEntireSeries": "{0}개의 에피소드 삭제", + "DeleteSeries": "시리즈 삭제", + "DeleteEpisode": "에피소드 삭제", + "EnableLibrary": "라이브러리 활성화", + "EnableLibraryHelp": "라이브러리를 비활성화하면 모든 사용자에게 라이브러리가 숨겨집니다.", + "EnableTrueHd": "TrueHD 활성화", + "EnableDts": "DTS (DCA) 활성화", + "EnableDtsHelp": "장치가 DTS를 지원하거나 호환되는 오디오 수신기에 연결된 경우에만 활성화하십시오. 그렇지 않으면 재생 오류가 발생할 수 있습니다.", + "EnableTrueHdHelp": "장치가 TrueHD를 지원하거나 호환되는 오디오 수신기에 연결된 경우에만 활성화하십시오. 그렇지 않으면 재생 오류가 발생할 수 있습니다.", + "Lyrics": "가사", + "DeleteName": "{0} 삭제", + "ConfirmDeleteLyrics": "이 가사를 삭제하면 파일 시스템과 미디어 라이브러리 모두에서 가사가 삭제됩니다. 계속하시겠습니까?", + "DeleteLyrics": "가사 삭제", + "ErrorDeletingLyrics": "서버에서 가사를 삭제하는 중에 오류가 발생했습니다. Jellyfin에 미디어 폴더에 대한 쓰기 권한이 있는지 확인하고 다시 시도해 주세요.", + "HeaderAllRecordings": "모든 녹음", + "HeaderDeleteSeries": "시리즈 삭제", + "HeaderDeleteLyrics": "가사 삭제", + "HeaderNoLyrics": "가사가 발견되지 않음", + "LabelWebVersion": "웹 버전", + "HeaderLyricDownloads": "가사 다운로드", + "LabelServerVersion": "서버 버전" } diff --git a/src/strings/mt.json b/src/strings/mt.json index d00dc1217b..288b22613f 100644 --- a/src/strings/mt.json +++ b/src/strings/mt.json @@ -6,17 +6,44 @@ "AllEpisodes": "L-episodji kollha", "AllLanguages": "Il-lingwi kollha", "AllLibraries": "Il-libreriji kollha", - "AccessRestrictedTryAgainLater": "Bħalissa l-aċċess huwa ristrett. Jekk jogħgbok erġa' prova iktar tard.", + "AccessRestrictedTryAgainLater": "L-aċċess bħalissa huwa ristrett. Jekk jogħgbok erġa' pprova aktar tard.", "Actor": "Attur", "Add": "Żid", - "AddedOnValue": "{0} Miżjuda", + "AddedOnValue": "{0} miżjud", "AddToCollection": "Żid fil-kollezzjoni", "AddToFavorites": "Żid fil-lista tal-favoriti", "AgeValue": "({0} snin)", "AirDate": "Data tax-xandir", "Aired": "Imxandar", "Albums": "Albums", - "All": "Kollox", + "All": "Kollha", "AllChannels": "L-istazzjonijiet kollha", - "AllComplexFormats": "Il-formats ikkumplikati kollha (ASS, SSA, VobSub, PGS, SUB, IDX, …)" + "AllComplexFormats": "Il-formats kumplessi kollha (ASS, SSA, VobSub, PGS, SUB, IDX, …)", + "AirPlay": "AirPlay", + "Alerts": "Twissijiet", + "AlbumArtist": "Artist tal-Album", + "AllowedRemoteAddressesHelp": "Lista separata b'virgola ta' indirizzi IP jew entrati ta' IP/netmask għal netwerks li se jitħallew jikkonnettjaw remotament. Jekk titħalla vojta, l-indirizzi remoti kollha jkunu permessi.", + "AllowCollectionManagement": "Ħalli lil dan l-utent jimmaniġġja l-kollezzjonijiet", + "AllowContentWithTagsHelp": "Uri biss midja b'mill-inqas waħda mit-tags speċifikati.", + "AllowSubtitleManagement": "Ħalli lil dan l-utent jeditja s-sottotitli", + "Artists": "Artisti", + "Collections": "Kollezzjonijiet", + "Genres": "Ġeneri", + "HeaderContinueWatching": "Kompli Segwi", + "Favorites": "Favoriti", + "Books": "Kotba", + "Channels": "Kanali", + "HeaderAlbumArtists": "Artisti tal-album", + "AllowSegmentDeletionHelp": "Ħassar segmenti qodma wara li jkunu ġew imniżżla mill-klijent. Dan jipprevjeni li jkollu jaħżen il-fajl kollu transkodifikat fuq disk. Itfi din jekk ikollok problemi ta' daqq.", + "AllowSegmentDeletion": "Ħassar segmenti", + "LabelSegmentKeepSeconds": "Żmien li żżomm is-segmenti", + "Shows": "Programmi", + "Default": "Standard", + "Playlists": "Playlists", + "Folders": "Folders", + "Photos": "Ritratti", + "Songs": "Kanzunetti", + "Movies": "Films", + "MusicVideos": "Vidjows tal-Mużika", + "ValueSpecialEpisodeName": "Speċjali - {0}" } diff --git a/src/strings/nl.json b/src/strings/nl.json index 0a99698043..8b2f8522b7 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -410,10 +410,10 @@ "LabelAllowedRemoteAddresses": "Filter externe IP-adressen", "LabelAllowedRemoteAddressesMode": "Filtermodus externe IP-adressen", "LabelAppName": "Applicatienaam", - "LabelAppNameExample": "Voorbeeld: Sickbeard, Sonarr", + "LabelAppNameExample": "Een leesbare naam om de API-sleutel te herkennen. Deze instelling heeft geen invloed op de functionaliteit.", "LabelArtists": "Artiesten", "LabelArtistsHelp": "Scheid meerdere artiesten met een puntkomma.", - "LabelAudioLanguagePreference": "Voorkeurstaal geluid", + "LabelAudioLanguagePreference": "Gewenste geluidstaal", "LabelAutomaticallyRefreshInternetMetadataEvery": "Metadata automatisch vernieuwen van het internet", "LabelBindToLocalNetworkAddress": "Koppelen aan lokaal netwerkadres", "LabelBindToLocalNetworkAddressHelp": "Overschrijf het lokale IP-adres voor de HTTP server. Indien leeg gelaten, zal de server koppelen aan alle beschikbare adressen. Het veranderen van deze waarde vereist een herstart.", @@ -481,7 +481,7 @@ "LabelEnableDlnaServerHelp": "Sta UPnP-apparaten op je netwerk toe om door inhoud te bladeren en deze af te spelen.", "LabelEnableHardwareDecodingFor": "Hardwaredecodering inschakelen voor", "LabelEnableRealtimeMonitor": "Real-time monitoring inschakelen", - "LabelEnableRealtimeMonitorHelp": "Wijzigingen aan bestanden worden op ondersteunde bestandssystemen direct verwerkt.", + "LabelEnableRealtimeMonitorHelp": "Op ondersteunde bestandssystemen worden wijzigingen aan bestanden direct verwerkt.", "LabelEnableSingleImageInDidlLimit": "Beperken tot een enkele ingesloten afbeelding", "LabelEnableSingleImageInDidlLimitHelp": "Sommige apparaten zullen niet goed weergeven als er meerdere afbeeldingen ingesloten zijn in DIDL.", "LabelEndDate": "Einddatum", @@ -550,11 +550,11 @@ "LabelMessageText": "Berichttekst", "LabelMessageTitle": "Berichttitel", "LabelMetadataDownloadLanguage": "Voorkeurstaal voor downloads", - "LabelMetadataDownloadersHelp": "Rangschik je voorkeursdownloaders voor metadata op volgorde van prioriteit. Downloaders met lagere prioriteit zullen alleen worden gebruikt om de ontbrekende informatie in te vullen.", + "LabelMetadataDownloadersHelp": "Rangschik je voorkeursophalers voor metadata op volgorde van prioriteit. Ophalers met lagere prioriteit zullen alleen worden gebruikt om de ontbrekende informatie in te vullen.", "LabelMetadataPath": "Metadata-pad", "LabelMetadataPathHelp": "Geef een aangepaste locatie op voor gedownloade afbeeldingen en metadata.", "LabelMetadataReaders": "Metadata-lezers", - "LabelMetadataReadersHelp": "Rangschik de gewenste lokale metadata-bronnen op volgorde van prioriteit. Het eerstgevonden bestand zal worden gelezen.", + "LabelMetadataReadersHelp": "Rangschik je voorkeursbronnen voor lokale metadata op volgorde van prioriteit. Het eerstgevonden bestand zal worden gelezen.", "LabelMetadataSavers": "Metadata-opslag", "LabelMetadataSaversHelp": "Kies de bestandsindeling om je metadata in op te slaan.", "LabelMethod": "Methode", @@ -602,8 +602,8 @@ "LabelPostProcessor": "Nabewerkingstoepassing", "LabelPostProcessorArguments": "Opdrachtpromptargumenten nabewerking", "LabelPostProcessorArgumentsHelp": "Gebruik {path} als het pad naar het opnamebestand.", - "LabelPreferredDisplayLanguage": "Weergavetaal (voorkeur)", - "LabelPreferredSubtitleLanguage": "Voorkeurstaal ondertiteling", + "LabelPreferredDisplayLanguage": "Gewenste weergavetaal", + "LabelPreferredSubtitleLanguage": "Gewenste ondertitelingstaal", "LabelProfileAudioCodecs": "Geluidscodecs", "LabelProfileCodecsHelp": "Gescheiden door een komma. Dit kan leeg worden gelaten om te laten gelden voor alle codecs.", "LabelProfileContainersHelp": "Gescheiden door een komma. Dit kan leeg worden gelaten om te laten gelden voor alle containers.", @@ -637,8 +637,8 @@ "LabelServerHost": "Host", "LabelServerHostHelp": "192.168.1.100:8096 of https://mijnserver.nl", "LabelSimultaneousConnectionLimit": "Limiet gelijktijdige streams", - "LabelSkipBackLength": "Terugspoellengte", - "LabelSkipForwardLength": "Vooruitspoellengte", + "LabelSkipBackLength": "Stapgrootte terugspringen", + "LabelSkipForwardLength": "Stapgrootte vooruitspringen", "LabelSkipIfAudioTrackPresent": "Overslaan als het standaard geluidsspoor overeenkomt met de taal van de download", "LabelSkipIfAudioTrackPresentHelp": "Vink dit uit om ervoor te zorgen dat alle video's ondertiteling krijgen, ongeacht de geluidstaal.", "LabelSkipIfGraphicalSubsPresent": "Overslaan als de video al ingesloten ondertiteling heeft", @@ -649,7 +649,7 @@ "LabelSortOrder": "Sorteervolgorde", "LabelSortTitle": "Sorteertitel", "LabelSource": "Bron", - "LabelSpecialSeasonsDisplayName": "Weergavenaam speciaal seizoen", + "LabelSpecialSeasonsDisplayName": "Weergavenaam specials-seizoen", "LabelSportsCategories": "Sportcategorieën", "LabelStartWhenPossible": "Starten indien mogelijk", "LabelStopWhenPossible": "Stoppen indien mogelijk", @@ -917,7 +917,7 @@ "PleaseSelectTwoItems": "Selecteer ten minste twee items.", "MessagePluginInstalled": "De plug-in is succesvol geïnstalleerd. De server moet opnieuw worden opgestart om de wijzigingen door te voeren.", "PreferEmbeddedTitlesOverFileNames": "Ingesloten titels boven bestandsnamen verkiezen", - "PreferEmbeddedTitlesOverFileNamesHelp": "Bepaal de standaard weergavetitel wanneer er geen internetmetadata of lokale metadata beschikbaar is.", + "PreferEmbeddedTitlesOverFileNamesHelp": "Bepaal de standaard weergavetitel wanneer er geen internetmetadata of lokale metadata beschikbaar zijn.", "Premieres": "Premières", "Previous": "Vorige", "Primary": "Primair", @@ -990,7 +990,7 @@ "Shows": "Series", "Shuffle": "Willekeurig", "SimultaneousConnectionLimitHelp": "Het maximum aantal toegestane gelijktijdige streams. Geef 0 in voor geen limiet.", - "SkipEpisodesAlreadyInMyLibrary": "Neem geen afleveringen op die al in mijn bibliotheek aanwezig zijn", + "SkipEpisodesAlreadyInMyLibrary": "Geen afleveringen opnemen die al in mijn bibliotheek staan", "SkipEpisodesAlreadyInMyLibraryHelp": "Afleveringen zullen worden vergeleken met behulp van seizoens- en afleveringsnummers, indien beschikbaar.", "Small": "Klein", "SmallCaps": "Kleine letters", @@ -1007,7 +1007,7 @@ "Studios": "Studio's", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Deze instellingen hebben ook effect op afspelen naar Google Cast wanneer dit vanaf dit apparaat wordt gestart.", "SubtitleAppearanceSettingsDisclaimer": "De volgende instellingen zijn niet van toepassing op de hierboven genoemde grafische ondertiteling of ASS-/SSA-ondertiteling die hun eigen stijlen ingebouwd hebben.", - "SubtitleDownloadersHelp": "Schakel de gewenste ondertiteldownloaders in en rangschik ze op volgorde van prioritieit.", + "SubtitleDownloadersHelp": "Rangschik je voorkeursophalers voor ondertiteling op volgorde van prioritieit.", "Subtitles": "Ondertiteling", "Suggestions": "Suggesties", "Sunday": "Zondag", @@ -1072,7 +1072,7 @@ "ValueTimeLimitSingleHour": "Tijdslimiet: 1 uur", "Vertical": "Verticaal", "ViewAlbum": "Album weergeven", - "ViewPlaybackInfo": "Afspeelinfo weergeven", + "ViewPlaybackInfo": "Afspeelinformatie weergeven", "Watched": "Gekeken", "Wednesday": "Woensdag", "WelcomeToProject": "Welkom bij Jellyfin!", @@ -1157,7 +1157,7 @@ "OptionResElement": "'res'-element", "TV": "Tv", "LabelTypeMetadataDownloaders": "Metadata-downloaders ({0})", - "OptionLoginAttemptsBeforeLockout": "Bepaal hoeveel foutieve inlogpogingen kunnen plaatsvinden voordat de gebruiker buitengesloten wordt.", + "OptionLoginAttemptsBeforeLockout": "Bepaal hoeveel foutieve aanmeldpogingen kunnen plaatsvinden voordat de gebruiker buitengesloten wordt.", "Premiere": "Première", "TabPlugins": "Plug-ins", "LabelAudioSampleRate": "Bemonsteringsfrequentie geluid", @@ -1173,7 +1173,7 @@ "MusicLibraryHelp": "Bekijk de {0}muzieknaamgevingsgids{1}.", "LabelAudioBitDepth": "Bitdiepte geluid", "OptionRandom": "Willekeurig", - "PlaybackData": "Afspeelinfo", + "PlaybackData": "Afspeelinformatie", "PasswordResetProviderHelp": "Kies een aanbieder voor wachtwoordherstel die moet worden gebruikt wanneer deze gebruiker een wachtwoordherstel aanvraagt.", "Screenshots": "Schermafdruk", "Series": "Series", @@ -1237,7 +1237,7 @@ "BoxSet": "Boxset", "AskAdminToCreateLibrary": "Vraag een beheerder om een bibliotheek aan te maken.", "Artist": "Artiest", - "AllowFfmpegThrottlingHelp": "Wanneer een transcodering of remux ver genoeg voorloopt op de huidige afspeelpositie zal het proces worden gepauzeerd zodat er minder middelen worden gebruikt. Dit is vooral nuttig wanneer je kijkt zonder vaak te spoelen. Schakel dit uit als je afspeelproblemen ondervindt.", + "AllowFfmpegThrottlingHelp": "Wanneer een transcodering of remux ver genoeg voorloopt op de huidige afspeelpositie zal het proces worden gepauzeerd zodat er minder middelen worden gebruikt. Dit is vooral nuttig wanneer er beperkt terug- of vooruitgespoeld wordt. Schakel dit uit als je afspeelproblemen ondervindt.", "AllowFfmpegThrottling": "Transcoderingen afknijpen", "LabelPlayerDimensions": "Afmetingen speler", "LabelLibraryPageSizeHelp": "Kies het aantal items dat wordt weergegeven op een bibliotheekpagina. Kies 0 om dit te verbergen.", @@ -1253,7 +1253,7 @@ "PlaybackErrorNoCompatibleStream": "Dit apparaat ondersteunt de afgespeelde media niet en de server verstuurt geen compatibel mediaformaat.", "Person": "Persoon", "OptionForceRemoteSourceTranscoding": "Transcoderen forceren van mediabronnen op afstand (zoals live-tv)", - "NoCreatedLibraries": "Het lijkt erop dat er nog geen bibliotheek is gecreëerd. {0}Wil je er nu een aanmaken?{1}", + "NoCreatedLibraries": "Het lijkt erop dat er nog geen bibliotheek is aangemaakt. {0}Wil je er nu een aanmaken?{1}", "Movie": "Film", "MessageConfirmAppExit": "Wil je afsluiten?", "LabelVideoResolution": "Beeldresolutie", @@ -1271,7 +1271,7 @@ "ListPaging": "{0}-{1} van {2}", "WriteAccessRequired": "Jellyfin vereist schrijftoegang tot deze map. Zorg voor schrijftoegang en probeer het opnieuw.", "PathNotFound": "Het pad kan niet gevonden worden. Zorg ervoor dat het pad geldig is en probeer opnieuw.", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "SelectAdminUsername": "Kies een gebruikersnaam voor de beheerdersaccount.", "ButtonTogglePlaylist": "Afspeellijst", "LabelRequireHttpsHelp": "Indien aangevinkt, zal de server alle verzoeken via HTTP automatisch omleiden naar HTTPS. Dit heeft geen effect als de server niet luistert op HTTPS.", @@ -1347,7 +1347,7 @@ "MessageGetInstalledPluginsError": "Er is een fout opgetreden bij het ophalen van de lijst met geïnstalleerde plug-ins.", "MessagePluginInstallError": "Er is een fout opgetreden tijdens het installeren van de plugin.", "LabelUnstable": "Instabiel", - "NextTrack": "Naar volgende gaan", + "NextTrack": "Volgend item", "LabelAlbumArtMaxResHelp": "Maximale resolutie van de albumhoes, beschreven in de eigenschap 'upnp:albumArtURI'.", "Image": "Afbeelding", "Other": "Andere", @@ -1355,9 +1355,9 @@ "LabelIconMaxResHelp": "Maximale resolutie van pictogrammen die worden weergegeven via de eigenschap 'upnp:icon'.", "MusicVideos": "Muziekvideo's", "Preview": "Voorvertoning", - "SubtitleVerticalPositionHelp": "Regelnummer waar tekst verschijnt. Positieve cijfers geven top-down aan. Negatieve getallen geven bottom-up aan.", + "SubtitleVerticalPositionHelp": "Regelnummer waar tekst verschijnt. Positieve getallen geven top-down aan. Negatieve getallen geven bottom-up aan.", "ButtonCast": "Naar apparaat casten", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "VideoAudio": "Beeld Geluid", "Video": "Beeld", "UseDoubleRateDeinterlacingHelp": "Deze instelling gebruikt de veldsnelheid bij de-interliniëren, ook wel bob-de-interliniëring genoemd, waarmee de verversingssnelheid van de video wordt verdubbeld om volledige beweging te bieden, zoals je zou zien bij het bekijken van geïnterlinieerd beeld op een tv.", @@ -1369,7 +1369,7 @@ "Restart": "Herstarten", "ResetPassword": "Wachtwoord opnieuw instellen", "Profile": "Profiel", - "PreviousTrack": "Naar vorige gaan", + "PreviousTrack": "Vorig item", "PosterCard": "Posterkaart", "Poster": "Poster", "PlaybackRate": "Afspeelsnelheid", @@ -1575,8 +1575,8 @@ "LabelSyncPlaySettingsSkipToSync": "SkipToSync inschakelen", "LabelSyncPlaySettingsSpeedToSyncHelp": "Methode voor synchronisatiecorrectie die bestaat uit het versnellen van het afspelen. Synchronisatiecorrectie moet ingeschakeld zijn.", "LabelSyncPlaySettingsSpeedToSync": "SpeedToSync inschakelen", - "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Minimale afspeelvertraging (in ms) waarna SpeedToSync de afspeelpositie probeert te corrigeren.", - "LabelSyncPlaySettingsMinDelaySkipToSync": "Minimumvertraging SpeedToSync", + "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Minimale afspeelvertraging (in ms) waarna SkipToSync de afspeelpositie probeert te corrigeren.", + "LabelSyncPlaySettingsMinDelaySkipToSync": "Minimumvertraging SkipToSync", "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Hoeveelheid milliseconden die SpeedToSync gebruikt om de afspeelpositie te corrigeren.", "LabelSyncPlaySettingsSpeedToSyncDuration": "Duur SpeedToSync", "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Maximale afspeelvertraging (in ms) waarna SkipToSync gebruikt wordt in plaats van SpeedToSync.", @@ -1717,7 +1717,7 @@ "Featurette": "Featurette", "Short": "Korte film", "HeaderPerformance": "Prestaties", - "LabelParallelImageEncodingLimitHelp": "Maximaal aantal afbeeldingscoderingen dat tegelijkertijd mag lopen. Bij een instelling van 0 wordt een limiet gekozen gebaseerd op je systeemspecificaties.", + "LabelParallelImageEncodingLimitHelp": "Maximaal aantal afbeeldingscoderingen dat tegelijkertijd mag lopen. Bij een instelling van 0 wordt een limiet gekozen gebaseerd op het aantal processorkernen in je systeem.", "LabelParallelImageEncodingLimit": "Limiet gelijktijdige afbeeldingscoderingen", "LabelEnableAudioVbr": "VBR-audiocodering inschakelen", "LabelEnableAudioVbrHelp": "Een variabele bitsnelheid biedt een betere verhouding tussen kwaliteit en gemiddelde bitsnelheid, maar kan in zeldzame gevallen tot bufferen of compatibiliteitsproblemen leiden.", @@ -1770,7 +1770,7 @@ "ListView": "Lijstweergave", "AiTranslated": "Vertaald door AI", "HeaderGuestCast": "Gastrollen", - "HearingImpairedShort": "ODS", + "HearingImpairedShort": "SH/ODS", "GoHome": "Startpagina", "UnknownError": "Er is een onbekende fout opgetreden.", "BackdropScreensaver": "Schermbeveiliging met achtergronden", @@ -1818,8 +1818,8 @@ "LabelTrickplayAccelHelp": "Zorg dat 'MJPEG-codering toestaan' onder Transcoderen is ingeschakeld indien je hardware dit ondersteunt.", "AllowMjpegEncoding": "Coderen in MJPEG-formaat toestaan (gebruikt tijdens trickplay-generatie)", "LabelScanBehaviorHelp": "Het standaardgedrag is niet-blokkerend en zal media toevoegen aan de bibiotheek voordat de trickplay-generatie voltooid is. Blokkeren zorgt ervoor dat trickplay-bestanden gegenereerd worden voordat media aan de bibliotheek wordt toegevoegd. De scan duurt hierdoor significant langer.", - "NonBlockingScan": "Niet-blokkerend - scan gaat verder tijdens generatie", - "BlockingScan": "Blokkerend - wacht met scannen tot generatie is voltooid", + "NonBlockingScan": "Niet-blokkerend - scan gaat verder tijdens het genereren", + "BlockingScan": "Blokkerend - wacht met scannen tot het genereren is voltooid", "PriorityBelowNormal": "Beneden normaal", "PriorityAboveNormal": "Boven normaal", "LabelWidthResolutions": "Breedteresoluties", @@ -1830,11 +1830,11 @@ "LabelTrickplayThreads": "FFmpeg-threads", "LabelTrickplayThreadsHelp": "Het aantal threads dat aan het '-threads'-argument van FFmpeg wordt doorgegeven.", "OptionExtractTrickplayImage": "Uitpakken van trickplay-afbeeldingen inschakelen", - "LabelProcessPriorityHelp": "Deze instelling bepaalt welke prioriteit de processor aan het trickplay-generatieproces van ffmpeg geeft. Als het systeem traag reageert tijdens het genereren van trickplay-afbeeldingen maar je de generatie niet volledig wilt stoppen, kun je deze instelling, alsmede de hoeveelheid threads, verlagen.", + "LabelProcessPriorityHelp": "Deze instelling bepaalt welke prioriteit de processor aan het trickplay-generatieproces van ffmpeg geeft. Als het systeem traag reageert tijdens het genereren van trickplay-afbeeldingen maar je het genereren niet volledig wilt stoppen, kun je deze instelling, alsmede de hoeveelheid threads, verlagen.", "LabelTileHeightHelp": "Maximaal aantal afbeeldingen per tegel in de Y-richting.", "LabelQscale": "Qscale", "LabelQscaleHelp": "De kwaliteitsschaal van afbeeldingen die door FFmpeg worden geproduceerd, waarbij 2 de hoogste en 31 de laagste kwaliteit is.", - "LabelExtractTrickplayDuringLibraryScanHelp": "Genereer trickplay-afbeeldingen wanneer video's worden geïmporteerd tijdens de bibliotheekscan. Anders zullen ze worden uitgepakt tijdens de geplande taak voor trickplay-afbeeldingen. Als de generatie op niet-blokkerend wordt ingesteld heeft deze optie geen negatieve invloed op de duur van de bibliotheekscan.", + "LabelExtractTrickplayDuringLibraryScanHelp": "Genereer trickplay-afbeeldingen wanneer video's worden geïmporteerd tijdens de bibliotheekscan. Anders zullen ze worden uitgepakt tijdens de geplande taak voor trickplay-afbeeldingen. Als het genereren op niet-blokkerend wordt ingesteld heeft deze optie geen negatieve invloed op de duur van de bibliotheekscan.", "ExtractTrickplayImagesHelp": "Trickplay-afbeeldingen lijken op hoofdstukafbeeldingen, maar beslaan de gehele lengte van de inhoud en geven een voorvertoning bij het spoelen door video's.", "Lyric": "Songtekst", "PlaybackError.ASS_RENDER_ERROR": "Er is een fout opgetreden in de renderer voor ASS/SSA-ondertiteling.", @@ -1866,5 +1866,32 @@ "ConfirmDeleteLyrics": "Dit zal deze liedtekst verwijderen van zowel het bestandssysteem als uit je mediabibliotheek. Weet je zeker dat je wilt doorgaan?", "DeleteLyrics": "Liedtekst verwijderen", "HeaderNoLyrics": "Geen liedtekst gevonden", - "Lyrics": "Liedtekst" + "Lyrics": "Liedtekst", + "SavePassword": "Wachtwoord opslaan", + "EnableDts": "DTS (DCA) inschakelen", + "EnableDtsHelp": "Schakel dit alleen in als je apparaat DTS ondersteunt of is verbonden met een compatibele geluidsontvanger, anders kan dit afspeelfouten veroorzaken.", + "EnableTrueHd": "TrueHD inschakelen", + "EnableTrueHdHelp": "Schakel dit alleen in als je apparaat TrueHD ondersteunt of is verbonden met een compatibele geluidsontvanger, anders kan dit afspeelfouten veroorzaken.", + "HeaderVideoAdvanced": "Video geavanceerd", + "PlaylistError.CreateFailed": "Fout bij aanmaken afspeellijst", + "PlaylistError.AddFailed": "Fout bij toevoegen aan afspeellijst", + "PlaylistPublicDescription": "Iedere aangemelde gebruiker toestaan deze afspeellijst te bekijken.", + "PlaylistPublic": "Openbare toegang toestaan", + "HeaderLyricDownloads": "Liedtekstdownloads", + "SaveLyricsIntoMediaFolders": "Liedteksten opslaan in mediamappen", + "SaveLyricsIntoMediaFoldersHelp": "Het opslaan van liedteksten in dezelfde map als de geluidsbestanden zorgt ervoor dat deze beter te beheren zijn.", + "Author": "Auteur", + "Colorist": "Inkleurder", + "CoverArtist": "Omslagartiest", + "Creator": "Bedenker", + "Editor": "Redacteur", + "Illustrator": "Illustrator", + "Inker": "Inkter", + "Letterer": "Beletteraar", + "Penciller": "Schetser", + "Translator": "Vertaler", + "LibraryScanFanoutConcurrencyHelp": "Maximaal aantal gelijktijdige taken tijdens bibliotheekscans. Bij een instelling van 0 wordt een limiet gekozen gebaseerd op het aantal processorkernen in je systeem. WAARSCHUWING: een te hoge instelling kan problemen veroorzaken met netwerkbestandssystemen; verlaag dit getal als je problemen tegenkomt.", + "LibraryScanFanoutConcurrency": "Limiet gelijktijdige bibiotheekscantaken", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Gewenste geluidscodec bij afspelen video", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Selecteer de gewenste geluidscodec om naartoe te transcoderen bij video-inhoud. Als de voorkeurscodec niet wordt ondersteund, gebruikt de server de beste codec die wel beschikbaar is." } diff --git a/src/strings/pl.json b/src/strings/pl.json index 864a6d9166..42c7512017 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -253,7 +253,7 @@ "HeaderCodecProfile": "Profil kodeków", "HeaderCodecProfileHelp": "Profil Kodeków określa ograniczenia urządzenia podczas odtwarzania konkretnych kodeków. Jeśli ograniczenie ma zastosowanie, media będą transkodowane, nawet jeżeli kodek jest skonfigurowany dla odtwarzania bezpośredniego.", "HeaderConfigureRemoteAccess": "Konfiguracja dostępu zdalnego", - "HeaderConfirmPluginInstallation": "Potwierdź instalację pluginu", + "HeaderConfirmPluginInstallation": "Potwierdź instalację wtyczki", "HeaderConfirmProfileDeletion": "Potwierdź usunięcie profilu", "HeaderConfirmRevokeApiKey": "Odwołaj Klucz API", "HeaderConnectToServer": "Podłącz do serwera", @@ -367,7 +367,7 @@ "HeaderSeriesOptions": "Opcje nagrywania serialu", "HeaderSeriesStatus": "Stan serialu", "HeaderServerSettings": "Ustawienia serwera", - "HeaderSetupLibrary": "Skonfiguruj swoje biblioteki mediów", + "HeaderSetupLibrary": "Skonfiguruj biblioteki mediów", "HeaderSortBy": "Sortuj według", "HeaderSortOrder": "Porządek sortowania", "HeaderSpecialEpisodeInfo": "Specjalne informacje o odcinku", @@ -435,7 +435,7 @@ "LabelAllowedRemoteAddresses": "Filtr adresów IP", "LabelAllowedRemoteAddressesMode": "Tryb filtra adresów IP", "LabelAppName": "Nazwa aplikacji", - "LabelAppNameExample": "Przykład: Sickbeard, Sonarr", + "LabelAppNameExample": "Czytelna dla człowieka nazwa służąca do identyfikacji kluczy API. To ustawienie nie ma wpływu na funkcjonalność.", "LabelArtists": "Wykonawcy", "LabelArtistsHelp": "Oddziel wielu wykonawców średnikiem \";\".", "LabelAudioLanguagePreference": "Preferowany język ścieżki dźwiękowej", @@ -1255,7 +1255,7 @@ "Episode": "Odcinek", "DeinterlaceMethodHelp": "Wybierz metodę usuwania przeplotu używaną podczas transkodowania. Gdy przyśpieszenie sprzętowe wspierające usuwanie przeplotu jest włączone sprzętowe usuwanie przeplotu zostanie użyte zamiast tego ustawienia.", "ClientSettings": "Ustawienia klienta", - "ButtonTogglePlaylist": "Playlista", + "ButtonTogglePlaylist": "Lista odtwarzania", "ButtonSyncPlay": "Odtwarzanie zsynchronizowane", "ClearQueue": "Wyczyść kolejkę", "StopPlayback": "Zatrzymaj odtwarzanie", @@ -1276,7 +1276,7 @@ "ListPaging": "{0}-{1} z {2}", "WriteAccessRequired": "Jellyfin wymaga praw zapisu do tego katalogu. Upewnij się, że prawa zapisu zostały przyznane i spróbuj ponownie.", "PathNotFound": "Ścieżka nie została znaleziona. Upewnij się, że ścieżka jest poprawna i spróbuj ponownie.", - "Yadif": "YADIF", + "Yadif": "YADIF (Yet Another DeInterlacing Filter)", "Writers": "Scenariusz", "ViewAlbumArtist": "Zobacz wykonawcę albumu", "TabRepositories": "Repozytoria", @@ -1367,7 +1367,7 @@ "Poster": "Plakat", "MusicVideos": "Teledyski", "VideoAudio": "Dźwięk wideo", - "Bwdif": "BWDIF", + "Bwdif": "BWDIF (Bob Weaver DeInterlacing Filter)", "UseDoubleRateDeinterlacing": "Podwój częstotliwość wyświetlania klatek podczas usuwania przeplotu", "Photo": "Zdjęcie", "LabelIconMaxResHelp": "Maksymalna rozdzielczość ikon udostępnianych przez 'upnp:icon'.", @@ -1480,7 +1480,7 @@ "LabelSyncPlayTimeSyncDevice": "Synchronizacja czasu z", "LabelSyncPlayResumePlaybackDescription": "Wróć do grupy odtwarzania", "LabelSyncPlayResumePlayback": "Wznów lokalne odtwarzanie", - "LabelSyncPlayHaltPlaybackDescription": "I ignoruj aktualizacje aktualnej playlisty", + "LabelSyncPlayHaltPlaybackDescription": "I ignoruj aktualizacje aktualnej listy odtwarzania", "LabelSyncPlayHaltPlayback": "Zatrzymaj lokalne odtwarzanie", "LabelSSDPTracingFilterHelp": "Opcjonalny adres IP po który filtrować ruch SSDP.", "LabelSSDPTracingFilter": "Filtr SSDP", @@ -1867,5 +1867,32 @@ "ErrorDeletingLyrics": "Wystąpił błąd podczas usuwania słów z serwera. Sprawdź, czy Jellyfin ma uprawnienia do zapisu w folderze multimediów i spróbuj ponownie.", "HeaderDeleteLyrics": "Usuń słowa", "Lyrics": "Słowa", - "ViewLyrics": "Zobacz słowa" + "ViewLyrics": "Zobacz słowa", + "SavePassword": "Zapisz hasło", + "EnableDts": "Włącz DTS (DCA)", + "EnableDtsHelp": "Włącz tylko wtedy, gdy urządzenie obsługuje DTS lub jest podłączone do kompatybilnego odbiornika audio, w przeciwnym razie może to spowodować błąd odtwarzania.", + "EnableTrueHd": "Włącz TrueHD", + "EnableTrueHdHelp": "Włącz tylko wtedy, gdy urządzenie obsługuje TrueHD lub jest podłączone do kompatybilnego odbiornika audio, w przeciwnym razie może to spowodować błąd odtwarzania.", + "HeaderVideoAdvanced": "Zaawansowane wideo", + "PlaylistError.AddFailed": "Błąd dodawania do listy odtwarzania", + "PlaylistError.CreateFailed": "Błąd tworzenia listy odtwarzania", + "SaveLyricsIntoMediaFoldersHelp": "Przechowywanie słów obok plików audio ułatwi zarządzanie nimi.", + "PlaylistPublic": "Zezwól na dostęp publiczny", + "PlaylistPublicDescription": "Zezwól na oglądanie tej listy odtwarzania każdemu zalogowanemu użytkownikowi.", + "HeaderLyricDownloads": "Pobieranie słów", + "SaveLyricsIntoMediaFolders": "Zapisuj słowa w folderach multimediów", + "Author": "Autor", + "Colorist": "Kolorysta", + "CoverArtist": "Artysta okładki", + "Creator": "Twórca", + "Editor": "Edytor", + "Illustrator": "Ilustrator", + "Inker": "Inker", + "Letterer": "Liternik", + "Penciller": "Rysownik", + "Translator": "Tłumacz", + "LibraryScanFanoutConcurrency": "Limit zadań równoległego skanowania bibliotek", + "LibraryScanFanoutConcurrencyHelp": "Maksymalna liczba zadań równoległych podczas skanowania bibliotek. Ustawienie tej opcji na 0 spowoduje wybranie limitu na podstawie liczby rdzeni systemu. OSTRZEŻENIE: ustawienie zbyt dużej liczby może powodować problemy z sieciowymi systemami plików; jeśli napotkasz problemy, obniż tę liczbę.", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Preferowany transkodowany kodek audio podczas odtwarzania wideo", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Wybierz preferowany kodek audio, na który chcesz transkodować zawartość wideo. Jeśli preferowany kodek nie jest obsługiwany, serwer użyje następnego najlepszego dostępnego kodeka." } diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index e53c9b25b3..0079d71e0b 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -209,7 +209,7 @@ "GuestStar": "Convidado especial", "Guide": "Guia", "GuideProviderSelectListings": "Selecionar Listas", - "H264CrfHelp": "O CRF (Constant Rate Factor) é a configuração padrão de qualidade para o codificador x264 e x265. Você pode definir valores entre 0 e 51, onde valores menores resultarão em melhor qualidade (ao custo de arquivos maiores). Valores saudáveis estão entre 18 e 28. O padrão para o x264 é 23 e para x265 é 28, então você pode usar esses valores como um ponto de partida.", + "H264CrfHelp": "O 'Constant Rate Factor' (CRF) é a configuração de qualidade padrão para os codificadores de software x264 e x265. Você pode definir os valores entre 0 e 51, sendo que valores mais baixos resultam em melhor qualidade (às custas de tamanhos de arquivo maiores). Valores adequados estão entre 18 e 28. O padrão para x264 é 23 e para x265 é 28, portanto, você pode usar isso como ponto de partida. Os codificadores por hardware não usam essas configurações.", "EncoderPresetHelp": "Escolha um valor mais rápido para melhorar o desempenho ou um valor mais lento para melhorar a qualidade.", "HDPrograms": "Programas em HD", "HardwareAccelerationWarning": "Ativar a aceleração de hardware pode causar instabilidade em alguns sistemas. Verifique se seu sistema operacional e drivers de vídeo estão atualizados. Se tiver dificuldades em reproduzir vídeo depois de ativar, retorne a configuração para automático.", @@ -1390,7 +1390,7 @@ "LabelTonemappingRange": "Faixa de mapeamento de tom", "TonemappingAlgorithmHelp": "O mapeamento de tons pode ser ajustado precisamente. Se você não esta familiarizado com essas opções, mantenha o valor padrão. O valor recomendado é 'BT.2390'.", "LabelTonemappingAlgorithm": "Selecione o algoritmo de mapeamento de tons a ser usado", - "AllowTonemappingHelp": "O mapeamento de tons pode transformar a faixa dinâmica de um vídeo de HDR para SDR, mantendo detalhes de cores da imagem e informações muito importantes para representar a cena original. Atualmente, funciona apenas ao transcodificar vídeos no padrão HDR10, HLG e DoVI . Isso requer as bibliotecas OpenCL ou CUDA correspondente.", + "AllowTonemappingHelp": "O mapeamento de tons pode transformar a faixa dinâmica de um vídeo de HDR para SDR, mantendo detalhes e cores da imagem, que são informações muito importantes para representar a cena original. Atualmente, funciona apenas ao transcodificar vídeos com 10bit HDR10, HLG e DoVi. Isso requer a biblioteca GPGPU correspondente.", "EnableTonemapping": "Ativar mapeamento de tons", "LabelOpenclDeviceHelp": "Dispositivo OpenCL usado para a mapeação de tons. Os números ao lado esquerdo do ponto (.) são referentes ao número da plataforma, os números a direita representam o número do dispositivo dentro da plataforma. O valor padrão é 0.0. O arquivo da aplicação FFmpeg contendo o método de aceleração de hardware OpenCL é obrigatório.", "LabelOpenclDevice": "Dispositivo OpenCL", @@ -1634,7 +1634,7 @@ "Trailer": "Trailer", "Clip": "Destaque", "AllowEmbeddedSubtitlesAllowNoneOption": "Não permitir nada", - "EnableEnhancedNvdecDecoderHelp": "Implementação experimental do NVDEC. Não habilite esta opção a menos que você encontre erros de decodificação.", + "EnableEnhancedNvdecDecoderHelp": "Implementação aprimorada do NVDEC, desative essa opção para usar o CUVID se encontrar erros de decodificação.", "ThemeVideo": "Vídeo tema", "ThemeSong": "Música tema", "Sample": "Amostra", @@ -1767,11 +1767,11 @@ "AiTranslated": "Traduzido por IA", "MachineTranslated": "Traduzido por Máquina", "AllowSegmentDeletion": "Remover segmentos", - "AllowSegmentDeletionHelp": "Remover segmentos antigos após serem enviados ao cliente. Isso previne armazenar o arquivo transcodificado em disco. Funciona apenas com limitação habilitada. Desligue esta opção se você tiver problemas com a reprodução.", + "AllowSegmentDeletionHelp": "Exclua segmentos antigos depois que eles tiverem sido baixados pelo cliente. Isso evita a necessidade de armazenar todo o arquivo transcodificado no disco. Desative esse recurso se você tiver problemas de reprodução.", "LabelThrottleDelaySeconds": "Limitar após", "LabelThrottleDelaySecondsHelp": "Tempo em segundos em que o transcodificador será limitado. É necessário que seja grande o suficiente para que o cliente mantenha um buffer saudável. Funciona apenas se o limitador estiver habilitado.", "LabelSegmentKeepSeconds": "Tempo para manter seguimentos", - "LabelSegmentKeepSecondsHelp": "Tempo em segundos para que os seguimentos sejam armazenados antes de serem sobrescritos. É necessário que seja maior que \"Limitar após\". Funciona apenas se a remoção de segmentos estiver habilitada.", + "LabelSegmentKeepSecondsHelp": "Tempo em segundos, pelo qual os segmentos devem ser mantidos após serem baixados pelo cliente. Só funciona se a exclusão de segmentos estiver ativada.", "SearchResultsEmpty": "Desculpe! Nenhum resultaod encontrado para \"{0}\"", "ForeignPartsOnly": "Apenas partes extrangeiras/forçadas", "HearingImpairedShort": "HI/SDH", @@ -1825,5 +1825,37 @@ "PlaybackError.NETWORK_ERROR": "A reprodução falhou devido a um erro de rede.", "PlaybackError.NO_MEDIA_ERROR": "Não foi possível encontrar uma fonte de mídia válida para reproduzir.", "PlaybackError.SERVER_ERROR": "A reprodução falhou devido a um erro no servidor.", - "ViewLyrics": "Ver letras" + "ViewLyrics": "Ver letras", + "LabelEncodingFormatOptions": "Opções de formato de codificação", + "EncodingFormatHelp": "Selecione a codificação de vídeo para a qual o Jellyfin deve transcodificar. O Jellyfin usará codificação por software quando a aceleração de hardware para o formato selecionado não estiver disponível. A codificação H264 sempre estará ativada.", + "AllowVideoToolboxTonemappingHelp": "Mapeamento de tons acelerado por hardware fornecido pelo VideoToolbox. Ele funciona com a maioria dos formatos HDR, incluindo HDR10, HDR10+ e HLG, mas não funciona com o Dolby Vision Profile 5. Isso tem uma prioridade mais alta em comparação com outra implementação do Metal.", + "PriorityHigh": "Alta", + "LabelTrickplayAccelEncoding": "Ativar codificação MJPEG acelerada por hardware", + "LabelTrickplayAccel": "Ativar decodificação por hardware", + "LabelTrickplayAccelEncodingHelp": "Atualmente disponível apenas no QSV e VAAPI, essa opção não tem efeito sobre outros métodos de aceleração por hardware.", + "LabelScanBehavior": "Comportamento do Escaneamento", + "PriorityAboveNormal": "Acima do normal", + "PriorityNormal": "Normal", + "EnableVideoToolboxTonemapping": "Habilitar mapeamento de tons do VideoToolbox", + "PriorityBelowNormal": "Abaixo do normal", + "PriorityIdle": "Ocioso", + "LabelProcessPriority": "Prioridade do Processo", + "LabelImageIntervalHelp": "Intervalo de tempo (ms) entre cada nova imagem do trickplay.", + "LabelWidthResolutionsHelp": "Lista separada por vírgula das larguras (px) em que as imagens do trickplay serão geradas. Todas as imagens devem ser geradas proporcionalmente à fonte, de modo que uma largura de 320 em um vídeo de 16:9 resulta em cerca de 320x180.", + "OptionExtractTrickplayImage": "Ativar extração de imagens trickplay", + "ExtractTrickplayImagesHelp": "Imagens de Trickplay são semelhantes às imagens de capítulo, exceto que abrangem todo o comprimento do conteúdo e são usadas para mostrar uma prévia ao navegar pelos vídeos.", + "LabelExtractTrickplayDuringLibraryScan": "Extrair imagens trickplay durante o escaneamento da biblioteca", + "LabelExtractTrickplayDuringLibraryScanHelp": "Gerar imagens de trickplay quando os vídeos são importados durante o escaneamento da biblioteca. Caso contrário, elas serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver configurada como não-bloqueadora, isso não afetará o tempo que a varredura da biblioteca leva para ser concluída.", + "LabelWidthResolutions": "Resolução de largura", + "NonBlockingScan": "Não Bloqueadora - enfileira a geração e depois retorna", + "BlockingScan": "Bloqueadora - enfileira a geração e bloqueia escaneamento até a conclusão", + "LabelImageInterval": "Intervalo de imagens", + "LabelJpegQuality": "Qualidade JPEG", + "LabelJpegQualityHelp": "A qualidade de compressão JPEG para imagens trickplay.", + "LabelQscaleHelp": "A escala de qualidade das imagens produzidas pelo ffmpeg, sendo 2 a qualidade mais alta e 31 a mais baixa.", + "LabelProcessPriorityHelp": "A configuração desse valor mais baixo ou mais alto determinará como a CPU prioriza o processo de geração de trickplay do ffmpeg em relação a outros processos. Se você notar lentidão durante a geração de imagens do trickplay, mas não quiser interromper totalmente a geração, tente diminuir esse valor, bem como a contagem de threads.", + "LabelScanBehaviorHelp": "O comportamento padrão é não bloqueadora, o que adicionará mídia à biblioteca antes que a geração do trickplay seja feita. Bloquear garantirá que os arquivos trickplay sejam gerados antes que a mídia seja adicionada à biblioteca, mas tornará os escaneamentos significativamente mais longos.", + "LabelTrickplayThreadsHelp": "O número de threads a ser passado para o argumento '-threads' do ffmpeg.", + "LabelTrickplayThreads": "FFmpeg Threads", + "Trickplay": "Trickplay" } diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index d2fad957b5..88998636a9 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -215,7 +215,7 @@ "LabelAlbumArtPN": "PN da capa do álbum", "LabelAlbumArtists": "Artistas do álbum", "LabelAppName": "Nome da aplicação", - "LabelAppNameExample": "Exemplo: Sickbeard, Sonarr", + "LabelAppNameExample": "Um nome legível por humanos para identificar as chaves da API. Esta definição não afetará a funcionalidade.", "LabelArtists": "Artistas", "LabelArtistsHelp": "Separe múltiplos artistas com ponto e virgula (;).", "LabelAudioLanguagePreference": "Idioma de áudio preferido", @@ -1763,7 +1763,7 @@ "LabelAlbumGain": "Ganho do Album", "BackdropScreensaver": "Fundo do protetor de ecrã", "LabelIsHearingImpaired": "Para deficientes auditivos (SDH)", - "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre diferentes cenários ao usar o protetor de ecrã de cenário.", + "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre a mudança de diferentes imagens de fundo na proteção de ecrã.", "LabelBackdropScreensaverInterval": "Intervalo do fundo do protetor de ecrã", "HeaderAllRecordings": "Todas as Gravações", "SelectAudioNormalizationHelp": "Ganho de faixa - ajusta o volume de cada faixa para que sejam reproduzidas com o mesmo volume. Ganho do álbum - ajusta o volume de todas as faixas apenas de um álbum, mantendo a faixa dinâmica do álbum.", @@ -1862,5 +1862,19 @@ "PlaybackError.NO_MEDIA_ERROR": "Não foi possível encontrar uma fonte multimédia válida para reproduzir.", "LabelServerVersion": "Versão do servidor", "LabelWebVersion": "Versão web", - "LabelBuildVersion": "Versão de compilação" + "LabelBuildVersion": "Versão de compilação", + "SavePassword": "Guardar palavra-passe", + "Author": "Autor", + "Colorist": "Colorista", + "CoverArtist": "Artista da capa", + "Creator": "Criador", + "Editor": "Editor", + "EnableTrueHd": "Ativar TrueHD", + "EnableTrueHdHelp": "Ativar apenas se o dispositivo suportar TrueHD ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", + "Illustrator": "Ilustrador", + "Letterer": "Letrista", + "EnableDts": "Ativar DTS (DCA)", + "EnableDtsHelp": "Ativar apenas se o dispositivo suportar DTS ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", + "HeaderLyricDownloads": "Descarregar letras", + "HeaderVideoAdvanced": "Avançadas do vídeo" } diff --git a/src/strings/pt.json b/src/strings/pt.json index 99816bfa0e..b30f363271 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -395,7 +395,7 @@ "LabelAudioBitrate": "Taxa de bits de áudio", "LabelArtistsHelp": "Separe artistas múltiplos com um ponto e vírgula.", "LabelArtists": "Artistas", - "LabelAppNameExample": "Exemplo: Sickbeard, NzbDrone", + "LabelAppNameExample": "Um nome legível por humanos para identificar as chaves da API. Esta definição não afetará a funcionalidade.", "LabelAppName": "Nome da aplicação", "LabelAllowedRemoteAddressesMode": "Tipo de filtro de IP remoto", "LabelAllowedRemoteAddresses": "Filtro de IP remoto", @@ -1487,7 +1487,7 @@ "UnsupportedPlayback": "Jellyfin não pode desencriptar conteúdo protegido por DRM, mas todo o conteúdo será testado de qualquer maneira, incluindo títulos protegidos. Alguns arquivos podem aparecer completamente pretos devido à encriptação ou a outros recursos não suportados, como títulos interativos.", "MessageSyncPlayGroupWait": "{0} está a armazenar em buffer…", "LabelSelectAudioNormalization": "Normalização de áudio", - "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre diferentes cenários ao usar o protetor de tela de cenário.", + "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre a mudança de diferentes imagens de fundo na proteção de ecrã.", "LabelServerVersion": "Versão do servidor", "LabelTonemappingPeakHelp": "Substitua o sinal/pico nominal/de referência por este valor. Útil quando as informações de pico incorporadas nos metadados de exibição não são confiáveis ou quando há mapeamento de tons de uma faixa mais baixa para uma faixa mais alta. Os valores recomendados e padrão são 100 e 0.", "OptionDateShowAdded": "Data de exibição adicionada", @@ -1495,7 +1495,7 @@ "WriteAccessRequired": "Jellyfin requer acesso de gravação a esta pasta. Garanta o acesso de gravação e tente novamente.", "LabelFallbackFontPathHelp": "Essas fontes são usadas por alguns clientes para renderizar legendas. Consulte a documentação para obter mais informações.", "EnableGamepadHelp": "Ouça a entrada de qualquer controlador conectado. (Requer: Modo de exibição 'TV')", - "BackdropScreensaver": "Protetor de tela de fundo", + "BackdropScreensaver": "Fundo do protetor de ecrã", "LabelLevel": "Nível", "LabelSyncPlaySettingsMinDelaySpeedToSync": "Atraso mínimo da velocidade de sincronização", "OptionDateEpisodeAdded": "Data do episódio adicionado", @@ -1611,7 +1611,7 @@ "LabelVideoRange": "Alcance de vídeo", "Mixer": "Misturador", "LabelSystem": "Sistema", - "SaveRecordingImages": "Salvar gravação de imagens EPG", + "SaveRecordingImages": "Guardar imagens da gravação EPG", "SaveRecordingImagesHelp": "Guardar imagens do fornecedor de listas EPG juntamente com os ficheiros multimédia.", "UseDoubleRateDeinterlacing": "Duplicar a velocidade de fotogramas ao desentrelaçar", "MessageSyncPlayUserJoined": "{0} entrou no grupo.", @@ -1624,7 +1624,7 @@ "YoutubeBadRequest": "Requisição ruim.", "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em players incorporados.", "TypeOptionPluralBoxSet": "Conjuntos de caixas", - "LabelBackdropScreensaverInterval": "Intervalo do protetor de tela de fundo", + "LabelBackdropScreensaverInterval": "Intervalo do fundo do protetor de ecrã", "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", "LabelDirectStreamingInfo": "Informações de transmissão direta", "LabelAlbumGain": "Ganho do álbum", @@ -1860,5 +1860,19 @@ "NonBlockingScan": "Não bloqueante - coloca a geração em fila de espera e depois regressa", "LabelExtractTrickplayDuringLibraryScan": "Extrair imagens trickplay durante a análise da biblioteca", "LabelExtractTrickplayDuringLibraryScanHelp": "Gera imagens trickplay quando os vídeos são importados durante a análise da biblioteca. Caso contrário, serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver definida como não bloqueante, isto não afetará o tempo que a análise da biblioteca demora a ser concluída.", - "PlaybackError.ASS_RENDER_ERROR": "Foi encontrado um erro no renderizador de legendas ASS/SSA." + "PlaybackError.ASS_RENDER_ERROR": "Foi encontrado um erro no renderizador de legendas ASS/SSA.", + "SavePassword": "Guardar palavra-passe", + "Author": "Autor", + "Colorist": "Colorista", + "CoverArtist": "Artista da capa", + "Creator": "Criador", + "Editor": "Editor", + "Illustrator": "Ilustrador", + "EnableDts": "Ativar DTS (DCA)", + "EnableDtsHelp": "Ativar apenas se o dispositivo suportar DTS ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", + "EnableTrueHd": "Ativar TrueHD", + "EnableTrueHdHelp": "Ativar apenas se o dispositivo suportar TrueHD ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", + "HeaderVideoAdvanced": "Avançadas do vídeo", + "HeaderLyricDownloads": "Descarregar letras", + "Letterer": "Letrista" } diff --git a/src/strings/ru.json b/src/strings/ru.json index ff1597d15d..adf6f5c237 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -760,7 +760,7 @@ "MediaInfoAnamorphic": "Анаморфность", "MediaInfoAspectRatio": "Соотношение сторон", "MediaInfoBitDepth": "Разрядность", - "MediaInfoBitrate": "Битрейт", + "MediaInfoBitrate": "Потоковая скорость", "MediaInfoChannels": "Каналы", "MediaInfoCodec": "Кодек", "MediaInfoCodecTag": "Тег кодека", @@ -1816,7 +1816,7 @@ "AllowMjpegEncoding": "Разрешить кодирование в формате MJPEG (используется при создании трюковой игры)", "LabelProcessPriorityHelp": "Установив это значение ниже или выше, вы определите, как процессор расставит приоритеты для процесса генерации trickplay в формате ffmpeg по отношению к другим процессам. Если вы заметили замедление при создании изображений trickplay, но не хотите полностью останавливать их генерацию, попробуйте уменьшить это значение, а также количество потоков.", "LabelEncodingFormatOptions": "Параметры формата кодирования", - "LabelTrickplayAccel": "Включить аппаратное ускорение", + "LabelTrickplayAccel": "Включить аппаратное декодирование", "LabelTrickplayAccelHelp": "Обязательно включите \"Разрешить кодировку MJPEG\" в режиме транскодирования, если ваше оборудование поддерживает это.", "PriorityAboveNormal": "Выше нормы", "LabelTileWidth": "Ширина плитки", @@ -1858,5 +1858,15 @@ "PriorityHigh": "Высокий", "PriorityNormal": "Нормальный", "LabelJpegQualityHelp": "Уровень сжатия JPEG для кадров trickplay.", - "NonBlockingScan": "Асинхронное - ставит генерацию в очередь и продолжает" + "NonBlockingScan": "Асинхронное - ставит генерацию в очередь и продолжает", + "Lyrics": "Текст песни", + "SavePassword": "Сохранить пароль", + "ViewLyrics": "Просмотр текста песни", + "LabelTrickplayAccelEncoding": "Включить аппаратное ускорение кодирования MJPEG", + "LabelTrickplayAccelEncodingHelp": "Эта опция доступна только для QSV и VAAPI, она не влияет на другие методы аппаратного ускорения.", + "ConfirmDeleteLyrics": "Удаление этих текстов песен приведет к удалению их как из файловой системы, так и из вашей медиатеки. Вы уверены, что хотите продолжить?", + "DeleteLyrics": "Удалить тексты песен", + "ErrorDeletingLyrics": "Возникла ошибка при удалении текста песни с сервера. Пожалуйста, проверьте, имеет ли Jellyfin доступ на запись в папку с медиа, и попробуйте ещё раз.", + "HeaderDeleteLyrics": "Удалить Текст песни", + "HeaderNoLyrics": "Текст песни не найден" } diff --git a/src/strings/sk.json b/src/strings/sk.json index 8ea448e95f..ca2870d997 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -215,7 +215,7 @@ "HeaderSelectPath": "Vybrať priečinok", "HeaderSendMessage": "Poslať správu", "HeaderServerSettings": "Nastavenia servera", - "HeaderSetupLibrary": "Nastavenie vašich knižníc médií", + "HeaderSetupLibrary": "Nastavenie Vašich knižníc médií", "HeaderSortBy": "Zoradiť podľa", "HeaderStartNow": "Začať teraz", "HeaderStopRecording": "Zastaviť nahrávanie", @@ -251,7 +251,7 @@ "LabelAllowHWTranscoding": "Povoliť hardvérové prekódovanie", "LabelAllowedRemoteAddresses": "Filter vzdialených IP adries", "LabelAppName": "Názov appky", - "LabelAppNameExample": "Príklad: Sickbeard, Sonarr", + "LabelAppNameExample": "Čitateľný názov na identifikáciu kľúčov API. Toto nastavenie neovplyvní funkčnosť.", "LabelArtists": "Interpreti", "LabelArtistsHelp": "Viacej interpretov oddeľte pomocou bodkočiarky.", "LabelAudioLanguagePreference": "Uprednostňovaný jazyk zvuku", @@ -1261,7 +1261,7 @@ "ListPaging": "{0}-{1} z {2}", "WriteAccessRequired": "Server vyžaduje práva na zapisovanie do tohoto priečinku. Prosím, uistite sa že má práva na zapisovanie a skúste to znova.", "PathNotFound": "Táto cesta nebola nájdená. Prosím, uistite sa že cesta je správna a skúste to znovu.", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "Season": "Séria", "Person": "Osoba", "Movie": "Film", @@ -1363,7 +1363,7 @@ "DeleteAll": "Zmazať všetko", "Data": "Údaje", "ThumbCard": "Thumb karta", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "LabelEnableSSDPTracing": "Povoliť trasovanie SSDP", "LabelEnableIP6Help": "Povolí IPv6 funkcionalitu.", "LabelEnableIP6": "Povoliť IPv6", @@ -1706,7 +1706,7 @@ "LabelEnableAudioVbr": "Povoliť kódovanie zvuku VBR", "HeaderPerformance": "Výkon", "AllowCollectionManagement": "Povoliť tomuto používateľovi spravovať kolekcie", - "LabelParallelImageEncodingLimitHelp": "Maximálny počet kódovaní obrazu, ktoré môžu bežať paralelne. Nastavením tejto hodnoty na 0 sa zvolí limit na základe špecifikácie vášho systému.", + "LabelParallelImageEncodingLimitHelp": "Maximálny počet kódovaní obrázkov, ktoré môžu bežať paralelne. Nastavením tejto hodnoty na 0 sa zvolí limit na základe špecifikácie vášho systému.", "TonemappingModeHelp": "Vyberte režim mapovania tónov. Ak sa vyskytnú preexponované svetlé miesta, skúste prepnúť na režim RGB.", "Featurette": "Stredne dlhý film", "Short": "Krátky film", @@ -1867,5 +1867,32 @@ "ErrorDeletingLyrics": "Pri odstraňovaní textov piesní zo servera došlo k chybe. Skontrolujte, či má Jellyfin prístup na zápis do priečinka médií, a skúste to znova.", "HeaderDeleteLyrics": "Odstrániť texty piesní", "HeaderNoLyrics": "Nenašli sa žiadne texty piesní", - "ViewLyrics": "Zobraziť texty piesní" + "ViewLyrics": "Zobraziť texty piesní", + "SavePassword": "Uložiť heslo", + "PlaylistError.AddFailed": "Chyba pri pridávaní do playlistu", + "PlaylistError.CreateFailed": "Chyba pri vytváraní playlistu", + "EnableDts": "Povoliť DTS (DCA)", + "EnableDtsHelp": "Povoľte len vtedy, ak vaše zariadenie podporuje DTS alebo je pripojené ku kompatibilnému audio receiveru, inak môže dôjsť k zlyhaniu prehrávania.", + "EnableTrueHd": "Povoliť TrueHD", + "EnableTrueHdHelp": "Povoľte len vtedy, ak vaše zariadenie podporuje TrueHD alebo je pripojené ku kompatibilnému audio receiveru, inak môže dôjsť k zlyhaniu prehrávania.", + "HeaderVideoAdvanced": "Pokročilé video", + "PlaylistPublic": "Povoliť verejný prístup", + "HeaderLyricDownloads": "Stiahnutie textov piesní", + "Author": "Autor", + "Colorist": "Kolorista", + "Creator": "Tvorca", + "CoverArtist": "Autor obálky", + "Editor": "Editor", + "Illustrator": "Ilustrátor", + "Inker": "Inker", + "Letterer": "Lettrista", + "Penciller": "Penciler", + "SaveLyricsIntoMediaFolders": "Uložiť texty piesní do priečinkov médií", + "SaveLyricsIntoMediaFoldersHelp": "Uloženie textov piesní k zvukovým súborom umožní ich jednoduchšie spravovanie.", + "Translator": "Prekladateľ", + "PlaylistPublicDescription": "Povoliť zobrazenie tohto playlistu každému prihlásenému používateľovi.", + "LibraryScanFanoutConcurrencyHelp": "Maximálny počet paralelných úloh počas skenovania knižnice. Nastavením tejto hodnoty na 0 sa zvolí limit na základe počtu jadier CPU vášho systému. UPOZORNENIE: Nastavenie príliš vysokého čísla môže spôsobiť problémy so sieťovými súborovými systémami, Ak sa vyskytnú problémy, znížte toto číslo.", + "LibraryScanFanoutConcurrency": "Limit úloh paralelného skenovania knižnice", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Preferovaný zvukový kodek pre prekódovanie počas prehrávania videa", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Vyberte preferovaný zvukový kodek pre prekódovanie počas prehrávania videa. Ak preferovaný kodek nie je podporovaný, server použije ďalší najlepší dostupný kodek." } diff --git a/src/strings/ta.json b/src/strings/ta.json index 344e30ee12..b3dddb74dd 100644 --- a/src/strings/ta.json +++ b/src/strings/ta.json @@ -21,7 +21,7 @@ "AllowedRemoteAddressesHelp": "தொலைதூரத்துடன் இணைக்க அனுமதிக்கப்படும் நெட்வொர்க்குகளுக்கான ஐபி முகவரிகள் அல்லது ஐபி / நெட்மாஸ்க் உள்ளீடுகளின் கமாவால் பிரிக்கப்பட்ட பட்டியல். காலியாக இருந்தால், எல்லா தொலை முகவரிகளும் அனுமதிக்கப்படும்.", "AllowRemoteAccessHelp": "தேர்வு செய்யப்படாவிட்டால், எல்லா தொலைநிலை இணைப்புகளும் தடுக்கப்படும்.", "AllowRemoteAccess": "இந்த சேவையகத்திற்கு தொலை இணைப்புகளை அனுமதிக்கவும்", - "AllowFfmpegThrottlingHelp": "ஒரு டிரான்ஸ்கோட் அல்லது ரீமக்ஸ் தற்போதைய பின்னணி நிலையிலிருந்து வெகு தொலைவில் இருக்கும்போது, செயல்முறையை இடைநிறுத்துங்கள், இதனால் அது குறைந்த ஆதாரங்களை நுகரும். அடிக்கடி தேடாமல் பார்க்கும்போது இது மிகவும் பயனுள்ளதாக இருக்கும். பின்னணி சிக்கல்களை நீங்கள் சந்தித்தால் இதை அணைக்கவும்.", + "AllowFfmpegThrottlingHelp": "டிரான்ஸ்கோட் அல்லது ரீமக்ஸ் தற்போதைய பிளேபேக் நிலையில் இருந்து போதுமான அளவு முன்னேறும் போது, செயல்முறையை இடைநிறுத்தவும், அதனால் அது குறைவான ஆதாரங்களைப் பயன்படுத்தும். அடிக்கடி தேடாமல் பார்க்கும் போது இது மிகவும் பயனுள்ளதாக இருக்கும். பிளேபேக் சிக்கல்களை நீங்கள் சந்தித்தால் இதை முடக்கவும்.", "AllowFfmpegThrottling": "திராட்டில் ட்ரான்ஸ்கோட்கள்", "AllowOnTheFlySubtitleExtractionHelp": "வீடியோ டிரான்ஸ்கோடிங்கைத் தடுக்க உதவும் வகையில் உட்பொதிக்கப்பட்ட வசனங்களை வீடியோக்களிலிருந்து பிரித்தெடுத்து வாடிக்கையாளர்களுக்கு எளிய உரையில் வழங்கலாம். சில கணினிகளில் இது நீண்ட நேரம் எடுக்கும் மற்றும் பிரித்தெடுக்கும் செயல்பாட்டின் போது வீடியோ பிளேபேக் நிறுத்தப்படும். கிளையன்ட் சாதனத்தால் பூர்வீகமாக ஆதரிக்கப்படாதபோது உட்பொதிக்கப்பட்ட வசன வரிகள் வீடியோ டிரான்ஸ்கோடிங்கில் எரிக்கப்படுவதை முடக்கு.", "AllowOnTheFlySubtitleExtraction": "வசன வரிகள் பிரித்தெடுக்க அனுமதிக்கவும்", @@ -333,7 +333,7 @@ "HeaderConfirmRevokeApiKey": "API விசையைத் திரும்பப்பெறுக", "HeaderConfirmProfileDeletion": "சுயவிவர நீக்குதலை உறுதிப்படுத்தவும்", "HeaderSortBy": "மூலம் வரிசைப்படுத்து", - "HeaderSetupLibrary": "உங்கள் மீடியா நூலகங்களை அமைக்கவும்", + "HeaderSetupLibrary": "உங்கள் ஊடக நூலகங்களை அமைக்கவும்", "HeaderServerSettings": "சேவையக அமைப்புகள்", "HeaderServerAddressSettings": "சேவையக முகவரி அமைப்புகள்", "HeaderSeriesStatus": "தொடர் நிலை", @@ -492,7 +492,7 @@ "LabelAudioBitDepth": "ஆடியோ பிட் ஆழம்", "LabelArtistsHelp": "அரைக்காற்புள்ளியுடன் பல கலைஞர்களைப் பிரிக்கவும்.", "LabelArtists": "கலைஞர்கள்", - "LabelAppNameExample": "எடுத்துக்காட்டு: Sickbeard, Sonarr", + "LabelAppNameExample": "API விசைகளை அடையாளம் காண மனிதனால் படிக்கக்கூடிய பெயர். இந்த அமைப்பு செயல்பாட்டை பாதிக்காது.", "LabelAppName": "பயன்பாட்டின் பெயர்", "LabelAllowedRemoteAddressesMode": "தொலை ஐபி முகவரி வடிகட்டி பயன்முறை", "LabelAllowedRemoteAddresses": "தொலை ஐபி முகவரி வடிப்பான்", @@ -1241,7 +1241,7 @@ "Yesterday": "நேற்று", "Yes": "ஆம்", "YadifBob": "யடிஃப் பாப்", - "Yadif": "யடிஃப்", + "Yadif": "இன்னுமொரு டீஇண்டர்லேசிங் வடிகட்டி (YADIF)", "XmlTvSportsCategoriesHelp": "இந்த வகைகளைக் கொண்ட நிகழ்ச்சிகள் விளையாட்டுத் திட்டங்களாகக் காட்டப்படும். '|' உடன் பலவற்றைப் பிரிக்கவும்.", "XmlTvPathHelp": "XMLTV கோப்புக்கான பாதை. ஜெல்லிஃபின் இந்த கோப்பைப் படித்து புதுப்பிப்புகளுக்கு அவ்வப்போது சரிபார்க்கும். கோப்பை உருவாக்கி புதுப்பிக்க நீங்கள் பொறுப்பு.", "XmlTvNewsCategoriesHelp": "இந்த வகைகளைக் கொண்ட நிகழ்ச்சிகள் செய்தித் திட்டங்களாகக் காட்டப்படும். '|' உடன் பலவற்றைப் பிரிக்கவும்.", @@ -1385,7 +1385,7 @@ "LabelIconMaxResHelp": "'upnp:icon' பண்பு வழியாக வெளிப்படும் ஐகான்களின் அதிகபட்ச தெளிவுத்திறன்.", "LabelAlbumArtMaxResHelp": "'upnp:albumArtURI' பண்பு மூலம் வெளிப்படும் ஆல்பம் கலையின் அதிகபட்ச தெளிவுத்திறன்.", "Other": "மற்றவை", - "Bwdif": "BWDIF", + "Bwdif": "பாப் வீவர் டிஇண்டர்லேசிங் வடிகட்டி (BWDIF)", "UseDoubleRateDeinterlacingHelp": "டீஇன்டர்லேசிங் செய்யும் போது இந்த அமைப்பு புலம் வீதத்தைப் பயன்படுத்துகிறது, இது பெரும்பாலும் பாப் டீஇன்டர்லேசிங் என அழைக்கப்படுகிறது, இது டிவியில் ஒன்றோடொன்று இணைக்கப்பட்ட வீடியோவைப் பார்க்கும்போது நீங்கள் பார்ப்பது போன்ற முழு இயக்கத்தையும் வழங்க வீடியோவின் பிரேம் வீதத்தை இரட்டிப்பாக்குகிறது.", "UseDoubleRateDeinterlacing": "செயலிழக்கும்போது பிரேம் வீதத்தை இரட்டிப்பாக்குங்கள்", "LabelMaxMuxingQueueSizeHelp": "அனைத்து ஸ்ட்ரீம்களும் தொடங்கும் வரை காத்திருக்கும் போது, இடையகப்படுத்தக்கூடிய பாக்கெட்டுகளின் அதிகபட்ச எண்ணிக்கை. FFmpeg பதிவுகளில் \"அவுட்புட் ஸ்ட்ரீமிற்காக பல பாக்கெட்டுகள் இடையகப்படுத்தப்பட்டுள்ளன\" என்ற பிழையை நீங்கள் இன்னும் சந்தித்தால் அதை அதிகரிக்க முயற்சிக்கவும். பரிந்துரைக்கப்பட்ட மதிப்பு 2048 ஆகும்.", @@ -1764,7 +1764,7 @@ "LogLevel.Critical": "முக்கியம்", "NotificationsMovedMessage": "அறிவிப்புகள் செயல்பாடு Webhook செருகுநிரலுக்கு நகர்த்தப்பட்டது.", "LabelEnableLUFSScanHelp": "டிராக்குகள் முழுவதும் சமமான ஒலியைப் பெற செயலிகள் ஆடியோ பிளேபேக்கை இயல்பாக்கலாம். இது லைப்ரரி ஸ்கேன்களில் தாமதத்தை ஏற்படுத்தும் மற்றும் அதிக கணினி வளங்களை உபயோக படுத்தும் என்பதை நினைவில் கொள்ளவும்.", - "LabelParallelImageEncodingLimitHelp": "இணையாக இயக்க அனுமதிக்கப்படும் பட குறியாக்கங்களின் அதிகபட்ச அளவு. இதை 0 ஆக அமைப்பது உங்கள் கணினி விவரக்குறிப்புகளின் அடிப்படையில் வரம்பை தேர்வு செய்யும்.", + "LabelParallelImageEncodingLimitHelp": "இணையாக இயக்க அனுமதிக்கப்படும் பட குறியாக்கங்களின் அதிகபட்ச எண்ணிக்கை. இதை 0 ஆக அமைப்பது உங்கள் கணினியின் முக்கிய எண்ணிக்கையின் அடிப்படையில் வரம்பை தேர்ந்தெடுக்கும்.", "MessageRenameMediaFolder": "மீடியா லைப்ரரிக்கு மறுபெயரிடுவது அனைத்து மெட்டாடேட்டாவையும் இழக்க நேரிடும், எச்சரிக்கையுடன் தொடரவும்.", "SubtitleRed": "சிவப்பு", "SubtitleWhite": "வெள்ளை", @@ -1846,7 +1846,7 @@ "EncodingFormatHelp": "ஜெல்லிஃபின் மாற்றியமைக்க வேண்டிய வீடியோ குறியாக்கத்தைத் தேர்ந்தெடுக்கவும். தேர்ந்தெடுக்கப்பட்ட வடிவமைப்பிற்கான வன்பொருள் முடுக்கம் கிடைக்காதபோது ஜெல்லிஃபின் மென்பொருள் குறியாக்கத்தைப் பயன்படுத்தும். H264 குறியாக்கம் எப்போதும் இயக்கப்படும்.", "LabelTileWidthHelp": "X திசையில் ஒரு டைலுக்கு அதிகபட்ச படங்களின் எண்ணிக்கை.", "AllowMjpegEncoding": "MJPEG வடிவத்தில் குறியாக்கத்தை அனுமதிக்கவும் (ட்ரிக்ப்ளே உருவாக்கத்தின் போது பயன்படுத்தப்பட்டது)", - "LabelTrickplayAccel": "வன்பொருள் முடுக்கத்தை இயக்கு", + "LabelTrickplayAccel": "வன்பொருள் டிகோடிங்கை இயக்கு", "LabelScanBehavior": "ஸ்கேன் நடத்தை", "PriorityHigh": "உயர்", "LabelImageInterval": "பட இடைவெளி", @@ -1869,5 +1869,39 @@ "PriorityNormal": "இயல்பானது", "PriorityIdle": "செயலற்ற", "LabelProcessPriority": "செயல்முறை முன்னுரிமை", - "LabelQscale": "Qscale" + "LabelQscale": "Qscale", + "EnableTrueHdHelp": "உங்கள் சாதனம் TrueHD ஐ ஆதரித்தால் அல்லது இணக்கமான ஆடியோ ரிசீவருடன் இணைக்கப்பட்டிருந்தால் மட்டுமே இயக்கவும், இல்லையெனில் அது பிளேபேக் தோல்வியை ஏற்படுத்தலாம்.", + "LibraryScanFanoutConcurrencyHelp": "லைப்ரரி ஸ்கேன்களின் போது இணையான பணிகளின் அதிகபட்ச எண்ணிக்கை. இதை 0 ஆக அமைப்பது உங்கள் கணினியின் முக்கிய எண்ணிக்கையின் அடிப்படையில் வரம்பை தேர்ந்தெடுக்கும். எச்சரிக்கை: இந்த எண்ணை மிக அதிகமாக அமைப்பதால் பிணைய கோப்பு முறைமைகளில் சிக்கல்கள் ஏற்படலாம்; நீங்கள் சிக்கல்களை எதிர்கொண்டால், இந்த எண்ணைக் குறைக்கவும்.", + "PlaylistError.CreateFailed": "பிளேலிஸ்ட்டை உருவாக்குவதில் பிழை", + "PlaylistError.AddFailed": "பிளேலிஸ்ட்டில் சேர்ப்பதில் பிழை", + "SaveLyricsIntoMediaFolders": "மீடியா கோப்புறைகளில் பாடல் வரிகளைச் சேமிக்கவும்", + "LibraryScanFanoutConcurrency": "இணை நூலக ஸ்கேன் பணிகள் வரம்பு", + "ViewLyrics": "பாடல் வரிகளைப் பார்க்கவும்", + "SavePassword": "கடவுச்சொல்லை சேமிக்கவும்", + "Author": "நூலாசிரியர்", + "Colorist": "வண்ணமயமானவர்", + "CoverArtist": "அட்டைப்படக் கலைஞர்", + "Creator": "படைப்பாளி", + "DeleteLyrics": "பாடல் வரிகளை நீக்கவும்", + "Editor": "ஆசிரியர்", + "EnableTrueHd": "TrueHD ஐ இயக்கவும்", + "Illustrator": "சித்திரக்காரர்", + "Inker": "இன்கர்", + "Letterer": "கடிதம் எழுதுபவர்", + "Penciller": "பென்சிலர்", + "SaveLyricsIntoMediaFoldersHelp": "ஆடியோ கோப்புகளுக்கு அடுத்ததாக பாடல் வரிகளை சேமிப்பது அவற்றை எளிதாக நிர்வகிக்க அனுமதிக்கும்.", + "Translator": "மொழிபெயர்ப்பாளர்", + "EnableDts": "DTS (DCA) ஐ இயக்கு", + "EnableDtsHelp": "உங்கள் சாதனம் DTSஐ ஆதரித்தால் அல்லது இணக்கமான ஆடியோ ரிசீவருடன் இணைக்கப்பட்டிருந்தால் மட்டுமே இயக்கவும், இல்லையெனில் அது பிளேபேக் தோல்வியை ஏற்படுத்தக்கூடும்.", + "HeaderDeleteLyrics": "பாடல் வரிகளை நீக்கு", + "HeaderVideoAdvanced": "வீடியோ மேம்பட்டது", + "Lyrics": "பாடல் வரிகள்", + "ConfirmDeleteLyrics": "இந்தப் பாடல் வரிகளை நீக்குவது கோப்பு முறைமை மற்றும் உங்கள் மீடியா லைப்ரரி இரண்டிலிருந்தும் நீக்கப்படும். நீங்கள் நிச்சயமாக தொடர விரும்புகிறீர்களா?", + "LabelTrickplayAccelEncodingHelp": "தற்போது QSV மற்றும் VAAPI இல் மட்டுமே கிடைக்கிறது, இந்த விருப்பம் மற்ற வன்பொருள் முடுக்க முறைகளில் எந்த விளைவையும் ஏற்படுத்தாது.", + "LabelTrickplayAccelEncoding": "வன்பொருள் துரிதப்படுத்தப்பட்ட MJPEG குறியாக்கத்தை இயக்கவும்", + "PlaylistPublic": "பொது அணுகலை அனுமதிக்கவும்", + "PlaylistPublicDescription": "உள்நுழைந்துள்ள எவரும் இந்த பிளேலிஸ்ட்டைப் பார்க்க அனுமதிக்கவும்.", + "ErrorDeletingLyrics": "சேவையகத்திலிருந்து பாடல் வரிகளை நீக்குவதில் பிழை. ஜெல்லிஃபின் மீடியா கோப்புறையில் எழுதுவதற்கான அணுகலைப் பெற்றுள்ளதா என்பதைச் சரிபார்த்து, மீண்டும் முயற்சிக்கவும்.", + "HeaderNoLyrics": "பாடல் வரிகள் எதுவும் கிடைக்கவில்லை", + "HeaderLyricDownloads": "பாடல் வரிகள் பதிவிறக்கம்" } diff --git a/src/strings/tr.json b/src/strings/tr.json index 016588109a..2ca1019b46 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -580,7 +580,7 @@ "ClientSettings": "İstemci Ayarları", "BoxSet": "Seri Filmler", "AskAdminToCreateLibrary": "Bir yöneticiden kütüphane oluşturmasını isteyin.", - "AllowFfmpegThrottlingHelp": "Video kod dönüştürme işlemleri yeterince ilerlediyse kaynak tüketimini azaltmak için durdur. İleri/geri sarma işlemlerinin az yapıldığı durumlarda çok kullanışlıdır. Oynatım sorunları ile karşılaşırsanız bu özelliği kapatın.", + "AllowFfmpegThrottlingHelp": "Video kod dönüştürme işlemleri yeterince ilerlediyse daha az kaynak tüketmesi için işlem duraklatılır. İleri/geri sarma işlemlerinin az yapıldığı durumlarda çok kullanışlıdır. Oynatım sorunları ile karşılaşırsanız bu özelliği kapatın.", "AlbumArtist": "Albüm Sanatçısı", "HeaderTuners": "Alıcılar", "HeaderTranscodingProfileHelp": "Kod dönüştürme gerektiğinde hangi biçimin kullanılacağını belirlemek için kod dönüştürme profilleri ekle.", @@ -695,7 +695,7 @@ "LabelAudioBitrate": "Ses bit hızı", "LabelAudioBitDepth": "Ses bit derinliği", "LabelArtistsHelp": "Birden çok sanatçıyı noktalı virgülle ayırın.", - "LabelAppNameExample": "Örnek: Sickbeard, Sonarr", + "LabelAppNameExample": "API anahtarlarını tanımlamak için kullanılan bir ad. Bu ayar işlevselliği etkilemeyecektir.", "LabelAllowedRemoteAddressesMode": "Uzak IP adresi filtre modu", "LabelAllowedRemoteAddresses": "Uzak IP adresi filtresi", "LabelAlbumArtists": "Albüm sanatçıları", @@ -890,7 +890,7 @@ "HeaderNetworking": "IP Protokolleri", "HeaderDebugging": "Hata ayıklama ve izleme", "EnableTonemapping": "Ton eşlemeyi etkinleştir", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "Sort": "Sırala", "Shuffle": "Karıştır", "Suggestions": "Öneriler", @@ -1630,7 +1630,7 @@ "EnableFallbackFontHelp": "Özel alternatif yazı tiplerini etkinleştirin. Bu, yanlış altyazı oluşturma sorununu önleyebilir.", "EnableFallbackFont": "Yedek yazı tiplerini etkinleştir", "HeaderSelectFallbackFontPath": "Yedek Yazı Tipi Klasörü Yolunu Seçin", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "XmlTvSportsCategoriesHelp": "Bu kategorilere sahip programlar spor programları olarak gösterilecektir. Birden çok girdiyi '|' ile ayırın.", "XmlTvPathHelp": "Bir XMLTV dosya yolu. Jellyfin bu dosyayı okuyacak ve güncellemeler için düzenli olarak kontrol edecektir. Dosyayı oluşturmak ve güncellemek sizin sorumluluğunuzdadır.", "XmlTvNewsCategoriesHelp": "Bu kategorilere sahip programlar haber programları olarak gösterilecektir. Birden çok girdiyi '|' ile ayırın.", @@ -1730,7 +1730,7 @@ "LabelDummyChapterDuration": "Aralık", "LabelChapterImageResolutionHelp": "Çıkarılan bölüm resimleri çözünürlüğü. Bunu değiştirmenin mevcut sahte bölümler üzerinde hiçbir etkisi olmayacaktır.", "LabelParallelImageEncodingLimit": "Paralel resim kodlama sınırı", - "LabelParallelImageEncodingLimitHelp": "Paralel olarak çalışmasına izin verilen maksimum resim kodlaması miktarı. Bunu 0 olarak ayarlamak, sistem özelliklerinize göre bir sınır seçecektir.", + "LabelParallelImageEncodingLimitHelp": "Paralel olarak çalışmasına izin verilen maksimum resim kodlaması sayısı. Bunu 0 olarak ayarlamak, sisteminizin çekirdek sayısına göre bir sınır seçecektir.", "AllowSegmentDeletionHelp": "İstemcinin indirdiği eski segmentleri silin. Bu işlem tamamen dönüştürülmüş dosyaların diskte yer kaplamasına engel olur. Eğer oynatımda problem yaşıyorsanız lütfen bu seçeneği devre dışı bırakın.", "LabelDeveloper": "Geliştirici", "HeaderEpisodesStatus": "Bölüm Durumu", @@ -1852,5 +1852,35 @@ "EnableLibrary": "Kütüphaneyi etkinleştir", "EnableLibraryHelp": "Kütüphanenin devre dışı bırakılması kütüphaneyi tüm kullanıcı görünümlerinden gizleyecektir.", "LabelTrickplayAccelEncoding": "Donanım hızlandırmalı MJPEG kodlamayı etkinleştir", - "LabelTrickplayAccelEncodingHelp": "Şu anda yalnızca QSV ve VAAPI'de kullanılabilir. Bu seçeneğin diğer donanım hızlandırma yöntemleri üzerinde bir etkisi yoktur." + "LabelTrickplayAccelEncodingHelp": "Şu anda yalnızca QSV ve VAAPI'de kullanılabilir. Bu seçeneğin diğer donanım hızlandırma yöntemleri üzerinde bir etkisi yoktur.", + "HeaderDeleteLyrics": "Şarkı Sözlerini Sil", + "ViewLyrics": "Şarkı sözünü göster", + "ConfirmDeleteLyrics": "Bu şarkı sözlerini silmek, onları hem dosya sisteminden hem de medya kütüphanenizden silecektir. Devam etmek istediğinizden emin misiniz?", + "ErrorDeletingLyrics": "Şarkı sözlerini sunucudan silerken bir hata oluştu. Lütfen Jellyfin'in medya klasörüne yazma erişimi olup olmadığını kontrol edin ve tekrar deneyin.", + "DeleteLyrics": "Şarkı sözünü sil", + "HeaderNoLyrics": "Şarkı sözü bulunamadı", + "Lyrics": "Şarkı sözü", + "SavePassword": "Parolayı Kaydet", + "PlaylistError.CreateFailed": "Çalma listesi oluşturulamadı", + "LibraryScanFanoutConcurrency": "Paralel kütüphane tarama görevleri sınırı", + "LibraryScanFanoutConcurrencyHelp": "Kütüphane taramaları sırasında maksimum paralel görev sayısı. Bunu 0 olarak ayarlamak, sisteminizin çekirdek sayısına göre bir sınır seçecektir. UYARI: Bu sayının çok yüksek ayarlanması ağ dosya sistemlerinde sorunlara neden olabilir; sorunla karşılaşırsanız bu sayıyı düşürün.", + "PlaylistError.AddFailed": "Çalma listesine eklenemedi", + "SaveLyricsIntoMediaFoldersHelp": "Şarkı sözlerini ses dosyalarının yanında saklamak, bunların daha kolay yönetilmesini sağlayacaktır.", + "SaveLyricsIntoMediaFolders": "Şarkı sözlerini medya klasörlerine kaydet", + "Author": "Yazar", + "Colorist": "Renklendiren", + "CoverArtist": "Kapak sanatçısı", + "Creator": "Yaratıcı", + "Editor": "Editör", + "Illustrator": "İllüstratör", + "Translator": "Çeviri", + "EnableDts": "DTS'yi (DCA) etkinleştir", + "EnableTrueHd": "TrueHD'yi etkinleştir", + "EnableTrueHdHelp": "Yalnızca cihazınız TrueHD'yi destekliyorsa veya uyumlu bir ses alıcısına bağlıysa etkinleştirin; aksi takdirde oynatma hatasına neden olabilir.", + "EnableDtsHelp": "Yalnızca cihazınız DTS'yi destekliyorsa veya uyumlu bir ses alıcısına bağlıysa etkinleştirin; aksi takdirde oynatma hatasına neden olabilir.", + "PlaylistPublic": "Genel erişime izin ver", + "PlaylistPublicDescription": "Bu oynatma listesinin oturum açmış herhangi bir kullanıcı tarafından görüntülenmesine izin verin.", + "HeaderLyricDownloads": "Şarkı Sözü İndirme", + "LabelSelectPreferredTranscodeVideoAudioCodec": "Video oynatmada tercih edilen ses kod dönüştürme", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Video içeriği için tercih edilen kod dönüştürme ses codec bileşenini seçin. Tercih edilen codec desteklenmiyorsa, sunucu mevcut bir sonraki en iyi codec'i kullanacaktır." } diff --git a/src/strings/uk.json b/src/strings/uk.json index 6d9ab023c6..da2fc289cb 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -284,7 +284,7 @@ "DashboardArchitecture": "Архітектура: {0}", "DailyAt": "Щодня о {0}", "ClearQueue": "Очистити чергу", - "Bwdif": "Фільтр BWDIF", + "Bwdif": "Фільтр деінтерлейсингу Боба Уівера (BWDIF)", "ButtonUseQuickConnect": "Використати Quick Connect", "ButtonPlayer": "Програвач", "ButtonCast": "Трансляція на пристрій", @@ -558,7 +558,7 @@ "LabelAudioSampleRate": "Розрядність аудіо", "LabelAudioBitDepth": "Розрядність аудіо", "LabelArtistsHelp": "Розділіть декількох виконавців крапкою з комою.", - "LabelAppNameExample": "Приклад: Боляча борода, Sonarr", + "LabelAppNameExample": "Людська назва для ідентифікації API-ключів. Цей параметр не впливає на функціональність.", "LabelAlbumArtPN": "Обкладинка альбому PN", "LabelAlbumArtists": "Виконавці альбому", "LabelAlbumArtHelp": "PN використовується для обкладинки альбому в атрибуті 'dlna:profileID' в 'upnp:albumArtURI'. Деякі пристрої вимагають певного значення, незалежно від розміру зображення.", @@ -1553,7 +1553,7 @@ "HeaderSelectFallbackFontPath": "Оберіть шлях до теки резервного шрифту", "Yesterday": "Вчора", "Yes": "Так", - "Yadif": "YADIF", + "Yadif": "Ще один фільтр деінтерлейсингу (YADIF)", "XmlTvSportsCategoriesHelp": "Програми з цими категоріями відображатимуться як спортивні програми. Розділіть множинні символом «|».", "XmlTvNewsCategoriesHelp": "Програми з цими категоріями відображатимуться як програми новин. Розділіть множинні символом «|».", "XmlTvMovieCategoriesHelp": "Програми з цими категоріями відображатимуться як фільми. Розділіть множинні символом «|».", @@ -1716,7 +1716,7 @@ "Featurette": "Художник", "HeaderPerformance": "Продуктивність", "LabelParallelImageEncodingLimit": "Обмеження на паралельне кодування зображень", - "LabelParallelImageEncodingLimitHelp": "Максимальна кількість кодувань зображень, які дозволено запускати паралельно. Якщо встановити значення 0, буде обрано обмеження на основі характеристик вашої системи.", + "LabelParallelImageEncodingLimitHelp": "Максимальна кількість кодувань зображень, які дозволено запускати паралельно. Якщо встановити значення 0, буде обрано обмеження на основі кількості ядер у вашій системі.", "LabelEnableAudioVbrHelp": "Змінний бітрейт забезпечує краще співвідношення якості до середнього бітрейту, але в деяких рідкісних випадках може спричинити проблеми з буферизацією та сумісністю.", "LabelEnableAudioVbr": "Увімкнути VBR", "Select": "Обрати", @@ -1864,5 +1864,29 @@ "HeaderDeleteLyrics": "Видалити текст пісні", "HeaderNoLyrics": "Текст пісні не знайдено", "Lyrics": "Текст пісні", - "ViewLyrics": "Переглянути текст пісні" + "ViewLyrics": "Переглянути текст пісні", + "SavePassword": "Зберегти пароль", + "PlaylistError.AddFailed": "Помилка додавання до списку відтворення", + "PlaylistError.CreateFailed": "Помилка створення списку відтворення", + "SaveLyricsIntoMediaFoldersHelp": "Зберігання текстів пісень поруч з аудіофайлами дозволить легше ними керувати.", + "Author": "Автор", + "Colorist": "Колорист", + "CoverArtist": "Художник обкладинки", + "Creator": "Творець", + "Editor": "Редактор", + "Illustrator": "Ілюстратор", + "Letterer": "Письменник", + "Translator": "Перекладач", + "EnableDts": "Увімкнути DTS (DCA)", + "EnableDtsHelp": "Увімкніть, якщо ваш пристрій підтримує DTS або підключений до сумісного аудіо ресивера, інакше це може призвести до збоїв у відтворенні.", + "EnableTrueHd": "Увімкнути TrueHD", + "EnableTrueHdHelp": "Увімкніть, якщо ваш пристрій підтримує TrueHD або підключений до сумісного аудіо приймача, інакше це може призвести до збоїв у відтворенні.", + "PlaylistPublic": "Дозволити публічний доступ", + "PlaylistPublicDescription": "Дозвольте переглядати цей список відтворення будь-якому зареєстрованому користувачеві.", + "HeaderLyricDownloads": "Завантаження текстів пісень", + "SaveLyricsIntoMediaFolders": "Зберігати тексти пісень в теках з медіафайлами", + "LibraryScanFanoutConcurrencyHelp": "Максимальна кількість паралельних завдань під час сканування медіатеки. Якщо встановити значення 0, буде обрано обмеження на основі кількості ядер у вашій системі. ПОПЕРЕДЖЕННЯ: Занадто високе значення цього параметра може спричинити проблеми з мережевими файловими системами; якщо ви зіткнулися з такими проблемами, зменшіть це значення.", + "LibraryScanFanoutConcurrency": "Обмеження на паралельне сканування медіатек", + "Inker": "Inker", + "Penciller": "Penciler" } diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index f78bb196a9..365adb458a 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -398,7 +398,7 @@ "LabelAllowedRemoteAddresses": "远程IP地址过滤器", "LabelAllowedRemoteAddressesMode": "远程IP地址过滤器模式", "LabelAppName": "APP名称", - "LabelAppNameExample": "例如:Sickbeard, Sonarr", + "LabelAppNameExample": "用于识别 API 密钥的可读名称。此设置不影响功能。", "LabelArtists": "艺术家", "LabelArtistsHelp": "将多个艺术家用分号分隔。", "LabelAudioLanguagePreference": "首选音频语言", @@ -457,7 +457,7 @@ "LabelDownloadLanguages": "下载语言", "LabelDropImageHere": "拖拽或点击选择图像于此处。", "LabelDroppedFrames": "丢弃的帧", - "LabelDropShadow": "阴影", + "LabelDropShadow": "字体描边", "LabelDynamicExternalId": "{0} Id", "LabelEasyPinCode": "简单 PIN 码", "LabelEmbedAlbumArtDidl": "在DIDL中嵌入专辑封面", @@ -523,7 +523,7 @@ "LabelKodiMetadataSaveImagePaths": "保存图像路径在NFO文件", "LabelKodiMetadataSaveImagePathsHelp": "如果你的图像文件名不符合Kodi的规范,推荐使用。", "LabelKodiMetadataUser": "为以下用户保存观看历史数据到 NFO 文件中", - "LabelKodiMetadataUserHelp": "保存观看历史数据至 NFO 文件中以供其他应用程序利用。", + "LabelKodiMetadataUserHelp": "保存观看历史数据至 NFO 文件中以供其他应用程序使用。", "LabelLanNetworks": "局域网", "LabelLanguage": "语言", "LabelLineup": "排队", @@ -705,7 +705,7 @@ "LabelffmpegPathHelp": "FFmpeg 应用文件或包含 FFmpeg 的文件夹的路径。", "LanNetworksHelp": "在强制带宽限制时,认作本地网络上的 IP 地址或 IP/网络掩码条目的逗号分隔列表。如果设置此项,所有其它 IP 地址将被视为在外部网络上,并且将受到外部带宽限制。如果保留为空,则只将服务器的子网视为本地网络。", "Large": "大", - "LatestFromLibrary": "最近添加于 {0}", + "LatestFromLibrary": "最近添加的 {0}", "LearnHowYouCanContribute": "了解如何贡献。", "LibraryAccessHelp": "选择共享给此用户的媒体库。管理员有权使用媒体资料管理器来编辑所有文件夹。", "List": "列表", @@ -924,7 +924,7 @@ "PasswordResetComplete": "密码已重置。", "PasswordResetConfirmation": "你确定要重置密码?", "PasswordSaved": "密码已保存。", - "People": "人物", + "People": "演职人员", "PerfectMatch": "最佳匹配", "Photos": "照片", "PictureInPicture": "画中画", @@ -1019,7 +1019,7 @@ "SortName": "排序名称", "Sports": "体育", "StopRecording": "停止录制", - "Studios": "工作室", + "Studios": "制片发行商", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "这些设置也会被应用于任何通过此设备发起的 Google Cast 播放。", "SubtitleAppearanceSettingsDisclaimer": "以下设置不适用于上述图形字幕或嵌入其自身样式的 ASS/SSA 字幕。", "SubtitleDownloadersHelp": "按优先顺序启用并排列您的首选字幕下载程序。", @@ -1270,7 +1270,7 @@ "EveryXMinutes": "每 {0} 分钟", "WriteAccessRequired": "Jellyfin需要此文件夹的写入权限。请确认是否拥有写入权限并重试。", "PathNotFound": "无法找到此路径。请确认路径有效并重试。", - "Yadif": "YADIF", + "Yadif": "另一种去隔行滤镜(YADIF)", "LabelDeinterlaceMethod": "反交错方法", "DeinterlaceMethodHelp": "选择对隔行扫描内容进行软转码时所用的反交错方法。当启用支持硬件反交错的硬件加速后,将使用硬件解码器代替此设置。", "LabelLibraryPageSize": "媒体库分页阈值", @@ -1408,7 +1408,7 @@ "Data": "数据", "UseDoubleRateDeinterlacing": "反交错时使帧率翻倍", "UseDoubleRateDeinterlacingHelp": "此设置使用去隔行时的场频,通常称为 Bob 去隔行,它将视频的帧频加倍,以提供完整的运动效果,就像在电视上观看隔行视频时看到的那样。", - "Bwdif": "BWDIF", + "Bwdif": "Bob Weaver 去隔行滤镜(BWDIF)", "QuickConnectNotActive": "快速连接在此服务器上未启用", "QuickConnectNotAvailable": "联系您的服务器管理员以启用快速连接", "QuickConnectInvalidCode": "无效的快速连接验证码", @@ -1626,7 +1626,7 @@ "ShowParentImages": "显示节目图片", "AllowEmbeddedSubtitlesAllowTextOption": "允许文本", "AllowEmbeddedSubtitlesAllowImageOption": "允许图像", - "AllowEmbeddedSubtitlesAllowNoneOption": "允许无", + "AllowEmbeddedSubtitlesAllowNoneOption": "不允许", "AllowEmbeddedSubtitlesAllowAllOption": "允许全部", "AllowEmbeddedSubtitlesHelp": "禁用媒体容器中封装的字幕。 需要对媒体库进行全面刷新。", "AllowEmbeddedSubtitles": "禁用不同类型的嵌入字幕", @@ -1642,7 +1642,7 @@ "ButtonBackspace": "退格", "EnableRewatchingNextUpHelp": "启用在“接下来”模块中显示已观看的剧集。", "Localization": "本地化", - "ItemDetails": "文件详情", + "ItemDetails": "项目详情", "EnableRewatchingNextUp": "在接下来界面中启用重新播放", "Production": "制片", "StoryArc": "故事线", @@ -1652,7 +1652,7 @@ "EnableEnhancedNvdecDecoderHelp": "增强的 NVDEC 实现,如果遇到解码错误,请禁用此选项以使用 CUVID。", "HomeVideosPhotos": "家庭视频和照片", "Bold": "粗体", - "LabelTextWeight": "文字粗细", + "LabelTextWeight": "文本粗细", "EnableSplashScreen": "显示启动画面", "MediaInfoDvBlSignalCompatibilityId": "杜比视界 BL 兼容性序号", "MediaInfoBlPresentFlag": "杜比视界 BL 存在标记", @@ -1717,7 +1717,7 @@ "SubtitleYellow": "黄色", "Featurette": "花絮", "Short": "短片", - "LabelParallelImageEncodingLimitHelp": "允许并行运行的图像编码的最大数量。设为 0 以根据您的系统配置自动设置。", + "LabelParallelImageEncodingLimitHelp": "允许并行运行的最大图像编码数量。 将其设置为 0 将根据您的系统核心数量选择限制。", "HeaderPerformance": "性能", "LabelParallelImageEncodingLimit": "并行图像编码限制", "LabelEnableAudioVbr": "启用 VBR 音频编码", @@ -1728,7 +1728,7 @@ "MenuOpen": "打开菜单", "MenuClose": "关闭菜单", "UserMenu": "用户菜单", - "Studio": "广播", + "Studio": "制片发行商", "AllowCollectionManagement": "允许该用户管理收藏夹", "EnableAudioNormalizationHelp": "音频标准化将添加一个恒定的增益,以保持平均音量在所需的级别(-18dB)。", "EnableAudioNormalization": "音频标准化", @@ -1773,7 +1773,7 @@ "ForeignPartsOnly": "仅限强制开启/外语部分", "HearingImpairedShort": "听障/聋哑人士字幕", "UnknownError": "发生未知错误。", - "GoHome": "回家", + "GoHome": "返回主页", "BackdropScreensaver": "背景屏保", "LogoScreensaver": "徽标屏保", "LabelIsHearingImpaired": "用于听障/聋哑人士", @@ -1867,5 +1867,32 @@ "DeleteLyrics": "删除歌词", "HeaderDeleteLyrics": "删除歌词", "HeaderNoLyrics": "未找到歌词", - "ViewLyrics": "查看歌词" + "ViewLyrics": "查看歌词", + "SavePassword": "保存密码", + "EnableDts": "启用 DTS(DCA)", + "EnableDtsHelp": "仅当您的设备支持 DTS 编码或连接到兼容的音频接收器时才启用,否则可能会导致播放失败。", + "EnableTrueHd": "启用 TrueHD", + "HeaderVideoAdvanced": "高级视频选项", + "EnableTrueHdHelp": "仅当您的设备支持 TrueHD 编码或连接到兼容的音频接收器时才启用,否则可能会导致播放失败。", + "HeaderLyricDownloads": "歌词下载", + "SaveLyricsIntoMediaFolders": "将歌词保存到媒体文件夹中", + "SaveLyricsIntoMediaFoldersHelp": "将歌词存储在音频文件旁边将使它们更容易管理。", + "PlaylistPublic": "允许公开访问", + "PlaylistPublicDescription": "允许任何登录用户查看此播放列表。", + "PlaylistError.CreateFailed": "创建播放列表时出错", + "PlaylistError.AddFailed": "添加到播放列表时出错", + "Author": "作者", + "Colorist": "着色师", + "CoverArtist": "封面艺术家", + "Creator": "创作者", + "Editor": "编辑", + "Illustrator": "插画师", + "Inker": "着墨师", + "Letterer": "文字书写员", + "Penciller": "铅笔师", + "Translator": "译者", + "LibraryScanFanoutConcurrency": "并行媒体库扫描任务限制", + "LibraryScanFanoutConcurrencyHelp": "媒体库扫描期间并行任务的最大数量。将其设置为 0 将根据您的系统核心数量选择限制。警告:将此数字设置得太高可能会导致网络文件系统出现问题; 如果您遇到问题,请降低此数字。", + "LabelSelectPreferredTranscodeVideoAudioCodec": "视频播放中首选的转码音频编解码器", + "SelectPreferredTranscodeVideoAudioCodecHelp": "选择视频内容转码到的首选音频编解码器。如果首选编解码器不受支持,服务器将使用下一个最佳可用编解码器。" } diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index cd01fcfd76..5a1423f6c5 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -3,7 +3,7 @@ "All": "全部", "AllowRemoteAccessHelp": "如果未勾選,所有遠端連線都將被阻擋。", "Browse": "瀏覽", - "MessageBrowsePluginCatalog": "瀏覽我們的附加元件目錄來查看可用的附加元件。", + "MessageBrowsePluginCatalog": "瀏覽我們的擴充功能目錄來查看可用的擴充功能。", "ButtonAddServer": "新增伺服器", "ButtonAddUser": "新增使用者", "ButtonCancel": "取消", @@ -35,26 +35,26 @@ "FileReadError": "在讀取檔案時發生錯誤。", "Friday": "星期五", "GuideProviderLogin": "登入", - "HeaderActiveRecordings": "正在錄影的節目", - "HeaderAdditionalParts": "附加部份", + "HeaderActiveRecordings": "正在錄製的節目", + "HeaderAdditionalParts": "額外的部份", "HeaderAdmin": "管理", "HeaderCustomDlnaProfiles": "自訂設定檔", "HeaderDeleteItem": "刪除項目", "HeaderEasyPinCode": "簡易 PIN 碼", - "HeaderFeatureAccess": "功能存取", - "HeaderFetchImages": "抓取圖片", + "HeaderFeatureAccess": "可用的功能", + "HeaderFetchImages": "擷取圖片", "HeaderFrequentlyPlayed": "經常播放", "HeaderGuideProviders": "節目表提供者", "HeaderImageSettings": "圖像設定", - "HeaderInstantMix": "瞬時混播", + "HeaderInstantMix": "即使混音", "HeaderLatestEpisodes": "最新劇集", "HeaderLatestMovies": "最新電影", - "HeaderLatestRecordings": "最新錄影的節目", + "HeaderLatestRecordings": "最新錄製的節目", "HeaderMediaFolders": "媒體資料夾", "HeaderPaths": "路徑", "HeaderPlayAll": "全部播放", "HeaderPleaseSignIn": "請登入", - "HeaderPreferredMetadataLanguage": "首選媒體資訊語言", + "HeaderPreferredMetadataLanguage": "偏好媒體資訊語言", "HeaderRecentlyPlayed": "最近播放", "HeaderScenes": "場景", "HeaderSelectServerCachePath": "選擇伺服器快取路徑", @@ -63,12 +63,12 @@ "HeaderUsers": "使用者", "Help": "說明", "ItemCount": "{0}個項目", - "LabelAudioLanguagePreference": "音訊語言偏好選項", + "LabelAudioLanguagePreference": "偏好的音軌語言", "LabelCachePath": "快取路徑", - "LabelCollection": "收藏櫃", + "LabelCollection": "系列", "LabelContentType": "內容類型", "LabelCountry": "國家/地區", - "LabelCurrentPassword": "當前的密碼", + "LabelCurrentPassword": "目前密碼", "LabelDay": "星期", "LabelEnableDlnaClientDiscoveryInterval": "尋找用戶端時間間隔", "LabelEnableDlnaDebugLogging": "記錄 DLNA 除錯資料到日誌", @@ -81,8 +81,8 @@ "LabelFinish": "完成", "LabelServerNameHelp": "名稱將作為伺服器名稱,預設是伺服器的主機名稱。", "LabelLanguage": "語言", - "LabelMaxBackdropsPerItem": "每個項目背景的最大數目", - "LabelMaxParentalRating": "最大允許的家長評級", + "LabelMaxBackdropsPerItem": "每個項目的最大背景數量", + "LabelMaxParentalRating": "最大允許的年齡分級", "LabelMaxResumePercentage": "最大繼續播放百分比", "LabelMaxResumePercentageHelp": "媒體若於此時間後停止,會被認定為已播放。", "LabelMaxScreenshotsPerItem": "每件物品截圖的最大數量:", @@ -93,7 +93,7 @@ "LabelMinResumePercentage": "最低繼續播放百分比", "LabelMinResumePercentageHelp": "媒體如果在這個時間之前停止,會被認定為未播放。", "LabelMinScreenshotDownloadWidth": "最小截圖下載寬度:", - "LabelName": "名字", + "LabelName": "名稱", "LabelNewPassword": "新密碼", "LabelNewPasswordConfirm": "確認新密碼", "LabelPassword": "密碼", @@ -186,7 +186,7 @@ "TabCatalog": "目錄", "TabLatest": "最新", "TabMusic": "音樂", - "TabMyPlugins": "我的附加元件", + "TabMyPlugins": "我的擴充功能", "TabNetworks": "電視網路", "TabProfiles": "設定", "TabServer": "伺服器", @@ -197,7 +197,7 @@ "TrackCount": "{0} 個曲目", "Tuesday": "星期二", "UninstallPluginConfirmation": "你確定要解除安裝 {0}?", - "HeaderUninstallPlugin": "解除安裝附加元件", + "HeaderUninstallPlugin": "解除安裝擴充功能", "UserProfilesIntro": "Jellyfin 可單獨對使用者進行設定,所有使用者擁有自己的顯示設定,播放狀態和家長控制。", "Wednesday": "星期三", "WelcomeToProject": "歡迎使用 Jellyfin!", @@ -250,7 +250,7 @@ "AllEpisodes": "所有集數", "AllowHWTranscodingHelp": "若啟用,將會允許調解器同步轉檔。能夠減少伺服器轉檔需求。", "AllowOnTheFlySubtitleExtraction": "允許即時提取字幕", - "AllowOnTheFlySubtitleExtractionHelp": "從影片中提取內建字幕並以純文字的形式顯示以避免影片轉檔。某些系統中提取的過程可能花費較長時間並導致影片播放出現停滯。若停用這個選項,當內建字幕不被播放端設備支援時,字幕將透過轉檔燒錄至影片中。", + "AllowOnTheFlySubtitleExtractionHelp": "從影片中提取內建字幕並以純文字的形式顯示以避免影片轉檔。某些系統中提取的過程可能花費較長時間並導致影片播放出現停滯。若停用這個選項,當內建字幕不被播放端裝置支援時,字幕將透過轉檔燒錄至影片中。", "AllowedRemoteAddressesHelp": "可以從非本地連線的 IP 位址或 IP/子網域遮罩清單,用逗號分隔。 留白則允許所有IP。", "BookLibraryHelp": "支援有聲書和電子書。請參閱 {0} 書籍命名指南 {1}。", "Box": "盒子", @@ -359,7 +359,7 @@ "Episodes": "劇集", "ErrorAddingListingsToSchedulesDirect": "在將電視節目時間表新增到您的 Schedules Direct 帳號時出現錯誤。每個 Schedules Direct 帳號只允許有限的時間表。您在繼續前可能需要登入 Schedules Direct 網站並刪除帳號中的其它項目。", "ErrorAddingMediaPathToVirtualFolder": "新增媒體路徑時發生錯誤,請確認路徑是否有效,且 Jellyfin 具此位置的存取權。", - "ErrorAddingTunerDevice": "新增解碼器設備時發生錯誤,請確認它是否可被存取後重試。", + "ErrorAddingTunerDevice": "新增電視解碼器裝置時發生錯誤,請確認它是否可被存取後重試。", "ErrorAddingXmlTvFile": "存取 XMLTV 檔案時發生錯誤,請確認此檔案是否存在後重試。", "ErrorDeletingItem": "從伺服器刪除項目時發生錯誤,請確認伺服器對此位置有寫入權限並重試。", "ErrorGettingTvLineups": "下載電視節目表時發生錯誤,請確認你的資訊是否正確後重試。", @@ -371,30 +371,30 @@ "ExtraLarge": "特大", "ExtractChapterImagesHelp": "擷取章節圖片將允許 Jellyfin 顯示圖片形式的章節選單,過程可能會非常緩慢、佔用大量 CPU 資源,並且可能需要幾 GB 的硬碟空間。擷取會在影片被偵測到時啟動,同時也可作為一個夜間排程工作運行,這個工作可以在「排程工作」選項中進行設定,不建議在尖峰時段進行這個工作。", "Extras": "額外", - "FFmpegSavePathNotFound": "我們無法通過你輸入的路徑找到 FFmpeg。 FFprobe 同樣也是必要且應該被放在同一個資料夾中。他們通常會被打包在一起以供下載。請檢查這個路徑後重試。", + "FFmpegSavePathNotFound": "我們無法通過你輸入的路徑找到 FFmpeg。 FFprobe 同樣也是必要的,且必須被放在同一個資料夾中。他們通常會被打包在一起以供下載。請檢查這個路徑後重試。", "FastForward": "快轉", "Favorites": "我的最愛", "Features": "功能", "FileReadCancelled": "檔案讀取已取消。", - "Filters": "濾鏡", + "Filters": "篩選器", "Folders": "資料夾", "FormatValue": "格式:{0}", "Fullscreen": "全螢幕", "General": "一般", - "Genre": "類型", + "Genre": "風格", "Genres": "風格", - "GroupBySeries": "按系列分組", - "GroupVersions": "按版本分組", - "GuestStar": "客串", + "GroupBySeries": "按系列分類", + "GroupVersions": "按版本分類", + "GuestStar": "客串演員", "Guide": "指南", "GuideProviderSelectListings": "選擇清單", - "H264CrfHelp": "Constant Rate Factor(CRF)是 x264 和 x265 軟體編碼器的品質設定。 有效範圍為 0 - 51,數值越低品質越好(檔案較大)。 推薦值為18到28之間。x264的預設值為23,x265的預設值為28。硬體編碼器不會使用這些設定值。", + "H264CrfHelp": "Constant Rate Factor(CRF)是 x264 和 x265 軟體編碼器的畫質設定。 有效範圍為 0 - 51,數值越低品質越好(檔案較大)。 建議值為18到28之間。x264的預設值為23,x265的預設值為28。硬體編碼器不會使用這些設定值。", "EncoderPresetHelp": "選擇較快的值以提升效能,或者選擇較慢的值以提升品質。", "HDPrograms": "HD 節目", - "HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和影片驅動程式是最新的。如果你在開啟此項後難以播放影片,那麼你需要將此選項設回「無」。", - "HeaderAccessSchedule": "存取時程", - "HeaderAccessScheduleHelp": "建立一個存取時程以限制可存取的時段。", - "HeaderActiveDevices": "運行中裝置", + "HardwareAccelerationWarning": "啟動硬體加速可能在某些環境下導致系統不穩定。請確認你的作業系統和顯示驅動程式是最新的。如果你在開啟此項後播放影片遇到困難,請將此選項設定為「無」。", + "HeaderAccessSchedule": "存取時段限制", + "HeaderAccessScheduleHelp": "建立存取時段限制以限制可存取的時段。", + "HeaderActiveDevices": "使用中的裝置", "HeaderActivity": "活動", "HeaderAddToCollection": "加到收藏", "HeaderAddToPlaylist": "加到播放清單", @@ -404,12 +404,12 @@ "HeaderAllowMediaDeletionFrom": "允許從以下位置刪除媒體", "HeaderApiKey": "API 金鑰", "HeaderApiKeys": "API 金鑰", - "HeaderApiKeysHelp": "外部應用程式需要有一個 API 金鑰以用於和伺服器溝通。金鑰會在使用者登入時自動發行,也可以手動產生一個金鑰。", + "HeaderApiKeysHelp": "外部應用程式需要有一個 API 金鑰用於和伺服器溝通。金鑰會在使用者登入時自動發放。你也可以手動產生一個金鑰。", "HeaderApp": "應用程式", - "HeaderAppearsOn": "同時出現於", + "HeaderAppearsOn": "出現於", "HeaderAudioBooks": "有聲書", "HeaderAudioSettings": "音訊設定", - "HeaderBlockItemsWithNoRating": "封鎖沒有或無法識別評級的內容", + "HeaderBlockItemsWithNoRating": "封鎖沒有或無法識別分級的內容", "HeaderBranding": "品牌", "HeaderCancelRecording": "取消錄製", "HeaderCancelSeries": "取消系列", @@ -418,36 +418,36 @@ "HeaderChapterImages": "章節圖片", "HeaderCodecProfile": "編碼設定檔", "HeaderCodecProfileHelp": "編碼器的設定檔標明了設備播放特定編碼時的限制;如果在限制之內則媒體將被轉檔,否則編碼器將被設定為直接播放。", - "HeaderConfigureRemoteAccess": "設定遠端訪問", - "HeaderConfirmPluginInstallation": "確認附加元件安裝", + "HeaderConfigureRemoteAccess": "設定遠端存取", + "HeaderConfirmPluginInstallation": "確認擴充功能安裝", "HeaderConfirmProfileDeletion": "確認刪除個人資料", - "HeaderConfirmRevokeApiKey": "重設 API 金鑰", - "HeaderConnectToServer": "連結至伺服器", - "HeaderConnectionFailure": "連結失敗", + "HeaderConfirmRevokeApiKey": "撤銷 API 金鑰", + "HeaderConnectToServer": "連接至伺服器", + "HeaderConnectionFailure": "連接失敗", "HeaderContainerProfile": "影片載體設定", "HeaderContainerProfileHelp": "影片容器的設定檔標明了設備播放特定媒體格式時的限制。如果在限制之內則媒體將被轉檔,否則媒體格式將被設定為直接播放。", - "HeaderContinueListening": "繼續聆聽", + "HeaderContinueListening": "繼續收聽", "HeaderContinueWatching": "繼續觀看", "HeaderDateIssued": "發布日期", "HeaderDefaultRecordingSettings": "預設錄製設定", "HeaderDeleteDevice": "刪除裝置", "HeaderDeleteItems": "刪除項目", - "HeaderDeleteProvider": "刪除供應者", + "HeaderDeleteProvider": "刪除提供者", "HeaderDeleteTaskTrigger": "刪除工作觸發條件", - "HeaderDetectMyDevices": "偵測我的設備", + "HeaderDetectMyDevices": "偵測我的裝置", "HeaderDeveloperInfo": "開發者資訊", - "HeaderDeviceAccess": "允許裝置存取", + "HeaderDeviceAccess": "裝置存取", "HeaderDevices": "裝置", "HeaderDirectPlayProfile": "直接播放設定檔", "HeaderDirectPlayProfileHelp": "新增直接播放設定檔,標明哪些媒體格式設備可以自己處理。", "HeaderDownloadSync": "下載與同步", "HeaderEditImages": "編輯圖片", "HeaderEnabledFields": "已啟用的欄位", - "HeaderEnabledFieldsHelp": "反選欄位以鎖定並不讓其數據被更改。", + "HeaderEnabledFieldsHelp": "取消選取欄位以鎖定並不讓其內容被更改。", "HeaderError": "錯誤", "HeaderExternalIds": "外部 ID", "HeaderFetcherSettings": "擷取器設定", - "HeaderForKids": "給兒童", + "HeaderForKids": "面向兒童", "HeaderHttpHeaders": "HTTP 標頭", "HeaderIdentification": "身份識別", "HeaderIdentificationCriteriaHelp": "至少輸入一個識別標準。", @@ -456,8 +456,8 @@ "HeaderImageOptions": "圖片選項", "HeaderInstall": "安裝", "HeaderKeepRecording": "繼續錄製", - "HeaderKeepSeries": "保存系列", - "HeaderKodiMetadataHelp": "要啟用或停用 NFO 媒體資訊,請在設定裡「建立媒體庫」頁面中編輯「媒體資訊儲存」部分。", + "HeaderKeepSeries": "保留系列", + "HeaderKodiMetadataHelp": "要啟用或停用 NFO 媒體資訊,請在設定中的「媒體庫」頁面中編輯「媒體資訊儲存」設定。", "HeaderLatestMedia": "最新媒體", "HeaderLatestMusic": "最新音樂", "HeaderLibraries": "媒體庫", @@ -465,7 +465,7 @@ "HeaderLibraryFolders": "媒體庫資料夾", "HeaderLibraryOrder": "媒體庫排序", "HeaderLibrarySettings": "媒體庫設定", - "HeaderLiveTvTunerSetup": "電視直播調諧器安裝", + "HeaderLiveTvTunerSetup": "電視直播解碼器設定", "HeaderLoginFailure": "登入失敗", "HeaderMedia": "媒體", "HeaderMetadataSettings": "媒體資訊設定", @@ -482,25 +482,25 @@ "HeaderOnNow": "現正播放", "HeaderOtherItems": "其他項目", "HeaderPassword": "密碼", - "HeaderPasswordReset": "重設密碼", + "HeaderPasswordReset": "重置密碼", "HeaderPhotoAlbums": "相簿", "HeaderPinCodeReset": "重設簡易 PIN 碼", "HeaderPlayOn": "播放在", "HeaderPlayback": "媒體播放", "HeaderPlaybackError": "播放錯誤", - "HeaderPluginInstallation": "附加元件安裝", + "HeaderPluginInstallation": "安裝擴充功能", "HeaderRecordingOptions": "錄影選項", "HeaderRecordingPostProcessing": "錄影後製", "HeaderRemoteControl": "遙控", "HeaderRemoveMediaFolder": "刪除媒體資料夾", - "HeaderRemoveMediaLocation": "刪除媒體位址", - "HeaderRevisionHistory": "更改紀錄", + "HeaderRemoveMediaLocation": "刪除媒體位置", + "HeaderRevisionHistory": "修改紀錄", "HeaderRunningTasks": "正在進行的工作", "HeaderSeasons": "季數", "HeaderSecondsValue": "{0} 秒", - "HeaderSelectPath": "選擇位址", - "HeaderSelectTranscodingPath": "選擇轉檔暫放位址", - "HeaderSelectTranscodingPathHelp": "瀏覽或輸入轉檔用來存暫時資料的位址。資料夾需具寫入權限。", + "HeaderSelectPath": "選擇路徑", + "HeaderSelectTranscodingPath": "選擇轉檔暫存位址", + "HeaderSelectTranscodingPathHelp": "瀏覽或輸入轉檔時使用的暫存資料夾。資料夾需具寫入權限。", "HeaderSendMessage": "傳送訊息", "HeaderSeriesOptions": "系列選項", "HeaderSeriesStatus": "系列狀態", @@ -513,9 +513,9 @@ "HeaderStopRecording": "停止錄影", "HeaderSubtitleAppearance": "字幕外觀", "HeaderSubtitleDownloads": "字幕下載", - "HeaderThisUserIsCurrentlyDisabled": "這個使用者目前停用", - "HeaderTracks": "軌", - "HeaderTunerDevices": "調諧器裝置", + "HeaderThisUserIsCurrentlyDisabled": "這個使用者目前已被停用", + "HeaderTracks": "軌道", + "HeaderTunerDevices": "電視解碼器裝置", "Movies": "電影", "Photos": "相片", "Playlists": "播放清單", @@ -524,12 +524,12 @@ "Sync": "同步", "ValueSpecialEpisodeName": "特輯 - {0}", "AuthProviderHelp": "選擇用於驗證使用者密碼的身份驗證提供者。", - "HeaderParentalRatings": "家長評級", + "HeaderParentalRatings": "年齡分級", "HeaderProfileInformation": "設定檔訊息", "HeaderProfileServerSettingsHelp": "這些數值將控制伺服器如何呈現給設備。", "HeaderResponseProfile": "回覆設定檔", "HeaderResponseProfileHelp": "當播放某些類型的媒體時,回覆設定檔提供一種方法來發送自定訊息到設備。", - "HeaderSelectCertificatePath": "選擇證書路徑", + "HeaderSelectCertificatePath": "選擇憑證路徑", "HeaderSelectMetadataPath": "選擇媒體資訊資料夾", "HeaderSubtitleProfile": "字幕設定檔", "HeaderSubtitleProfiles": "字幕設定檔", @@ -537,8 +537,8 @@ "HeaderTaskTriggers": "工作觸發條件", "HeaderTranscodingProfile": "轉檔設定", "HeaderTranscodingProfileHelp": "新增轉檔設定檔標明哪些媒體格式需要轉檔處理。", - "HeaderTuners": "調諧器", - "HeaderTypeImageFetchers": "圖片獲取程序 ({0})", + "HeaderTuners": "電視解碼器", + "HeaderTypeImageFetchers": "圖片擷取器({0})", "HeaderTypeText": "輸入文字", "HeaderUpcomingOnTV": "即將播放", "HeaderUploadImage": "上傳圖片", @@ -555,17 +555,17 @@ "HideWatchedContentFromLatestMedia": "從最新媒體中隱藏已觀看的內容", "Home": "首頁", "Horizontal": "橫向", - "HttpsRequiresCert": "要啟用安全連線,您需要提供受信任的SSL證書,如 Let's Encrypt。 請提供證書,或停用安全連線。", + "HttpsRequiresCert": "若要啟用安全連線,您需要提供由受信任的單位發放的SSL憑證,如 Let's Encrypt。 請提供憑證,或停用安全連線。", "Identify": "識別", "Images": "圖片", - "ImportFavoriteChannelsHelp": "若啟用,僅於解碼器中被標記為最愛的頻道才會被匯入。", + "ImportFavoriteChannelsHelp": "若啟用,僅於電視解碼器中被標記為最愛的頻道才會被匯入。", "InstallingPackage": "正在安裝 {0}(版本 {1})", "InstantMix": "即時混音", "Items": "項目", "Kids": "兒童", "Label3DFormat": "3D 格式", "LabelAbortedByServerShutdown": "(因為伺服器關閉被中止)", - "LabelAccessDay": "一週中的某一天", + "LabelAccessDay": "星期", "LabelAccessEnd": "結束時間", "LabelAccessStart": "開始時間", "LabelAirDays": "播出日期", @@ -578,56 +578,56 @@ "LabelAlbumArtMaxHeight": "專輯封面最大高度", "LabelAlbumArtMaxWidth": "專輯封面最大寬度", "LabelAlbumArtPN": "專輯封面 PN", - "LabelAlbumArtists": "專輯作家", + "LabelAlbumArtists": "專輯藝人", "LabelAllowHWTranscoding": "允許硬體轉檔", "LabelAllowedRemoteAddresses": "遠端 IP 位址過濾", "LabelAllowedRemoteAddressesMode": "遠端 IP 位址過濾模式", "LabelAppName": "APP 名稱", "LabelAppNameExample": "例如:可愛蹦蹦主機、小安的 Jellyfin", "LabelArtists": "藝人", - "LabelArtistsHelp": "將多位演出者以「;」分隔。", + "LabelArtistsHelp": "將多位演出者以分號(;)分隔。", "LabelAuthProvider": "身份驗證提供者", - "LabelAutomaticallyRefreshInternetMetadataEvery": "從網路自動更新媒體資訊", + "LabelAutomaticallyRefreshInternetMetadataEvery": "自動從網路更新媒體資訊", "LabelBindToLocalNetworkAddress": "綁定本地網路地址", - "LabelBindToLocalNetworkAddressHelp": "(選用)覆蓋 HTTP 伺服器綁定的本地 IP 位址。留空則將監聽所有可用的位址。更改此欄位需重啟伺服器。", + "LabelBindToLocalNetworkAddressHelp": "覆蓋 HTTP 伺服器綁定的本地 IP 位址。留空則將監聽所有可用的位址。更改此欄位需重啟伺服器。", "LabelBirthDate": "出生日期", "LabelBirthYear": "出生年", "LabelBlastMessageInterval": "活動信號的時間間隔", "LabelBlastMessageIntervalHelp": "確定伺服器活動消息之間的持續時間(秒)。", - "LabelBlockContentWithTags": "阻止帶有標籤的項目", + "LabelBlockContentWithTags": "阻擋帶有標籤的項目", "LabelBurnSubtitles": "燒錄字幕", "LabelCache": "快取", - "LabelCachePathHelp": "選擇指定所需的快取檔案(像是圖片)路徑。保留空白以使用預設設定。", + "LabelCachePathHelp": "選擇快取檔案(如圖片)的路徑。保留空白以使用預設設定。", "LabelCancelled": "已取消", - "LabelCertificatePassword": "證書密碼", - "LabelCertificatePasswordHelp": "如果你的證書需要密碼,請在此輸入它。", + "LabelCertificatePassword": "憑證密碼", + "LabelCertificatePasswordHelp": "如果你的憑證需要密碼,請在此輸入它。", "LabelChannels": "頻道", - "LabelCommunityRating": "討論區評分", + "LabelCommunityRating": "社群評分", "LabelCriticRating": "影評評分", - "LabelCustomCertificatePath": "自訂 SSL 證書路徑", - "LabelCustomCertificatePathHelp": "提供包含證書和金鑰的 PKCS #12 文件的路徑以在自訂域名上啟用 TLS。", + "LabelCustomCertificatePath": "自訂 SSL 憑證路徑", + "LabelCustomCertificatePathHelp": "提供包含憑證和金鑰的 PKCS #12 文件的路徑以在自訂域名上啟用 TLS。", "LabelCustomCss": "自訂 CSS", "LabelCustomCssHelp": "於網頁介面套用您自訂的標籤或品牌樣式。", "Depressed": "凹陷", "HeaderSelectMetadataPathHelp": "瀏覽或者輸入儲存媒體資訊的資料夾,請確保資料夾可以寫入。", "HeaderSelectServerCachePathHelp": "瀏覽或者輸入路徑以用於伺服器快取檔案。請確保此資料夾可以被寫入。", - "LabelCustomDeviceDisplayNameHelp": "指定自訂的顯示名稱,或者留空以使用設備自己報告的名稱。", - "LabelCustomRating": "自定義評級", + "LabelCustomDeviceDisplayNameHelp": "指定自訂的顯示名稱,或者留空以使用裝置回報的名稱。", + "LabelCustomRating": "自定義分級", "LabelDashboardTheme": "控制台佈景主題", "LabelDateAdded": "新增日期", - "LabelDateAddedBehavior": "新增內容的添加日期行", + "LabelDateAddedBehavior": "新增內容的添加日期行為", "LabelDateTimeLocale": "設定時區", - "LabelDeathDate": "死亡時間", + "LabelDeathDate": "死亡日期", "LabelDefaultScreen": "預設分頁", "LabelDefaultUser": "預設使用者", "LabelDeviceDescription": "裝置說明", "LabelDidlMode": "DIDL 模式", "LabelDiscNumber": "光碟編號", "LabelDisplayLanguage": "顯示語言", - "LabelDisplayLanguageHelp": "翻譯 Jellyfin 是個進行中的專案。", + "LabelDisplayLanguageHelp": "翻譯 Jellyfin 是個持續的工作。", "LabelDisplayMode": "顯示模式", "LabelDisplayName": "顯示名稱", - "MessageNoPluginsInstalled": "您尚未安裝任何附加元件。", + "MessageNoPluginsInstalled": "您尚未安裝任何擴充功能。", "Mobile": "手機", "Option3D": "3D", "OptionEveryday": "每天", @@ -635,14 +635,14 @@ "LabelAudioBitDepth": "音訊位元深度", "LabelBaseUrl": "根路徑", "LabelIconMaxHeight": "圖示最高高度", - "LabelHttpsPortHelp": "HTTPS 伺服器的 TCP 埠。", + "LabelHttpsPortHelp": "HTTPS 伺服器的 TCP 通訊埠。", "CopyStreamURL": "複製串流網址", "MediaInfoDefault": "預設", "LabelDateAddedBehaviorHelp": "若原本存在媒體資訊,將會優先使用現存資訊。", "LabelScreensaver": "螢幕保護程式", "LabelSeasonNumber": "季", - "LabelDropImageHere": "拖移圖片到這裡,或是點擊來選取。", - "LabelImageType": "圖片格式", + "LabelDropImageHere": "拖放圖片到這裡,或是點擊來選取。", + "LabelImageType": "圖片類別", "LabelIdentificationFieldHelp": "不區分大小寫的子字串或正則表達式。", "Large": "大", "LabelTranscodePath": "轉檔路徑", @@ -670,7 +670,7 @@ "ValueAudioCodec": "音訊編碼:{0}", "ValueCodec": "編碼:{0}", "ValueSongCount": "{0} 首歌", - "LabelFileOrUrl": "檔案或路徑", + "LabelFileOrUrl": "檔案或網址", "LabelKodiMetadataSaveImagePaths": "在 NFO 檔案中儲存圖片路徑", "LabelLanNetworks": "區域網路", "LabelMetadataPathHelp": "儲存下載的圖片與媒體資訊的資料夾。", @@ -690,7 +690,7 @@ "LabelAudioBitrate": "音訊位元率", "LabelAudioCodec": "音訊編碼", "LabelBitrate": "位元率", - "LabelAudioChannels": "音訊聲道", + "LabelAudioChannels": "音訊聲道數", "LabelAudioSampleRate": "音訊取樣率", "LabelFont": "字體", "LabelFolder": "資料夾", @@ -698,11 +698,11 @@ "LabelEnableBlastAliveMessages": "活動訊息", "LabelEnableDlnaServer": "啟用 DLNA 伺服器", "LabelEnableDlnaServerHelp": "允許網路上的 UPnP 設備瀏覽和播放內容。", - "LabelEnableHardwareDecodingFor": "啟用硬體解碼", + "LabelEnableHardwareDecodingFor": "啟用硬體解碼的項目:", "LabelEpisodeNumber": "集數", - "LabelBaseUrlHelp": "您可以在此處自訂伺服器 URL 路徑的子目錄,如:http://example.com/<baseurl>", + "LabelBaseUrlHelp": "您可以在此處自訂伺服器網址的子目錄,如:http://example.com/<baseurl>", "LabelExtractChaptersDuringLibraryScan": "於媒體庫掃描時擷取章節圖片", - "LabelHttpsPort": "本地 HTTPS 埠", + "LabelHttpsPort": "本地 HTTPS 通訊埠", "LabelFailed": "失敗", "LabelSupportedMediaTypes": "支援的媒體類型", "LabelTextBackgroundColor": "文字背景顏色", @@ -764,12 +764,12 @@ "RecentlyWatched": "最近觀賞", "RecommendationBecauseYouLike": "因為您喜歡 {0}", "SearchResults": "搜尋結果", - "TabPlugins": "附加元件", + "TabPlugins": "擴充功能", "Transcoding": "轉檔", "ValueTimeLimitMultiHour": "時間限制:{0} 小時", "ValueVideoCodec": "影片編碼:{0}", "ViewAlbum": "查看專輯", - "LabelKodiMetadataDateFormatHelp": "NFO 檔案中的所有日期都將使用此格式。", + "LabelKodiMetadataDateFormatHelp": "NFO 檔案中的所有日期都將以此格式讀取。", "LabelServerHostHelp": "192.168.1.100:8096 或是 https://myserver.com", "LabelServerName": "伺服器名稱", "LabelTag": "標籤", @@ -787,19 +787,19 @@ "TV": "電視", "Trailers": "預告", "LabelImageFetchersHelp": "啟用並按優先順序排序您的首選圖片擷取器。", - "LabelDownMixAudioScale": "縮混時音訊增強", - "LabelDownMixAudioScaleHelp": "縮混時增強音訊。其中一個音軌將保持原始音量。", + "LabelDownMixAudioScale": "向下混時的音訊增強", + "LabelDownMixAudioScaleHelp": "向下混音時增強音訊。設定為 1 將保持原始音量。", "LabelDownloadLanguages": "下載語言", "LabelDynamicExternalId": "{0} Id", "LabelEasyPinCode": "簡易 PIN 碼", "LabelEnableAutomaticPortMap": "啟用自動通訊埠轉發", "LabelEnableSingleImageInDidlLimit": "限制單個嵌入式圖片", "LabelEndDate": "結束日期", - "LabelLockItemToPreventChanges": "鎖定此項目來避免被更改", + "LabelLockItemToPreventChanges": "鎖定此項目以避免被更改", "LabelManufacturer": "製造商", "LabelLoginDisclaimerHelp": "顯示在登入頁面底部的訊息。", "LabelManufacturerUrl": "製造商網址", - "LabelMaxChromecastBitrate": "Google Cast 串流解析度", + "LabelMaxChromecastBitrate": "Google Cast 串流畫質", "LabelOriginalTitle": "原始標題", "LabelSelectUsers": "選擇使用者", "LabelSelectVersionToInstall": "選擇要安裝的版本", @@ -810,7 +810,7 @@ "MediaInfoTimestamp": "時間戳", "Menu": "選單", "MetadataManager": "媒體資訊管理器", - "MessageNoPluginConfiguration": "這個附加元件沒有選項可供更改。", + "MessageNoPluginConfiguration": "這個擴充功能不需要設定。", "NoSubtitlesHelp": "字幕不會自動讀取,但可於播放時手動選取。", "Normal": "正常", "OptionAllowContentDownloading": "允許下載及同步媒體", @@ -821,15 +821,15 @@ "LabelForgotPasswordUsernameHelp": "假如您還記得的話,請輸入您的使用者名稱。", "LabelFormat": "格式", "LabelFriendlyName": "好聽的名字", - "LabelGroupMoviesIntoCollections": "將電影分組", + "LabelGroupMoviesIntoCollections": "將電影分成系列", "LabelKodiMetadataDateFormat": "發行日期格式", "LabelIconMaxWidth": "Icon 最寬寬度", - "LabelGroupMoviesIntoCollectionsHelp": "選擇檢視電影清單時,集合中的電影將作為一個分組項目顯示。", - "LabelEncoderPreset": "預設編碼", + "LabelGroupMoviesIntoCollectionsHelp": "選擇檢視電影清單時,系列中的電影將作為一個項目顯示。", + "LabelEncoderPreset": "編碼預設", "LabelHardwareAccelerationType": "硬體加速", "LabelImportOnlyFavoriteChannels": "僅限收藏的頻道", "LabelInNetworkSignInWithEasyPassword": "啟用 簡易 PIN code 進行區域網路登入", - "LabelH264Crf": "H.264 編碼 CRF", + "LabelH264Crf": "H.264 編碼 CRF 設定", "LabelMaxStreamingBitrate": "最大串流畫質", "LabelMaxStreamingBitrateHelp": "指定最大串流位元率。", "LabelMessageText": "訊息文字", @@ -895,7 +895,7 @@ "OptionEnableM2tsMode": "啟用 M2TS 模式", "LabelKeepUpTo": "保持", "LabelKidsCategories": "兒童分類", - "LabelKodiMetadataEnablePathSubstitution": "啟用路徑取代", + "LabelKodiMetadataEnablePathSubstitution": "啟用路徑代換", "LabelKodiMetadataEnableExtraThumbs": "複製 extrafanart 到 extrathumbs 欄位", "LabelMovieCategories": "電影分類", "LabelMoviePrefix": "電影前綴", @@ -918,7 +918,7 @@ "ValueSeriesCount": "{0} 劇集", "LabelHardwareAccelerationTypeHelp": "硬體加速需要額外的設定。", "LabelHomeNetworkQuality": "區域網路畫質", - "LabelHomeScreenSectionValue": "主畫面模組 {0}", + "LabelHomeScreenSectionValue": "主畫面區段 {0}", "LabelMetadataDownloadersHelp": "啟用和排序媒體資訊來源的優先度,優先度較低的資訊來源只會用來填補缺少的資訊。", "LabelMetadataReaders": "媒體資訊讀取器", "LabelMetadataSaversHelp": "選取儲存媒體資訊的檔案格式。", @@ -927,7 +927,7 @@ "LabelValue": "數值", "OptionEnableAccessToAllChannels": "允許存取所有頻道", "OptionEnableAccessToAllLibraries": "允許存取所有媒體庫", - "OptionEnableForAllTuners": "開啟所有調諧器", + "OptionEnableForAllTuners": "為所有電視解碼器啟用", "OptionExtractChapterImage": "開啟章節圖片擷取", "OptionEnableM2tsModeHelp": "當編碼為 MPEG-TS 時啟用 M2TS 模式。", "OptionEquals": "等於", @@ -955,8 +955,8 @@ "LabelEnableBlastAliveMessagesHelp": "若此伺服器無法被其他 UPnP 裝置偵測到,請啟用此選項。", "LabelEnableDlnaClientDiscoveryIntervalHelp": "決定兩次 SSDP 搜尋之間的持續時間(以秒為單位)。", "LabelEnableDlnaPlayToHelp": "偵測您網路裡的設備並遠端控制它們。", - "LabelExtractChaptersDuringLibraryScanHelp": "當媒體庫匯入影片並掃描時,將擷取章節圖片。否則,章節圖片將在之後的排程工作中擷取,而媒體庫會更快完成掃描。", - "LabelMoviePrefixHelp": "若前綴套用到電影標題,請在此處輸入它來方便伺服器能夠正確處理。", + "LabelExtractChaptersDuringLibraryScanHelp": "掃描媒體庫並匯入影片時,同時擷取章節圖片。否則,章節圖片將在之後的排程工作中擷取,而媒體庫會更快完成掃描。", + "LabelMoviePrefixHelp": "若前綴套用到電影標題,請在此處輸入它,讓伺服器能夠正確處理。", "LabelMovieRecordingPath": "電影錄製路徑", "LabelNotificationEnabled": "啟用這個通知", "LabelProfileContainersHelp": "以逗號分隔,留空則適用於所有影片容器。", @@ -975,8 +975,8 @@ "LabelSubtitleFormatHelp": "如:SRT", "LabelSubtitlePlaybackMode": "字幕載入", "LabelTranscodingThreadCount": "轉檔執行緒數", - "LabelTunerIpAddress": "調諧器 IP 位址", - "LabelTunerType": "調諧器類型", + "LabelTunerIpAddress": "電視解碼器 IP 位址", + "LabelTunerType": "電視解碼器類型", "LabelUseNotificationServices": "使用以下服務", "LabelUserAgent": "使用者代理", "LabelUserLibrary": "使用者程式庫", @@ -1014,19 +1014,19 @@ "MessageFileReadError": "讀取檔案時發生錯誤。", "MessageForgotPasswordInNetworkRequired": "請檢查您的區域網路後再開始密碼重設流程。", "MessageForgotPasswordFileCreated": "已在伺服器上建立了以下檔案,並包含有關後續步驟說明", - "MessageNoAvailablePlugins": "沒有可用的附加元件。", + "MessageNoAvailablePlugins": "沒有可用的擴充功能。", "MessageNoServersAvailable": "無法自動偵測伺服器。", "MessageLeaveEmptyToInherit": "留空以使用上級設定或全域預設值。", - "MessageNoCollectionsAvailable": "分組能夠讓您享受個性化的影片、劇集和專輯。點擊\"+\"按鈕開始建立分組。", + "MessageNoCollectionsAvailable": "系列能夠讓您享受個性化的影片、劇集和專輯。點擊\"+\"按鈕開始建立分組。", "MessagePlayAccessRestricted": "此內容的播放受到限制,聯繫您的伺服器管理員以獲取更多訊息。", - "MessagePluginConfigurationRequiresLocalAccess": "請直接登入你的本地伺服器以設定這個附加元件。", - "MessagePluginInstallDisclaimer": "警告:安裝第三方外掛程式有一定風險。第三方外掛程式可能包含不穩定或惡意的程式,並且有可能在任何時候改變。請只安裝你信任的作者的插件,並知悉潛在的影響,包含對外部服務的查詢,更長的媒體庫塞考時間,和額外的背景處理等。", + "MessagePluginConfigurationRequiresLocalAccess": "請直接登入你的本地伺服器以設定這個擴充功能。", + "MessagePluginInstallDisclaimer": "警告:安裝第三方擴充功能有一定風險。第三方擴充功能可能包含不穩定或惡意的程式,並且有可能在任何時候改變。請只安裝你信任的作者的擴充功能,並知悉潛在的影響,包含對外部服務的存取,更長的媒體庫掃描時間,和額外的背景處理等。", "MessageReenableUser": "請參閱以下以重新啟用", "MessageUnableToConnectToServer": "無法連上所選的伺服器,請確保伺服器正在運作中。", "MessageYouHaveVersionInstalled": "你目前安裝了 {0} 版本。", "MoreFromValue": "更多來自 {0}", "News": "新聞", - "NoNewDevicesFound": "找不到裝置,要添加新調諧器,請關閉此對話框並手動輸入裝置訊息。", + "NoNewDevicesFound": "找不到裝置,要添加新電視解碼器,請關閉此對話框並手動輸入裝置訊息。", "OnlyForcedSubtitles": "僅顯示強制字幕", "OnlyImageFormats": "圖片格式(VobSub、PGS、SUB)", "OptionAllowLinkSharingHelp": "只有網頁包含的媒體訊息會被共享,媒體檔案本身不會被公開共享,共享的內容會在 {0} 天后到期。", @@ -1058,7 +1058,7 @@ "PackageInstallCancelled": "{0} (版本 {1})安裝被取消。", "PlayAllFromHere": "從這裡開始全部播放", "PleaseAddAtLeastOneFolder": "請點擊\" + \"按鈕,並在資料夾區域中新增至少一個資料夾到這個媒體庫。", - "PleaseConfirmPluginInstallation": "點擊「OK」以確認您已經閱讀了上述內容並希望繼續安裝附加元件。", + "PleaseConfirmPluginInstallation": "我已詳閱上述內容並確認繼續安裝擴充功能。", "PleaseEnterNameOrId": "請輸入一個名稱或一個外部 ID。", "PleaseRestartServerName": "請重啟 Jellyfin 於 {0}。", "PleaseSelectTwoItems": "請至少選擇 2 個項目。", @@ -1076,7 +1076,7 @@ "Raised": "浮凹", "Rate": "評等", "Recordings": "錄影", - "ServerRestartNeededAfterPluginInstall": "安裝外掛程式後,Jellyfin 伺服器需要重新啟動使其生效。", + "ServerRestartNeededAfterPluginInstall": "安裝擴充功能後,需要重新啟動 Jellyfin 使其生效。", "ShowIndicatorsFor": "顯示指標", "Sort": "排序", "Studios": "工作室", @@ -1088,43 +1088,43 @@ "Unplayed": "尚未播放", "TvLibraryHelp": "查看 {0} 電視節目命名指南 {1} 。", "LabelMonitorUsers": "監控活動", - "LabelPleaseRestart": "改動將在手動重啟用戶端後生效。", + "LabelPleaseRestart": "更動將在手動重啟用戶端後生效。", "LabelProfileCodecsHelp": "以逗號分隔。留空則適用於所有編解碼器。", "OptionPlainStorageFoldersHelp": "所有資料夾在 DIDL 中顯示為「object.container.storageFolder 」,而不是一個更具體的類型,如「object.container.person.musicArtist」。", "LabelInNetworkSignInWithEasyPasswordHelp": "你可以在你的區域網路中使用你的簡易 PIN code 登錄 Jellyfin 應用程式,僅在你使用外部網路時才需要輸入密碼,如果 PIN code 留空,那麼在你的區域網路中便不需輸入密碼。", - "LabelReleaseDate": "釋出日期", - "LabelRemoteClientBitrateLimit": "網際網路串流傳輸位元率限制(Mbps)", + "LabelReleaseDate": "發行日期", + "LabelRemoteClientBitrateLimit": "網際網路串流位元率限制(Mbps)", "LanNetworksHelp": "在執行頻寬限制時,視同區域網路上的 IP 位址或 IP/子網域遮罩項目的逗號分隔清單。若設定此項,所有其它 IP 位址將被視作在外部網路上,並且將受到外部頻寬限制。如果保留為空,則只將伺服器的子網域遮罩作本地網路。", "OptionIgnoreTranscodeByteRangeRequests": "忽略轉檔位元組範圍請求", "OptionIgnoreTranscodeByteRangeRequestsHelp": "這些請求會被接受,但會忽略的位元組範圍標頭。", "OptionLoginAttemptsBeforeLockoutHelp": "若值為 0,則表示將允許普通使用者嘗試三次、管理員嘗試五次的預設值,設定為 -1 來停用此功能。", "OptionRequirePerfectSubtitleMatchHelp": "僅下載經過測試並確認跟此影片檔案完美匹配的字幕。取消勾選這個項目可以增加找到並下載字幕的可能性,但可能會下載時間軸、翻譯不正確的字幕。", - "MessagePluginInstalled": "附加元件安裝成功,但需要重新啟動 Jellyfin 伺服器以使附加元件生效。", + "MessagePluginInstalled": "擴充功能安裝成功,但需要重新啟動 Jellyfin 伺服器以啟用擴充功能。", "MessageChangeRecordingPath": "更改錄製資料夾不會將現有錄製從舊位置遷移到新的,您需要手動移動它們。", "LabelEmbedAlbumArtDidl": "於 DIDL 中嵌入專輯封面", - "LabelEnableAutomaticPortMapHelp": "透過 UPnP 自動將路由器上的公共埠轉發到伺服器上的本地埠。這可能不適用於某些路由器型號或網路設定。在伺服器重新啟動後才會進行更改。", + "LabelEnableAutomaticPortMapHelp": "透過 UPnP 自動將路由器上的公開埠轉發到伺服器上的本地通訊埠。這可能不適用於某些路由器型號或網路設定。在伺服器重新啟動後才會生效。", "LabelEmbedAlbumArtDidlHelp": "有些裝置使用這個方式來取得專輯封面,啟用這個選項可能導致其他設備播放失敗。", "SettingsWarning": "更改這些值可能會導致不穩定或連線故障。如果您遇到任何問題,建議將它們重新更改為預設值。", "LabelEnableSingleImageInDidlLimitHelp": "若在 DIDL 中嵌入多個圖片,某些裝置可能無法正常顯示。", "SortByValue": "排序方式:{0}", "LabelLineup": "排隊", - "LabelLocalHttpServerPortNumber": "本地 HTTP 埠", - "LabelLocalHttpServerPortNumberHelp": "HTTP 伺服器的 TCP 埠。", + "LabelLocalHttpServerPortNumber": "本地 HTTP 通訊埠", + "LabelLocalHttpServerPortNumberHelp": "HTTP 伺服器的 TCP 通訊埠。", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "此設定也會影響透過此裝置投放的 Google Cast。", - "LabelLoginDisclaimer": "登入免責聲明", + "LabelLoginDisclaimer": "登入聲明", "LabelLogs": "日誌", "SubtitleDownloadersHelp": "按優先順序啟用並排列您的首選字幕下載程式。", "LabelMatchType": "匹配的類型", "SystemDlnaProfilesHelp": "系統設定檔案是唯讀的,更改系統設定檔案將被儲存到自訂的新設定檔案。", "LabelNumber": "編號", - "LabelNumberOfGuideDays": "下載電視指南日數", + "LabelNumberOfGuideDays": "下載電視指南天數", "OnlyForcedSubtitlesHelp": "僅標記為「強制」的字幕會被載入。", "PackageInstallCompleted": "{0} (版本 {1}) 安裝完成。", "OptionDisplayFolderViewHelp": "在其他媒體庫旁邊顯示資料夾,對想要一個普通的資料夾檢視很有用。", "LabelReasonForTranscoding": "轉檔原因", "LabelRecord": "錄影", "LabelRecordingPath": "預設錄影路徑", - "LabelRecordingPathHelp": "指定用於存儲轉檔的位置,留空將使用伺服器的程式根目錄。", + "LabelRecordingPathHelp": "指定用於儲存錄影的位置,留空將使用伺服器的程式資料路徑。", "LabelRemoteClientBitrateLimitHelp": "可選用的遠端位元率限制,將限制每個到遠端裝置的串流位元率。這個選項可以避免裝置請求超過你的網速的位元率。這個選項可能導致更高的負載,以將影片轉當至較低的位元率。", "SmartSubtitlesHelp": "當音訊為外語時,將載入與語言偏好匹配的字幕。", "SubtitleAppearanceSettingsDisclaimer": "這些設定不會套用在圖形字幕(如 PGS、DVD 等),或者一些有著自己的內建樣式的字幕(如 ASS/SSA)。", @@ -1153,54 +1153,54 @@ "OptionDateAddedFileTime": "使用檔案建立日期", "OptionReportByteRangeSeekingWhenTranscodingHelp": "這對一些時間跳轉緩慢的裝置是必要的。", "XmlTvNewsCategoriesHelp": "有這些類別的節目會被當作新聞節目,以「|」來分隔多個項目。", - "LabelKodiMetadataEnableExtraThumbsHelp": "為了相容 Kodi 主題,下載的圖片將被同時儲存在 extrafanart 和 extrathumbs 資料夾中。", + "LabelKodiMetadataEnableExtraThumbsHelp": "為了更好的 Kodi 主題相容性,下載的圖片將被同時儲存在 extrafanart 和 extrathumbs 資料夾中。", "LabelInternetQuality": "網路畫質", - "LabelKodiMetadataEnablePathSubstitutionHelp": "允許將圖片的路徑以伺服器路徑取代。", - "LabelKodiMetadataSaveImagePathsHelp": "若如果您的圖片檔案名稱不符合 Kodi 規範,建議啟用。", - "LabelKodiMetadataUser": "儲存這些使用者的觀看資料到 NFO 檔案中", - "LabelKodiMetadataUserHelp": "儲存觀看資料到 NFO 檔案中以便其他應用程式使用。", - "LabelMetadataReadersHelp": "排序媒體資訊來源的優先度,將會讀取第一個找到的檔案。", + "LabelKodiMetadataEnablePathSubstitutionHelp": "允許依伺服器設定代換圖片路徑。", + "LabelKodiMetadataSaveImagePathsHelp": "若如果您的圖片檔案名稱不符合 Kodi 規範,建議啟用此設定。", + "LabelKodiMetadataUser": "儲存這名使用者的觀看資料到 NFO 檔案中", + "LabelKodiMetadataUserHelp": "儲存觀看資料到 NFO 檔案中以供其他應用程式使用。", + "LabelMetadataReadersHelp": "排序本地媒體資訊來源的優先度,將會讀取第一個找到的檔案。", "LabelMetadataSavers": "媒體資訊儲存方式", "LabelModelDescription": "型號描述", "LabelModelName": "型號名稱", "LabelModelUrl": "型號網址", "LabelMusicStreamingTranscodingBitrate": "音樂轉檔位元率", "LabelMusicStreamingTranscodingBitrateHelp": "指定音樂串流時的最大位元率。", - "LabelOptionalNetworkPathHelp": "如果這個資料夾在網路上分享,提供網路分享路徑可以供其他應用程式直接存取媒體檔案,例如 {0} 或者 {1}。", + "LabelOptionalNetworkPathHelp": "如果這個資料夾在網路上共用,提供網路共用路徑可以供其他應用程式直接存取媒體檔案,例如 {0} 或者 {1}。", "LabelOriginalAspectRatio": "原始長寬比", "LabelOverview": "內容概述", - "LabelParentalRating": "分級", + "LabelParentalRating": "年齡分級", "LabelPasswordConfirm": "確認密碼", - "LabelPasswordResetProvider": "密碼重設提供者", + "LabelPasswordResetProvider": "密碼重置提供者", "LabelPasswordRecoveryPinCode": "PIN 碼", "LabelPath": "路徑", "LabelPersonRole": "角色", "LabelPersonRoleHelp": "例如:冰淇淋車司機", "LabelPlaceOfBirth": "出生地", - "LabelPlayDefaultAudioTrack": "無論如何都播放預設音軌", + "LabelPlayDefaultAudioTrack": "無論語言都播放預設音軌", "LabelPlayer": "播放器", "LabelPlayMethod": "播放方式", "LabelParentNumber": "父編號", "LabelPostProcessor": "後處理應用程式", - "LabelPostProcessorArguments": "處理器後命令行參數", + "LabelPostProcessorArguments": "後處理後命令行參數", "LabelPostProcessorArgumentsHelp": "使用 {path} 作為錄製檔案的路徑。", "LabelPreferredDisplayLanguage": "首選語言", "LabelPreferredSubtitleLanguage": "字幕語言偏好", - "LabelProtocol": "協議", + "LabelProtocol": "協定", "LabelProtocolInfo": "協議資訊", - "LabelPublicHttpPort": "公開 HTTP 埠", - "LabelPublicHttpsPort": "公開 HTTPS 埠", + "LabelPublicHttpPort": "公開 HTTP 通訊埠", + "LabelPublicHttpsPort": "公開 HTTPS 通訊埠", "LabelProtocolInfoHelp": "當響應來自裝置的 GetProtocolInfo(獲取協議訊息)請求時,該值將被使用。", - "LabelPublicHttpPortHelp": "公開通訊埠轉發射到本地 HTTP 通訊埠。", - "LabelPublicHttpsPortHelp": "公開通訊埠應轉發到本地 HTTPS 通訊埠。", - "LabelSelectFolderGroups": "自動將以下資料夾中的內容分組到視圖中,例如電影、音樂和電視", + "LabelPublicHttpPortHelp": "應該轉發到本地 HTTP 通訊埠的公開通訊埠。", + "LabelPublicHttpsPortHelp": "應轉發到本地 HTTPS 通訊埠的公開通訊埠。", + "LabelSelectFolderGroups": "自動將以下資料夾中的內容分類到視圖中,例如電影、音樂和電視", "LabelStatus": "狀態", "LiveBroadcasts": "直播", "MessageImageTypeNotSelected": "在下拉選單中選取圖片類型。", "RemoveFromCollection": "從收藏移除", "RepeatEpisodes": "重複劇集", "SaveSubtitlesIntoMediaFolders": "保存字幕到媒體所在資料夾", - "SaveSubtitlesIntoMediaFoldersHelp": "將字幕存儲在影片檔案旁邊可以讓管理更方便。", + "SaveSubtitlesIntoMediaFoldersHelp": "將字幕儲存在影片檔案旁邊可以讓管理更方便。", "ScanForNewAndUpdatedFiles": "掃描新的和有修改的文件", "Schedule": "排程", "TabNetworking": "網路", @@ -1217,8 +1217,8 @@ "XmlTvKidsCategoriesHelp": "有這些類別的節目會被當作兒童節目,以「|」來分隔多個項目。", "TabResponses": "響應", "LabelDisplaySpecialsWithinSeasons": "顯示劇集季度中的特集", - "LabelNumberOfGuideDaysHelp": "下載多日的節目指南可以幫你進一步查看節目列表並做出提前安排,但下載過程也將耗時更久。它將基於頻道數量自動選擇。", - "LabelOptionalNetworkPath": "分享的網路資料夾", + "LabelNumberOfGuideDaysHelp": "下載多日的節目指南可以幫你進一步查看節目列表並做出提前安排,但下載過程也將耗時更久。自動將基於頻道數量自動選擇。", + "LabelOptionalNetworkPath": "共用的網路資料夾", "OptionResElement": "'res' 元素", "PinCodeResetComplete": "簡易 PIN code 已被重設。", "PinCodeResetConfirmation": "你確定要重設簡易 PIN code 嗎?", @@ -1236,8 +1236,8 @@ "LabelVideoResolution": "影片解析度", "LabelStreamType": "串流類型", "LabelPlayerDimensions": "播放器尺寸", - "LabelDroppedFrames": "丟棄的幀", - "LabelCorruptedFrames": "損壞的幀", + "LabelDroppedFrames": "丟失的影格", + "LabelCorruptedFrames": "損壞的影格", "ButtonSplit": "分割", "AskAdminToCreateLibrary": "如要建立媒體庫,請聯絡管理員。", "NoCreatedLibraries": "看來您還未創任何媒體庫。{0}立刻創一個新的嗎?{1}", @@ -1266,9 +1266,9 @@ "Season": "季", "Person": "人物", "Movie": "電影", - "LabelLibraryPageSizeHelp": "設定媒體庫頁面每頁要顯示的最多媒體個數。設定為 0 來停用分頁。", + "LabelLibraryPageSizeHelp": "設定媒體庫頁面每頁要顯示的項目數量。設定為 0 來停用分頁。", "LabelLibraryPageSize": "媒體庫分頁大小", - "LabelDeinterlaceMethod": "反交錯方法", + "LabelDeinterlaceMethod": "去交錯方法", "Episode": "劇集", "DeinterlaceMethodHelp": "選擇對隔行掃描內容進行軟體轉檔時所用的反交錯方法。當硬體加速支援的硬體反交錯選項啟用時,硬體方式將取代此設定。", "BoxSet": "套裝", @@ -1284,7 +1284,7 @@ "LabelRequireHttps": "強制 HTTPS", "LabelStable": "穩定版", "LabelChromecastVersion": "Google Cast 版本", - "LabelEnableHttpsHelp": "監聽指定的 HTTPS 埠。須設定有效的證書使其生效。", + "LabelEnableHttpsHelp": "監聽指定的 HTTPS 通訊埠。須設定有效的憑證使其生效。", "LabelEnableHttps": "啟用 HTTPS", "HeaderServerAddressSettings": "伺服器位置設定", "HeaderRemoteAccessSettings": "遠端存取設定", @@ -1310,7 +1310,7 @@ "ClearQueue": "清空佇列", "StopPlayback": "停止播放", "ButtonPlayer": "播放器", - "ButtonCast": "投放到設備", + "ButtonCast": "投放到裝置", "Writers": "作者", "ViewAlbumArtist": "檢視專輯演出者", "TabRepositories": "儲存庫", @@ -1328,7 +1328,7 @@ "MessageAddRepository": "欲新增儲存庫,請點擊旁邊的按鈕來填寫相關資訊。", "LabelRepositoryNameHelp": "取一個能讓你辨識的名稱。", "LabelRepositoryName": "儲存庫名稱", - "LabelRepositoryUrl": "儲存庫 URL", + "LabelRepositoryUrl": "儲存庫網址", "HeaderNewRepository": "新增儲存庫", "MessageNoRepositories": "尚無儲存庫。", "LabelSyncPlayAccess": "同步播放存取控制", @@ -1345,8 +1345,8 @@ "HeaderSyncPlaySelectGroup": "加入群組", "HeaderDVR": "DVR", "SubtitleVerticalPositionHelp": "文字出現的行號。正數表示由上到下,負數表示由下到上。", - "MessagePluginInstallError": "安裝附加元件時發生了錯誤。", - "MessageGetInstalledPluginsError": "取得已安裝的附加元件清單時發生了錯誤。", + "MessagePluginInstallError": "安裝擴充功能時發生了錯誤。", + "MessageGetInstalledPluginsError": "取得已安裝的擴充功能清單時發生了錯誤。", "Preview": "預覽", "LabelSubtitleVerticalPosition": "垂直位置", "PreviousTrack": "上一首", @@ -1385,19 +1385,19 @@ "QuickConnectNotActive": "快速連線尚未於此伺服器上啟用", "QuickConnectNotAvailable": "聯繫伺服器管理員以啟用 Quick Connect", "QuickConnectInvalidCode": "Quick Connect 代號無效", - "KnownProxiesHelp": "連線到 Jellyfin 的代理伺服器的 IP 位址或主機名稱之列表,以逗號分隔,以使 X-Forwarded-For 標頭能正常運作。本設定儲存後需要重新啟動。", + "KnownProxiesHelp": "連線到 Jellyfin 的反向代理伺服器的 IP 位址或主機名稱之列表,以逗號分隔,以使 X-Forwarded-For 標頭能正常運作。本設定儲存後需要重新啟動。", "LabelMaxMuxingQueueSize": "最大混合器佇列大小", "VideoAudio": "影片音訊", "Video": "影片", "QuickConnectAuthorizeFail": "未知的 Quick Connect 代號", - "QuickConnectAuthorizeSuccess": "您的設備認證成功!", + "QuickConnectAuthorizeSuccess": "您的裝置認證成功!", "QuickConnectAuthorizeCode": "輸入代號 {0} 來登入", "QuickConnectActivationSuccessful": "成功啟用", "QuickConnect": "快速連接", "PosterCard": "海報卡片", "PlaybackRate": "播放速度", - "LabelQuickConnectCode": "Quick Connect 代號", - "LabelKnownProxies": "已知 Proxy", + "LabelQuickConnectCode": "Quick Connect 驗證碼", + "LabelKnownProxies": "已知代理伺服器", "LabelCurrentStatus": "目前狀態", "EnableAutoCast": "設為預設", "HeaderDeleteDevices": "刪除所有裝置", @@ -1415,11 +1415,11 @@ "LabelTonemappingAlgorithm": "選擇要使用的色調轉換算法", "AllowTonemappingHelp": "色調轉換可以將影片從 HDR 轉換成 SDR,同時保持影像細節與顏色等對於表現場景非常重要的資訊。目前僅支援 HDR10、HLG 和 Dolby Vision 影片。此一選項需要對應的 GPU 運算環境。", "EnableTonemapping": "啟用色調轉換", - "LabelOpenclDeviceHelp": "此 OpenCL 設備將用於色調轉換。點的左側為平台號碼,右側為此平台上的設備號碼。預設值為 0.0。需要有 OpenCL 硬體加速功能的 FFmpeg 應用程式。", - "LabelColorPrimaries": "三原色", + "LabelOpenclDeviceHelp": "此 OpenCL 裝置將用於色調轉換。點的左側為平台號碼,右側為此平台上的裝置號碼。預設值為 0.0。需要有 OpenCL 硬體加速功能的 FFmpeg 應用程式。", + "LabelColorPrimaries": "原色", "MediaInfoColorPrimaries": "三原色", "UseDoubleRateDeinterlacingHelp": "此設定使用去交錯時的刷新頻率,通常稱為 Bob 去交錯。它將影片的幀率加倍,以提供完整的運動效果,就類似在電視上觀看隔行掃描的影片看到的那樣。", - "LabelMaxMuxingQueueSizeHelp": "等待所有流初始化時可緩衝的最大封包數。如果在 FFmpeg 日誌中仍然遇到 \"Too many packets buffered for output stream\" 錯誤,請嘗試增加此設定值。建議值為 2048。", + "LabelMaxMuxingQueueSizeHelp": "等待所有串流初始化時可緩衝的最大封包數。如果在 FFmpeg 日誌中仍然遇到 \"Too many packets buffered for output stream\" 錯誤,請嘗試增加此設定值。建議值為 2048。", "LabelTonemappingParamHelp": "調整色調轉換演算法。建議值和預設值均為 NaN。通常將其留空。", "LabelTonemappingParam": "色調轉換參數", "LabelTonemappingPeakHelp": "用此設定值覆蓋信號/標稱/參考峰值。當顯示資訊中嵌入的峰值資訊不可靠時,或從較低範圍到較高範圍的色調轉換時,此選項很有用。建議值和預設值分別為 100 和 0。", @@ -1432,23 +1432,23 @@ "LabelAutomaticDiscovery": "啟動自動探索", "LabelAutoDiscoveryTracingHelp": "若啟用後,將會記錄自動探索連接埠的封包。", "HeaderUploadSubtitle": "上傳字幕", - "HeaderPortRanges": "Proxy 和防火牆設定", - "HeaderNetworking": "網際網路協定", + "HeaderPortRanges": "防火牆和代理伺服器設定", + "HeaderNetworking": "網路通訊協定", "HeaderDebugging": "偵錯和追蹤", "HeaderAutoDiscovery": "探索網域", "HeaderAddUser": "新增使用者", - "HeaderAddUpdateSubtitle": "新增/更新 字幕", - "LabelEnableIP6Help": "啟用IPv6功能。", - "LabelEnableIP6": "啟用IPv6", - "LabelEnableIP4Help": "啟用IPv4功能。", - "LabelEnableIP4": "啟用IPv4", - "LabelDropSubtitleHere": "將字幕檔丟到這裡,或點擊瀏覽。", + "HeaderAddUpdateSubtitle": "新增/更新字幕", + "LabelEnableIP6Help": "啟用 IPv6 功能。", + "LabelEnableIP6": "啟用 IPv6", + "LabelEnableIP4Help": "啟用 IPv4 功能。", + "LabelEnableIP4": "啟用 IPv4", + "LabelDropSubtitleHere": "拖放字幕檔丟到此處,或點擊瀏覽。", "LabelAllowedAudioChannels": "最大聲道允許數", "AllowHevcEncoding": "允許以 HEVC 格式編碼", - "PreferFmp4HlsContainerHelp": "優先使用 fMP4 作為 HLS 的預設容器,以便在支援的設備上直接串流 HEVC 和 AV1 內容。", + "PreferFmp4HlsContainerHelp": "優先使用 fMP4 作為 HLS 的預設容器,以便在支援的裝置上直接串流 HEVC 和 AV1 內容。", "PreferFmp4HlsContainer": "偏好 fMP4-HLS Media Container", "RemuxHelp2": "Remux使用最低的處理能力,達到完全無損的媒體品質。", - "RemuxHelp1": "不兼容的影片格式(MKV、AVI、WMV等),但影像串流和聲音串流都與設備兼容。在發送到設備之前,影片將被無損地重新打包。", + "RemuxHelp1": "不相容的影片格式(MKV、AVI、WMV等),但視訊和音訊都與裝置相容。在發送到裝置之前,媒體將被無損地重新打包。", "AspectRatioFill": "填滿", "AspectRatioCover": "覆蓋", "EnableFallbackFontHelp": "啟用自定義備用字體。這選項可以避免字幕渲染錯誤發生。", @@ -1468,14 +1468,14 @@ "LabelSyncPlayHaltPlayback": "停止本地播放", "LabelSSDPTracingFilterHelp": "自選 IP 地址,用於過濾記錄的 SSDP 流量。", "LabelSSDPTracingFilter": "SSDP 篩選", - "LabelPublishedServerUriHelp": "根據接口或客戶端 IP 位址,覆蓋 Jellyfin 使用的 URI。", + "LabelPublishedServerUriHelp": "根據介面或用戶端 IP 位址,覆蓋 Jellyfin 使用的 URI。", "LabelPublishedServerUri": "公開伺服器 URI", "LabelMinAudiobookResumeHelp": "將在此時間前停止播放的媒體當作尚未播放。", "LabelMaxAudiobookResumeHelp": "將剩下的部分小於此時長後停止播放的媒體當作已播畢。", "LabelIsForced": "強制", "LabelHDHomerunPortRangeHelp": "將HDHomeRun UDP 端口範圍限制至該值內。(預設值為 1024 - 65535)。", "LabelHDHomerunPortRange": "HDHomeRun 端口範圍", - "LabelH265Crf": "H.265 編碼 CRF", + "LabelH265Crf": "H.265 編碼 CRF 設定", "LabelEnableSSDPTracingHelp": "將 SSDP 追蹤詳細資料記錄至日誌。
警告:這將導致效能嚴重損失。", "LabelEnableSSDPTracing": "啟用 SSDP 追蹤", "LabelAutoDiscoveryTracing": "開啟自動追蹤。", @@ -1489,7 +1489,7 @@ "LabelVideoInfo": "影片資訊", "LabelAudioInfo": "音檔資訊", "LabelPlaybackInfo": "播放資訊", - "Framerate": "幀數", + "Framerate": "幀率", "DisablePlugin": "停用", "EnablePlugin": "啟用", "AudioBitDepthNotSupported": "不支援此音訊的位元深度", @@ -1515,7 +1515,7 @@ "Controls": "控制", "AllowVppTonemappingHelp": "完全基於 Intel 驅動程式的色調轉換。目前只針對部分硬體及 HDR10 影片有效。此一選項比 OpenCL 具有更高的優先級。", "EnableVppTonemapping": "啟用VPP色調轉換", - "EnableEnhancedNvdecDecoder": "啟用加強NVDEC解碼器", + "EnableEnhancedNvdecDecoder": "啟用增強的 NVDEC 解碼器", "MessagePlaybackError": "在您的 Google Cast 接收器上播放此檔案時發生錯誤。", "MessageChromecastConnectionError": "您的 Google Cast 接收器無法連接 Jellyfin 伺服器。請檢查連線後重試。", "YoutubeDenied": "所要求的影片無法被播放於嵌入式播放器中。", @@ -1534,9 +1534,9 @@ "LabelSlowResponseEnabled": "當伺服器應答過慢時記錄警告訊息", "LabelMinAudiobookResume": "繼續播放有聲書的最短時間", "LabelMaxAudiobookResume": "繼續播放有聲書的剩餘時間", - "LabelLocalCustomCss": "自訂CSS樣式僅使用於此客戶端。你可能會想要停用伺服器自訂CSS。", - "LabelDisableCustomCss": "停用由伺服器提供的自訂CSS標籤或品牌。", - "LabelCreateHttpPortMapHelp": "允許自動通訊埠轉發在 HTTPS 以外為 HTTP 流量建立規則。", + "LabelLocalCustomCss": "僅套用在此用戶段的客製化 CSS 樣式。你可能需要停用伺服器自訂 CSS。", + "LabelDisableCustomCss": "停用由伺服器提供的自訂CSS主題或品牌。", + "LabelCreateHttpPortMapHelp": "允許自動通訊埠轉發除了 HTTPS 以外同時為 HTTP 流量建立規則。", "HeaderContinueReading": "繼續閱讀", "DisableCustomCss": "停用伺服器提供的自訂CSS樣式", "DirectPlayHelp": "原始檔完全相容於此用戶端,並正在直接接收原始檔案。", @@ -1563,8 +1563,8 @@ "LabelSyncPlaySettingsExtraTimeOffset": "額外時間偏移", "LabelSyncPlaySettingsDescription": "變更SyncPlay設定", "HeaderSyncPlayTimeSyncSettings": "時間同步", - "HeaderSyncPlayPlaybackSettings": "回放", - "HeaderSyncPlaySettings": "SyncPlay設定", + "HeaderSyncPlayPlaybackSettings": "播放", + "HeaderSyncPlaySettings": "同步播放設定", "LabelSyncPlaySettingsSpeedToSync": "啟用SpeedToSync", "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "SkipToSync嘗試校正播放位置後的最小延遲(毫秒)。", "ErrorPlayerNotFound": "找不到這個媒體所需的播放器。", @@ -1587,8 +1587,8 @@ "Copied": "已複製", "Casual": "休閒", "AddToFavorites": "添加到收藏", - "LabelAutomaticallyAddToCollection": "自動加入合輯", - "GoogleCastUnsupported": "不支援Google Cast", + "LabelAutomaticallyAddToCollection": "自動加入系列", + "GoogleCastUnsupported": "不支援 Google Cast", "EnableRewatchingNextUpHelp": "在「接下來」中顯示已觀看的集數。", "EnableRewatchingNextUp": "在「接下來」顯示重看影片", "Digital": "數位", @@ -1596,11 +1596,11 @@ "ButtonClose": "關閉", "ButtonSpace": "空格", "TypeOptionPluralMusicVideo": "MV", - "LabelMaxDaysForNextUp": "「下一步」中的最大天數", + "LabelMaxDaysForNextUp": "「接下來」中的最大天數", "Print": "列印", "TypeOptionPluralMusicAlbum": "音樂專輯", "TypeOptionPluralMusicArtist": "音樂藝術家", - "PreferSystemNativeHwDecoder": "偏好作業系統原生 DXVA 或 VA-API 硬體解碼器", + "PreferSystemNativeHwDecoder": "偏好作業系統原生的 DXVA 或 VA-API 硬體解碼器", "AllowEmbeddedSubtitlesHelp": "停用封裝在媒體容器中的字幕。 需要對媒體庫進行完整的重新掃描。", "RememberAudioSelections": "根據上一項設定音軌", "RememberAudioSelectionsHelp": "嘗試將音軌設定為與上一個影片最接近的匹配。", @@ -1625,11 +1625,11 @@ "MixedMoviesShows": "混合電影和節目", "Interview": "採訪", "VideoBitrateNotSupported": "不支援影片的碼率", - "LabelMaxDaysForNextUpHelp": "設定一個節目在不觀看的情況下應保留在「下一個」列表中的最大天數。", + "LabelMaxDaysForNextUpHelp": "設定一個節目在未被觀看的情況下應保留在「接下來」列表中的最大天數。", "MessageUnauthorizedUser": "您目前無權訪問伺服器。 請聯繫您的伺服器管理員以獲取更多資訊。", - "ItemDetails": "物品詳情", + "ItemDetails": "詳情", "EnableCardLayout": "顯示可視化 CardBox", - "LabelAutomaticallyAddToCollectionHelp": "當至少有 2 部電影具有相同的收藏名稱時,它們將被自動添加到收藏中。", + "LabelAutomaticallyAddToCollectionHelp": "當至少有 2 部電影具有相同的系列名稱時,它們將被自動添加到系列中。", "LabelTextWeight": "字體粗細", "Bold": "粗體", "Localization": "本土化", @@ -1674,7 +1674,7 @@ "MediaInfoDvVersionMinor": "杜比視界次要版本", "MediaInfoDvProfile": "杜比視界簡介", "IgnoreDts": "忽略 DTS(解碼時間戳)", - "IgnoreDtsHelp": "停用此選項可能會解決一些問題,例如在具有分開的音訊和影片的頻道上丟失音訊。", + "IgnoreDtsHelp": "停用此選項可能會解決一些問題,例如在具有分開的音訊和視訊的頻道上丟失音訊。", "MessageRenameMediaFolder": "重新命名媒體庫將導致所有媒體資料丟失,請謹慎操作。", "OriginalAirDate": "原始播出日期", "Production": "作品", @@ -1684,22 +1684,22 @@ "MediaInfoElPresentFlag": "杜比視界 el 存在標記", "MediaInfoBlPresentFlag": "杜比視界 bl 存在標記", "MediaInfoDvBlSignalCompatibilityId": "杜比視界 bl 訊號相容性 id", - "LabelStereoDownmixAlgorithm": "立體聲混縮算法 (Stereo Downmix Algorithm)", + "LabelStereoDownmixAlgorithm": "立體聲向下混音演算法", "StereoDownmixAlgorithmHelp": "會將多聲道的音訊混縮為雙聲道的演算法。", "DownloadAll": "全部下載", "Experimental": "實驗性", - "HeaderDummyChapter": "章節影像", - "LabelEnableAudioVbr": "啟用 VBR 音訊編碼", + "HeaderDummyChapter": "章節圖片", + "LabelEnableAudioVbr": "啟用可變位元率(VBR)音訊編碼", "LabelParallelImageEncodingLimit": "並行圖片編碼限制", "LabelParallelImageEncodingLimitHelp": "允許同時進行的圖片轉檔最大數量(0為自動)。", "HeaderPerformance": "效能", - "LabelDummyChapterDuration": "頻率", + "LabelDummyChapterDuration": "間隔", "LabelDummyChapterDurationHelp": "虛擬章節之間的間隔,設定為0以停用。修改此設定不會影響現有的虛擬章節。", "LabelDummyChapterCount": "限制", "LabelDummyChapterCountHelp": "每個媒體檔案的最大的章節擷取圖片數量。", "LabelChapterImageResolution": "解析度", "LabelChapterImageResolutionHelp": "章節圖片擷取解析度。修改此設定對於現存的虛擬章節沒有影響。", - "HeaderRecordingMetadataSaving": "錄製中繼資料", + "HeaderRecordingMetadataSaving": "錄影媒體資訊", "SaveRecordingImagesHelp": "將 EPG 提供的圖片和媒體一起保存。", "SubtitleGreen": "綠色", "SubtitleLightGray": "淺灰色", @@ -1721,11 +1721,11 @@ "LabelThrottleDelaySecondsHelp": "當轉檔進度快於用戶端下載進度的距離大於這個時間(以秒為單位)時暫停轉檔。必須足夠長,以保障用戶端擁有足夠的緩衝區。只有在限制轉檔啟用時有效。", "LabelSegmentKeepSeconds": "轉檔暫存檔保留時間", "LabelSegmentKeepSecondsHelp": "已經被用戶端下載過的轉檔暫存檔應該在伺服器上保留的時間(以秒為單位)。只在刪除轉檔暫存啟用時有效。", - "GetThePlugin": "取得外掛", + "GetThePlugin": "取得擴充功能", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "額外內容通常和上級項目擁有相同的標題,勾選以使用內部標題。", "SecondarySubtitles": "次要字幕", "LabelSyncPlayNoGroups": "沒有可用的群組", - "NotificationsMovedMessage": "通知功能已經轉移至 Webhook 外掛程式中。", + "NotificationsMovedMessage": "通知功能已經轉移至 Webhook 擴充功能中。", "TonemappingModeHelp": "如果遇到高光過度曝光,請嘗試切換到 RGB 模式。", "EnableAudioNormalizationHelp": "音量標準化將增加一個增益以保持平均音量在恆定的大小(-18dB)。", "EnableAudioNormalization": "音量標準化", @@ -1740,14 +1740,14 @@ "LogLevel.Debug": "除錯", "LogLevel.None": "沒有", "Notifications": "通知", - "LabelBackdropScreensaverInterval": "螢幕保護程式間隔", - "LabelBackdropScreensaverIntervalHelp": "螢幕保護裝置切換背景的間隔。", + "LabelBackdropScreensaverInterval": "背景螢幕保護程式間隔", + "LabelBackdropScreensaverIntervalHelp": "螢幕保護程式切換背景的間隔。", "LabelSystem": "系統", "LogLevel.Information": "資訊", "LogLevel.Warning": "警告", "LogLevel.Error": "錯誤", "LogLevel.Critical": "嚴重", - "PleaseConfirmRepositoryInstallation": "如果您已閱讀上述內容,並希望繼續安裝外掛程式庫,輕點擊 OK。", + "PleaseConfirmRepositoryInstallation": "我已詳閱上述內容,並確定安裝第三方擴充功能庫。", "ResolutionMatchSource": "配對來源", "SubtitleGray": "灰色", "Select": "選擇", @@ -1756,12 +1756,12 @@ "LabelDeveloper": "開發者", "Featurette": "花絮", "Short": "短片", - "LabelEnableAudioVbrHelp": "可變位元率(VBR)比起平均位元率(ABR)能提供更好的音質。在少數情況可能造成相容性問題。", + "LabelEnableAudioVbrHelp": "可變位元率(VBR)比起平均位元率(ABR)能提供更好的音質,在少數情況可能造成相容性問題。", "MenuOpen": "打開選單", "UserMenu": "使用者選單", - "HeaderConfirmRepositoryInstallation": "確認外掛來源庫", - "MessageRepositoryInstallDisclaimer": "警告:安裝第三方外掛程式庫有風險。其中可能包不穩定或含惡意的程式,並且可能隨時變化。請只安裝你信任的作者提供的外掛程式庫。", - "LabelEnableLUFSScanHelp": "用戶端可以自動調整音訊播放,在不同音軌之間獲得相等的音量。這會使得掃描花費較多時間並消耗較多資源。", + "HeaderConfirmRepositoryInstallation": "確定安裝擴充功能庫", + "MessageRepositoryInstallDisclaimer": "警告:安裝第三方擴充功能庫有風險。其中可能包不穩定或含惡意的程式,並且可能隨時變化。請只安裝你信任的作者提供的擴充功能庫。", + "LabelEnableLUFSScanHelp": "用戶端可以自動調整音訊播放,以在不同音軌之間獲得相等的音量。這會使得掃描花費較多時間並消耗較多資源。", "AllowCollectionManagement": "允許使用者管理系列", "GridView": "網格檢視", "AllowAv1Encoding": "允許以 AV1 格式編碼", @@ -1776,7 +1776,7 @@ "UnknownError": "發生未知的錯誤。", "HearingImpairedShort": "聽障/聾啞人士字幕", "LabelIsHearingImpaired": "用於聽障、聾啞人士", - "HeaderGuestCast": "來賓演出者", + "HeaderGuestCast": "客串演員", "GoHome": "返回首頁", "LabelSelectAudioNormalization": "音量標準化", "SelectAudioNormalizationHelp": "音軌增益:調整個別音軌的增益以獲得一致的音量。專輯增益:調整專輯中全部音軌的音量。", diff --git a/src/styles/dashboard.scss b/src/styles/dashboard.scss index 40b4e2f119..dbd6b9bbfd 100644 --- a/src/styles/dashboard.scss +++ b/src/styles/dashboard.scss @@ -152,31 +152,10 @@ div[data-role=controlgroup] a.ui-btn-active { } .content-primary { - padding-top: 6em; padding-right: 1em; padding-left: 1em; } -.withTabs .content-primary { - padding-top: 9em !important; -} - -@media all and (min-width: 40em) { - .content-primary { - padding-top: 4.6em; - } - - .withTabs .content-primary { - padding-top: 10em !important; - } -} - -@media all and (min-width: 84em) { - .withTabs .content-primary { - padding-top: 7em !important; - } -} - .content-primary ul:first-child { margin-top: 0; } diff --git a/src/themes/theme.ts b/src/themes/theme.ts index 4a17f6ade4..76c7f5bb8b 100644 --- a/src/themes/theme.ts +++ b/src/themes/theme.ts @@ -55,7 +55,18 @@ const theme = createTheme({ MuiButton: { defaultProps: { variant: 'contained' - } + }, + variants: [ + { + props: { + size: 'large' + }, + style: { + fontSize: '1rem', + fontWeight: 'bold' + } + } + ] }, MuiFormControl: { defaultProps: { diff --git a/src/types/eventType.ts b/src/types/eventType.ts new file mode 100644 index 0000000000..2568009c7c --- /dev/null +++ b/src/types/eventType.ts @@ -0,0 +1,7 @@ +/** + * Custom event types. + */ +export enum EventType { + SET_TABS = 'SET_TABS', + SHOW_VIDEO_OSD = 'SHOW_VIDEO_OSD' +} diff --git a/src/types/playbackStopInfo.ts b/src/types/playbackStopInfo.ts new file mode 100644 index 0000000000..4826d98449 --- /dev/null +++ b/src/types/playbackStopInfo.ts @@ -0,0 +1,46 @@ +import type { + BaseItemDto, + GroupShuffleMode, + MediaSourceInfo, + MediaType, + PlayerStateInfo +} from '@jellyfin/sdk/lib/generated-client'; + +export interface BufferedRange { + start?: number; + end?: number; +} + +export interface PlayState extends PlayerStateInfo { + ShuffleMode?: GroupShuffleMode; + MaxStreamingBitrate?: number | null; + PlaybackStartTimeTicks?: number | null; + PlaybackRate?: number | null; + SecondarySubtitleStreamIndex?: number | null; + BufferedRanges?: BufferedRange[]; + PlaySessionId?: string | null; + PlaylistItemId?: string | null; +} + +export interface MediaSource extends MediaSourceInfo { + enableDirectPlay?: boolean; + DefaultSecondarySubtitleStreamIndex?: number | null; + StreamUrl?: string | null; + albumNormalizationGain?: number | null; +} + +export interface PlayerState { + PlayState: PlayState; + NowPlayingItem: BaseItemDto | null; + NextItem: BaseItemDto | null; + NextMediaType: MediaType | null; + MediaSource: MediaSource | null; +} + +export interface PlaybackStopInfo { + player: unknown; // TODO: add a proper interface + state: PlayerState; + nextItem: BaseItemDto | null; + nextMediaType: MediaType | null; +} +