diff --git a/API/Services/Tasks/Scanner/ParseScannedFiles.cs b/API/Services/Tasks/Scanner/ParseScannedFiles.cs index 2b93a6cad..a7e64bd6a 100644 --- a/API/Services/Tasks/Scanner/ParseScannedFiles.cs +++ b/API/Services/Tasks/Scanner/ParseScannedFiles.cs @@ -95,8 +95,9 @@ public class ParseScannedFiles if (library.LibraryExcludePatterns.Count != 0) { matcher ??= new GlobMatcher(); - foreach (var pattern in library.LibraryExcludePatterns) + foreach (var pattern in library.LibraryExcludePatterns.Where(p => !string.IsNullOrEmpty(p.Pattern))) { + matcher.AddExclude(pattern.Pattern); } } diff --git a/UI/Web/package-lock.json b/UI/Web/package-lock.json index 5d03637ee..0d38dd80c 100644 --- a/UI/Web/package-lock.json +++ b/UI/Web/package-lock.json @@ -8,19 +8,19 @@ "name": "kavita-webui", "version": "0.4.2", "dependencies": { - "@angular/animations": "^17.0.2", - "@angular/cdk": "^17.0.0", - "@angular/common": "^17.0.2", - "@angular/compiler": "^17.0.2", - "@angular/core": "^17.0.2", - "@angular/forms": "^17.0.2", - "@angular/localize": "^17.0.2", - "@angular/platform-browser": "^17.0.2", - "@angular/platform-browser-dynamic": "^17.0.2", - "@angular/router": "^17.0.2", + "@angular/animations": "^17.0.3", + "@angular/cdk": "^17.0.1", + "@angular/common": "^17.0.3", + "@angular/compiler": "^17.0.3", + "@angular/core": "^17.0.3", + "@angular/forms": "^17.0.3", + "@angular/localize": "^17.0.3", + "@angular/platform-browser": "^17.0.3", + "@angular/platform-browser-dynamic": "^17.0.3", + "@angular/router": "^17.0.3", "@fortawesome/fontawesome-free": "^6.4.2", - "@iharbeck/ngx-virtual-scroller": "^16.0.0", - "@iplab/ngx-file-upload": "^16.0.2", + "@iharbeck/ngx-virtual-scroller": "^17.0.0", + "@iplab/ngx-file-upload": "^17.0.0", "@microsoft/signalr": "^7.0.12", "@ng-bootstrap/ng-bootstrap": "^15.1.2", "@ngneat/transloco": "^6.0.0", @@ -41,9 +41,10 @@ "ngx-color-picker": "^15.0.0", "ngx-extended-pdf-viewer": "^18.1.6", "ngx-file-drop": "^16.0.0", - "ngx-slider-v2": "^16.0.2", + "ngx-slider-v2": "^17.0.0", "ngx-stars": "^1.6.5", "ngx-toastr": "^17.0.2", + "nosleep.js": "^0.12.0", "rxjs": "^7.8.0", "screenfull": "^6.0.2", "swiper": "^8.4.6", @@ -51,26 +52,26 @@ "zone.js": "^0.14.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^17.0.0", - "@angular-eslint/builder": "^17.0.1", - "@angular-eslint/eslint-plugin": "^17.0.0", - "@angular-eslint/eslint-plugin-template": "^17.0.0", - "@angular-eslint/schematics": "^17.0.1", - "@angular-eslint/template-parser": "^17.0.1", - "@angular/cli": "^17.0.0", - "@angular/compiler-cli": "^17.0.2", + "@angular-devkit/build-angular": "^17.0.1", + "@angular-eslint/builder": "^17.1.0", + "@angular-eslint/eslint-plugin": "^17.1.0", + "@angular-eslint/eslint-plugin-template": "^17.1.0", + "@angular-eslint/schematics": "^17.1.0", + "@angular-eslint/template-parser": "^17.1.0", + "@angular/cli": "^17.0.1", + "@angular/compiler-cli": "^17.0.3", "@types/d3": "^7.4.3", "@types/file-saver": "^2.0.7", "@types/luxon": "^3.3.4", - "@types/node": "^20.9.0", + "@types/node": "^20.9.2", "@typescript-eslint/eslint-plugin": "^6.11.0", "@typescript-eslint/parser": "^6.11.0", - "eslint": "^8.53.0", + "eslint": "^8.54.0", "jsonminify": "^0.4.2", "karma-coverage": "~2.2.0", "ts-node": "~10.9.1", "typescript": "^5.2.2", - "webpack-bundle-analyzer": "^4.9.1" + "webpack-bundle-analyzer": "^4.10.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -95,12 +96,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1700.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.0.tgz", - "integrity": "sha512-whi7HvOjv1J3He9f+H8xNJWKyjAmWuWNl8gxNW6EZP/XLcrOu+/5QT4bPtXQBRIL/avZuc++5sNQS+kReaNCig==", + "version": "0.1700.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1700.1.tgz", + "integrity": "sha512-w84luzQNRjlt7XxX3+jyzcwBBv3gAjjvFWTjN1E5mlpDCUXgYmQ3CMowFHeu0U06HD5Sapap9p2l6GoajuZK5Q==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.0.0", + "@angular-devkit/core": "17.0.1", "rxjs": "7.8.1" }, "engines": { @@ -110,15 +111,15 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.0.tgz", - "integrity": "sha512-hkV8k4moAnUquac2Dz5XPd5izDDgEF82NeUkSwizcTaqlJqYOdmWASMsXyVBzdrTmDtFKQiphfA96i7eo5MlvA==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.0.1.tgz", + "integrity": "sha512-OomGAeBg/OOxzPpoU7EkdD3WwhKip+0Giy/cGtkalSgQ5vWTuZhf8UnxwTf7xEXW5LtvfoTtv7sKmb1dJT7FzA==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1700.0", - "@angular-devkit/build-webpack": "0.1700.0", - "@angular-devkit/core": "17.0.0", + "@angular-devkit/architect": "0.1700.1", + "@angular-devkit/build-webpack": "0.1700.1", + "@angular-devkit/core": "17.0.1", "@babel/core": "7.23.2", "@babel/generator": "7.23.0", "@babel/helper-annotate-as-pure": "7.22.5", @@ -129,7 +130,7 @@ "@babel/preset-env": "7.23.2", "@babel/runtime": "7.23.2", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "17.0.0", + "@ngtools/webpack": "17.0.1", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.16", @@ -668,12 +669,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1700.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.0.tgz", - "integrity": "sha512-Hx9JUb32gigsHlbBZJ5sw3q3H7qHeX8HTh4aIq4Glvb/5e+HgPlclVSIA5BY2ZYatHixU+CUAXRmcIKxViS02Q==", + "version": "0.1700.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1700.1.tgz", + "integrity": "sha512-u9LTcG9Kg2J6WkF1WSoBLdDabhbKxcuHY24SouAJTwg33j6YksglL7qnofOsNxny3Gdnze2BhCjQ1GS9Y8ovXw==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1700.0", + "@angular-devkit/architect": "0.1700.1", "rxjs": "7.8.1" }, "engines": { @@ -687,9 +688,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.0.tgz", - "integrity": "sha512-QUu3LnEi4A8t733v2+I0sLtyBJx3Q7zdTAhaauCbxbFhDid0cbYm8hYsyG/njor1irTPxSJbn6UoetVkwUQZxg==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.0.1.tgz", + "integrity": "sha512-UjNx9fZW0oU7UaeoB0HblYz/Nm8MWtinAe39XkY+zjECLWqKAcHPotfYjucXiky1UlBUOScIKbwjMDdEY8xkuw==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -726,12 +727,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.0.tgz", - "integrity": "sha512-LD7fjDORuBf139/oJ/gSwbIzQPfsm6Y67s1FD+XLi0QXaRt6dw4r7BMD08l1r//oPQofNgbEH4coGVO4NdCL/A==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.0.1.tgz", + "integrity": "sha512-bwgdGviRZC5X8Tl4QcjtIJAcC0p8yIhOyYVFrq4PWYvI+DfV9P6w3OFuoS6rwEoiIQR90+12iKBYMt1MfL/c0Q==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.0.0", + "@angular-devkit/core": "17.0.1", "jsonc-parser": "3.2.0", "magic-string": "0.30.5", "ora": "5.4.1", @@ -744,13 +745,13 @@ } }, "node_modules/@angular-eslint/builder": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.0.1.tgz", - "integrity": "sha512-bNXi5tdqIFdNDHxphDRUUbzA+7v6emOX2B/PFLG2pe+K6/JpHS0auwY/nq7hCroH7pMS5HZ+Q4i90q0GN/DWPg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.1.0.tgz", + "integrity": "sha512-rLIInxx9q82DDrfcg5gzjNftxhkqdLILUgjlA9XtA9LayU3rz4CS81we+vAOAPbbnGxoMsEeBg5nVecbKN3dVQ==", "dev": true, "dependencies": { - "@nx/devkit": "17.0.3", - "nx": "17.0.3" + "@nx/devkit": "17.1.2", + "nx": "17.1.2" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -758,19 +759,19 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.0.1.tgz", - "integrity": "sha512-E3YK9/uIBsuKC76i6uvPdtq8bwA63WDKDYpsPSTLF2XmL3a5LGev0+NmJCD2zR/0uMenHYB27BwjZotpk1rycg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-17.1.0.tgz", + "integrity": "sha512-Y+CN/8nQZaYjsb2b2sXbkQr0LrgBWhCzyLZ+rLfnLE60B9k4GeDt5b7z/OdSObi1xozXfqiaAZ1eXo0iQMN3JA==", "dev": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.0.1.tgz", - "integrity": "sha512-HNXzjvqTCfaxENnfjVHJXcWrfzv/3LDH6aEHF7P8B363JSgx0g4SZtGKBrdbXcJPmf5arVfVgRUvKMJ7Es9aiQ==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-17.1.0.tgz", + "integrity": "sha512-pQac5h+XwsquDzaasK/xs9tjdQ/f9eLq8e5An9eXJGHWy4KcrMmQ1XrpaMMMg503LF3rRG/dHKBskGsYgSN9oQ==", "dev": true, "dependencies": { - "@angular-eslint/utils": "17.0.1", - "@typescript-eslint/utils": "6.10.0" + "@angular-eslint/utils": "17.1.0", + "@typescript-eslint/utils": "6.11.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -778,15 +779,15 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.0.1.tgz", - "integrity": "sha512-7aQYUUCrdOvAKesUNsWSNUnPjzb9WI69Mlr/VhKSb4SNWwMr6SmYOsNqSqydIrtpHo4sIgyStGGfzELZ4Kub9Q==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-17.1.0.tgz", + "integrity": "sha512-nL9VhChwFQLIRQM4xbTY8Vo095Q4/D77hPtqt3ShYIrORjYTwaWa8+neexToAqXVMapce7oFmFa/OqtxvEerLg==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "17.0.1", - "@angular-eslint/utils": "17.0.1", - "@typescript-eslint/type-utils": "6.10.0", - "@typescript-eslint/utils": "6.10.0", + "@angular-eslint/bundled-angular-compiler": "17.1.0", + "@angular-eslint/utils": "17.1.0", + "@typescript-eslint/type-utils": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "aria-query": "5.3.0", "axobject-query": "4.0.0" }, @@ -796,16 +797,16 @@ } }, "node_modules/@angular-eslint/schematics": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-17.0.1.tgz", - "integrity": "sha512-CnQpYJDkGM6NJUOOeHPwfzJbZG90oRGvHVDkDlB2mZ63rQCKNzE1hFnlwBWkzyRH4GkV/84WW0++fXt3cU9ItA==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-17.1.0.tgz", + "integrity": "sha512-74gW1E5P4z3PvxNXOTXGaF6li/MLcSeJO8z7XtcP7wcXWu0fihOKlMJGgqB3rIcBa8lRcTDLekQERF+kRZ15aQ==", "dev": true, "dependencies": { - "@angular-eslint/eslint-plugin": "17.0.1", - "@angular-eslint/eslint-plugin-template": "17.0.1", - "@nx/devkit": "17.0.3", + "@angular-eslint/eslint-plugin": "17.1.0", + "@angular-eslint/eslint-plugin-template": "17.1.0", + "@nx/devkit": "17.1.2", "ignore": "5.2.4", - "nx": "17.0.3", + "nx": "17.1.2", "strip-json-comments": "3.1.1", "tmp": "0.2.1" }, @@ -814,12 +815,12 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.0.1.tgz", - "integrity": "sha512-EBN5c0/HuaikvPMqQJ6z2U2qSHof6xgwzNH48F4+Mnn2oMzz0eqtvjNrbTCka/vSCjELczao9px879ywDjVB5g==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-17.1.0.tgz", + "integrity": "sha512-CTxzB3stjynngTabdO8xTkiPc6Jvo15C2fxb1pYIlDIH2LgPJJxxCHi+IAt9oJpJOPa8QjLVF9VAXE3fLKAcpg==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "17.0.1", + "@angular-eslint/bundled-angular-compiler": "17.1.0", "eslint-scope": "^7.0.0" }, "peerDependencies": { @@ -828,13 +829,13 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.0.1.tgz", - "integrity": "sha512-yao+cuWmtDKwe/zW/4+e53pgwlk/rz7fjZFYvaYIuoIpqUQhqYYcBW8NeUoo8BscM57IfPqn0l6UkcXJhS1bRA==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-17.1.0.tgz", + "integrity": "sha512-AmG0xpRtnBQwrbHObonSilmD3hiFEtZHwFY3LT28VWxznB6WIAHFE7SrKWrRsRsXlib8LaRo4uobR5+MO8aLpw==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "17.0.1", - "@typescript-eslint/utils": "6.10.0" + "@angular-eslint/bundled-angular-compiler": "17.1.0", + "@typescript-eslint/utils": "6.11.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -842,9 +843,9 @@ } }, "node_modules/@angular/animations": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.2.tgz", - "integrity": "sha512-32RHWhTgFLMonI3kRdstACay/nvetfxXjdwcTtABjcvBoND7nD9GMhkISQdgS+hcR/IhgXxaPidq8f2UAY5DBw==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.3.tgz", + "integrity": "sha512-aBLVJ0HHYdIZCAXymQDP6UGuz/5oM/3uLCFVHx32vhibLByjw0jNCvy2lzmPLU5gUU6wEWX2b3ZtnzFqhmo4+A==", "dependencies": { "tslib": "^2.3.0" }, @@ -852,13 +853,13 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.2" + "@angular/core": "17.0.3" } }, "node_modules/@angular/cdk": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.0.tgz", - "integrity": "sha512-8F1z0YhDjKWqB29+AUh33OKr2Ts5PVUUogVXEVmmPipPDtj82iIQLbtBnR6xpWvmsw9mS3oD76EwBoUhHQgi6g==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.0.1.tgz", + "integrity": "sha512-0hrXm2D0s0/vUtDoLFRWTs75k5WY/hQmfnsaJXHeqinbE3eKOxmQxL1i7ymnMSQthEWzgRAhzS3Nfs7Alw3dQA==", "dependencies": { "tslib": "^2.3.0" }, @@ -872,15 +873,15 @@ } }, "node_modules/@angular/cli": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.0.tgz", - "integrity": "sha512-VzKYmN+1wSE2wLBEFu/NHSrRQbeaKkEDO9aZxd7nAnxC5T1Zcva7dfqZIXMHXH2HESYAZCvOS8ikBE/7DCtWWw==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.0.1.tgz", + "integrity": "sha512-3iJWw+bpr/8y1ZY1m0wGfukffQVmD6DJUNubB297NCq1bJyUj+uwBuDnpIH+vidJvPBEEY+9XPJr0Jnd6+i7rg==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1700.0", - "@angular-devkit/core": "17.0.0", - "@angular-devkit/schematics": "17.0.0", - "@schematics/angular": "17.0.0", + "@angular-devkit/architect": "0.1700.1", + "@angular-devkit/core": "17.0.1", + "@angular-devkit/schematics": "17.0.1", + "@schematics/angular": "17.0.1", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -939,9 +940,9 @@ "dev": true }, "node_modules/@angular/common": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.2.tgz", - "integrity": "sha512-hCW0njHgrcwTWNoKZDwf02DnhYLVWNXM2FMw66MKpfxTp7McSyaXjGBU9/hchW3dZJ0xTwyxoyoqJFoHYvg0yg==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.3.tgz", + "integrity": "sha512-AD/d1n0hNisHDhIeBsW2ERZI9ChjiOuZ3IiGwcYKmlcOHTrZTJPAh/ZMgahv24rArlNVax7bT+Ik8+sJedGcEQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -949,14 +950,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.2", + "@angular/core": "17.0.3", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.2.tgz", - "integrity": "sha512-ewUFbKhMEhAmw2dGfk0ImhTlyrO2y4pJSKIZdFrkR1d0HiJX8bCHUdTiiR/2jeP7w2eamjXj15Rptb+iZZes2Q==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.3.tgz", + "integrity": "sha512-ryUcj8Vc+Q4jMrjrmsEIsGLXeWSmNE/KoTyURPCH+NWq9GBMbjv4oe0/oFSBMN2ZtRMVCvqv2Nq+Z2KRDRGB0A==", "dependencies": { "tslib": "^2.3.0" }, @@ -964,7 +965,7 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.2" + "@angular/core": "17.0.3" }, "peerDependenciesMeta": { "@angular/core": { @@ -973,9 +974,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.2.tgz", - "integrity": "sha512-IUYL3Yz5RbR0Z0/x7it4GK3sMb2qVihxu0tlgfUW53P1Vi6nU/Zda0bCJTu6Z64qEtS8zwCwF1Ekomuq6UaiKg==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.3.tgz", + "integrity": "sha512-oj7KJBFgs6ulT1/A/xkkDHBOB0c7o9HV2Mn5pUosXBo2VgcGYeuJeXffC+mFr5FyiRO1sUanw4vSWnLzK1U0pQ==", "dev": true, "dependencies": { "@babel/core": "7.23.2", @@ -996,14 +997,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "17.0.2", + "@angular/compiler": "17.0.3", "typescript": ">=5.2 <5.3" } }, "node_modules/@angular/core": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.2.tgz", - "integrity": "sha512-MjDxWeyn3Txi0qo/V/I+B/gndh0uptQ0XWgBRwOx6Wcr5zRGeZIFlXBxPpyXnGTlJkeyErsTN7FfFCZ4C3kCPA==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.3.tgz", + "integrity": "sha512-zY4yhPiphuktrodaM+GiP8G07qnUlmwKElLjYazeIR8A+kF51RQRpSf/pWe5M0uJIn5Oja+RdO9kzhDI9QvOcA==", "dependencies": { "tslib": "^2.3.0" }, @@ -1016,9 +1017,9 @@ } }, "node_modules/@angular/forms": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.2.tgz", - "integrity": "sha512-w1QKifaVG4daxUktcBNZqBtOH1vn8t0YiwDR3woEdUYt0XYKMipfDzQfyIK+6fIVPOJUd42pRns1nbWJQHOInA==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.3.tgz", + "integrity": "sha512-slCUGe5nVOrA0Su9pkmgPXBVzkgh4stvVFBb6ic9/+GlmtRi8h1v5jAFhR4B0R4iaaIoF+TTpRKhZShwtFSqSg==", "dependencies": { "tslib": "^2.3.0" }, @@ -1026,16 +1027,16 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.2", - "@angular/core": "17.0.2", - "@angular/platform-browser": "17.0.2", + "@angular/common": "17.0.3", + "@angular/core": "17.0.3", + "@angular/platform-browser": "17.0.3", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/localize": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.0.2.tgz", - "integrity": "sha512-ct8xEy8Xk+PRfjrHLu7uywSQDzozmzlz6ptUCuYkRHrS4rJabXn3c0Sz4w+mh9B58qrK6KM+JSmXEZngEMXMTw==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.0.3.tgz", + "integrity": "sha512-AxMqZwClWNiYjoaHYu2Y499yM30DJDCgrV9k8mOb92SU3IUaQ52loPb91Cb2Xp4h0b6A3TVAmnYApcLYaUf40g==", "dependencies": { "@babel/core": "7.23.2", "fast-glob": "3.3.1", @@ -1050,14 +1051,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "17.0.2", - "@angular/compiler-cli": "17.0.2" + "@angular/compiler": "17.0.3", + "@angular/compiler-cli": "17.0.3" } }, "node_modules/@angular/platform-browser": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.2.tgz", - "integrity": "sha512-eTnPILEA/eAMkVUR/+g6fWhhMTmnmOzcZSGX/bBgQcvOhayZrDDxA6/Qf+jIB4RwC0wd3KA9zT5BCMmNojoUsg==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.3.tgz", + "integrity": "sha512-4SoW0yeAxgfcLIekKsvZVg/WgI5aQZyz9HGOoyBcVQ8coYoZmM9bAYQi+9zvyweqoWc+jgw72X1E8wtmMXt7Aw==", "dependencies": { "tslib": "^2.3.0" }, @@ -1065,9 +1066,9 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "17.0.2", - "@angular/common": "17.0.2", - "@angular/core": "17.0.2" + "@angular/animations": "17.0.3", + "@angular/common": "17.0.3", + "@angular/core": "17.0.3" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1076,9 +1077,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.2.tgz", - "integrity": "sha512-clcHqHcfD00/TlTixDbJ3q4EQxpm0t2ZFG76rRFmGrmE5tKYUPfaofIa3hQCxy3q269MAYuF16wALhUtrEWyUA==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.3.tgz", + "integrity": "sha512-Ab6ZeGG63z9Ilv8r4lHcmSirVaw8quRrPjDbT8cgIteHbj0SbwgDzxX0ve+fjjubFUluNSNtc6OYglWMHJ/g7Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -1086,16 +1087,16 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.2", - "@angular/compiler": "17.0.2", - "@angular/core": "17.0.2", - "@angular/platform-browser": "17.0.2" + "@angular/common": "17.0.3", + "@angular/compiler": "17.0.3", + "@angular/core": "17.0.3", + "@angular/platform-browser": "17.0.3" } }, "node_modules/@angular/router": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.2.tgz", - "integrity": "sha512-A1Ulv4qBAtJyK5g1yBlK1qZHe+KaaL5vMPAaPWUxICH8lHEodDkJlbYAUI2e4VL2BN7zBmdOep6tlBKPmHY3mw==", + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.3.tgz", + "integrity": "sha512-zw31XXMqLJ1CcHxDtEl2/FTJXeRbbnLM8oHtCPzbbxTkhAlnXxSYxjds0+1IMmpzz/v9qGBhYvUt8ZfZhqDBHQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -1103,9 +1104,9 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.2", - "@angular/core": "17.0.2", - "@angular/platform-browser": "17.0.2", + "@angular/common": "17.0.3", + "@angular/core": "17.0.3", + "@angular/platform-browser": "17.0.3", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -3307,9 +3308,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3367,28 +3368,28 @@ "dev": true }, "node_modules/@iharbeck/ngx-virtual-scroller": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@iharbeck/ngx-virtual-scroller/-/ngx-virtual-scroller-16.0.0.tgz", - "integrity": "sha512-zdXC/MTamAI5fFxFuFwP/0i+I5mgXulCHflIFITH4MuipLLu1aUkt5o9vbD9QMxehqeRhhQ5nWQVRg6Adosrjg==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@iharbeck/ngx-virtual-scroller/-/ngx-virtual-scroller-17.0.0.tgz", + "integrity": "sha512-20BvzxEHvp6yQmB3q4idyzuQ1MsQOJaEnoXLtrsCsU2NM7kJxyWTIVwHAxLX56G99gdKxU8T3GDxb+fVS6GEzw==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@tweenjs/tween.js": "^20.0.3" + "@tweenjs/tween.js": "^21.0.0" } }, "node_modules/@iplab/ngx-file-upload": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/@iplab/ngx-file-upload/-/ngx-file-upload-16.0.2.tgz", - "integrity": "sha512-6UppO6lROAbkGs+rFZ6ngutsCPrjs/BMnXsIE9UL4AL1NLRRAXrb28pkU2U7KjtDg/0naJ6JFmpRyUBCw5SXhg==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@iplab/ngx-file-upload/-/ngx-file-upload-17.0.0.tgz", + "integrity": "sha512-uOJyNRwErF0d1lHOAUQGASK1BCsTY9e3GpkbZIifQOle5h922F1YzVEkzpyhiAK6TxTlvJQP/GdlMiuhw7y6aw==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/animations": "^16.0.0", - "@angular/common": "^16.0.0", - "@angular/core": "^16.0.0", - "@angular/forms": "^16.0.0", + "@angular/animations": "^17.0.0", + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", "rxjs": "^7.0.0" } }, @@ -3713,9 +3714,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.0.tgz", - "integrity": "sha512-/Bb5MXlphNp3UDsQDa4EB4AwpF4D/plrCPd5YGfVvD43j5g5Rpen+cqz5jai1zfAkF1dPl2qq0nRp/jwmJO3uA==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.0.1.tgz", + "integrity": "sha512-IfiWIBY1GntfJFV/U1CSOHZ7zF5p0zFMFzux7/iGXUXit299LTdJ5mZTe9++lFcH6dPHgEPWlinuYAfzorY4ng==", "dev": true, "engines": { "node": "^18.13.0 || >=20.9.0", @@ -3951,21 +3952,21 @@ } }, "node_modules/@nrwl/devkit": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.0.3.tgz", - "integrity": "sha512-k1o0tvmGcg2/Kw2d56ULixqngCj5zTfp3mn6yS0ytIJrTQnJVkI8GcFCtpnqbzQjD8nKHhvTIcOMsj2BzLos9A==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-17.1.2.tgz", + "integrity": "sha512-INPZk4qts3xNJt8E9fttuVTufXdigPUOvUiAiPJmR2oUGDF8SeOlIYNForbz+XMRvxyIVtf45O32azUsgeZe3Q==", "dev": true, "dependencies": { - "@nx/devkit": "17.0.3" + "@nx/devkit": "17.1.2" } }, "node_modules/@nrwl/tao": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.0.3.tgz", - "integrity": "sha512-X6zcwf6c3z7TuztRJWM/OCfzm7+LI4Uw4coc9+PWr44ohHkgId2wEJTzXrDT3+lvv8DgwPpgWPwqntw+YcgRYg==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.1.2.tgz", + "integrity": "sha512-tL+dlygeor/kLG5fuK5qaiVFJ4hEtvJ/E+xY9epp20UKCNQSEkrSFiesiXtX6E/PPf4YbOQ4B4itWR2EYCm03Q==", "dev": true, "dependencies": { - "nx": "17.0.3", + "nx": "17.1.2", "tslib": "^2.3.0" }, "bin": { @@ -3973,12 +3974,12 @@ } }, "node_modules/@nx/devkit": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.0.3.tgz", - "integrity": "sha512-gW9aVc2BJBQ6PME07lsiaHg2Tjm9FN/qFjzxeSQYe2cR/s4hXqCBUfgKEqjgzMq+ykDR2Japkd8Vg8BN0uWnpA==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-17.1.2.tgz", + "integrity": "sha512-9Izd9jsa++AaZSSlhi0zkv58k4clzE0kICurx9DjfWN6zXnD08HqJoUYCVVaeYS/SrWlQUbMig8e49BO8ZV5mw==", "dev": true, "dependencies": { - "@nrwl/devkit": "17.0.3", + "@nrwl/devkit": "17.1.2", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -3991,9 +3992,9 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.0.3.tgz", - "integrity": "sha512-KA75JC/hgkt9qwK4dnN1tlaTXWdYItkNMjji6YjkyAYabbLKQKVcQoPocYP/RB/Gng+vNslXwuug2atgxDf43g==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.1.2.tgz", + "integrity": "sha512-U8fwkuw0vmDfeRQX9LSMt1XiAXM57fxOiuHlrIBn8hUBvMAugAgSAYd7K9YQjrFf9UFUtQeSHDU9N/c/n63hdg==", "cpu": [ "arm64" ], @@ -4007,9 +4008,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.0.3.tgz", - "integrity": "sha512-YVWk9jNibD7fzn8oNBl/UNu8NEfcVwFo5wiNyfOql495yP0tyGdZNHD4i/7aS2Y654G1JYDRf7TutJ7wWFU8bg==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.1.2.tgz", + "integrity": "sha512-QR9Jrm32UK2nLdDRtjFabfCvF5SOQJ2IuYkw6Sxe16xGZU2DS9nQku0TQO3Uy2HV1xSR7vzj7ys5z4eI2k+/mA==", "cpu": [ "x64" ], @@ -4023,9 +4024,9 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.0.3.tgz", - "integrity": "sha512-yiYkfY+3IrlBrlaXN6SO4Fnb0a+Ti+FPwAqRPpH6q3uTCh0NmNgE99ydtT31ZbgCF1ZwRK8NdCbuNO3w9uznwA==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.1.2.tgz", + "integrity": "sha512-6rDuFHJREVg5XpcM5RlE8pHP4bgcbns8sSemF/g75SV4iEkBqxRvSe88oBtF44b7IpX2zdONRDV4qQcRf3DxRg==", "cpu": [ "x64" ], @@ -4039,9 +4040,9 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.0.3.tgz", - "integrity": "sha512-x4h6QJlESJZ0bigUlxNEVyi7F/VWQQx+1IBptofXhK5eTOPjJ5qgINdM38AZg+kBJDz5XOVMDejg6RzHlhs0Tg==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.1.2.tgz", + "integrity": "sha512-4FwqUX7NxVfJ0v7frBKNbjENz6pvp3slDfoG2/WmnAj5a6TCu7magwlg1qLQaHYJ1m/i8u7RrG0Uz4SYHWzkVw==", "cpu": [ "arm" ], @@ -4055,9 +4056,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.0.3.tgz", - "integrity": "sha512-1lysnsZv9FS+9fciK0qh5PhsQ8U+vyFoR/jiJl+3vqYNUwEmNLD0VEAZzpZL2SJXQqD5E0bjuQpYxiD7YRXImQ==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.1.2.tgz", + "integrity": "sha512-r6UATY0dVdxwpVJPf/f/KfRkFpMP06wC6HcfNMGbTBTKiKtsdYF42bWoSkDgtgP2bOx9FDH+Hwu3U/Rtj44FIA==", "cpu": [ "arm64" ], @@ -4071,9 +4072,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.0.3.tgz", - "integrity": "sha512-0/bvSpbc4vOy9E24fu0ajDGe3SO8lmLtlxjXwGRcnzlt/MWM8sazoO0lX163/X2wF6tuL6+HXHOr6AeqsdeRXQ==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.1.2.tgz", + "integrity": "sha512-MXGYY/KCzQhbj5UKwnRO2/GhByOkRlI+EeH1Mazam8wZ1BiBfcVWZoOUybIlxxes1o4cAnkZwB527tCmwrHvGw==", "cpu": [ "arm64" ], @@ -4087,9 +4088,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.0.3.tgz", - "integrity": "sha512-tKO6MYUxpUsHMuZrYy8hG20RIOdBY3kyEK8wxH8JZZaXKeYUK+5vv5DavWpY5wuu2jffNIJNsbUzcrqOlcbDOg==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.1.2.tgz", + "integrity": "sha512-3cC131hJ3VhuxjzzBlwIdVp46onykOo78EmnURNdLxcWOpmcKgYXn7OnVwjrglYi+JL7D0vABGKKUpt1cs6/rA==", "cpu": [ "x64" ], @@ -4103,9 +4104,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.0.3.tgz", - "integrity": "sha512-H88yBLrI51m6NGoCkpBYhacRyTBfDuf7x00SnxSfD1yLlxCazPUG7CGkMedpzXo10YHxCFvg7B/Fa23DRRleUg==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.1.2.tgz", + "integrity": "sha512-1UrR87ByhE0zSXt0C+RNT5ZiAsctOSWZwPYQAGolz8K70BxomDeRVtIaRog5KK5SHlEd1ILvgsmrhovjLjrJNw==", "cpu": [ "x64" ], @@ -4119,9 +4120,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.0.3.tgz", - "integrity": "sha512-bKzmzjvgLB4IzLWTySqXgBgXawfw0ZSjUkscFQ3ZHrK9loMba1Ue8Ugy2DktlkUrCyPmGSot+YZViTzWP75C3w==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.1.2.tgz", + "integrity": "sha512-2M7FfzfPGAN7tCUWZilPGNk/RbbGcA00MKOA4MDqMwJtLobW8KqfMedilRNTEuyNibejOHwvGzA9T/Ac/ahHgA==", "cpu": [ "arm64" ], @@ -4135,9 +4136,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.0.3.tgz", - "integrity": "sha512-SJssAOyUM1IW9t84/Uzau9JHo14hnG5mxvcrborNGlLq+WnP0jzISVs7gvV2xWZ9j1JemxA5KLbkMuIkJyR6qQ==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.1.2.tgz", + "integrity": "sha512-oxKCKunuo4wRusMlNu7PlhBijhtNy7eBZPAWyqUsdfnb+CjY2QncjCguW3fnsG9gHQFCa+y0b1WkSkvJ5G1DiQ==", "cpu": [ "x64" ], @@ -4175,13 +4176,13 @@ } }, "node_modules/@schematics/angular": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.0.tgz", - "integrity": "sha512-9jKU5x/WzaBsfSkUowK1X74FqtMXa6+A60XgW4ACO8i6fwKfPeS+tIrAieeYOX80/njBh7I5CvcpHmWA2SbcXQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.0.1.tgz", + "integrity": "sha512-BacI1fQsEXNYkfJzDJn3CsUSc9A4M7nhXtvt3XjceUhOqUp2AR4uIeUwDOrpLnkRwv5+rZLafUnRN3k01WUJOw==", "dev": true, "dependencies": { - "@angular-devkit/core": "17.0.0", - "@angular-devkit/schematics": "17.0.0", + "@angular-devkit/core": "17.0.1", + "@angular-devkit/schematics": "17.0.1", "jsonc-parser": "3.2.0" }, "engines": { @@ -4759,9 +4760,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", - "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "version": "20.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz", + "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -4883,132 +4884,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", - "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", - "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.11.0", - "@typescript-eslint/utils": "6.11.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", - "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", - "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", - "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.11.0", - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/typescript-estree": "6.11.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", - "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.11.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -5070,7 +4945,7 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/scope-manager": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz", "integrity": "sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==", @@ -5087,121 +4962,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", - "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", - "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.11.0", - "@typescript-eslint/visitor-keys": "6.11.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", - "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.11.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser/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==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz", - "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.10.0", - "@typescript-eslint/visitor-keys": "6.10.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz", - "integrity": "sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz", + "integrity": "sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.10.0", - "@typescript-eslint/utils": "6.10.0", + "@typescript-eslint/typescript-estree": "6.11.0", + "@typescript-eslint/utils": "6.11.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -5222,9 +4990,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz", - "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.11.0.tgz", + "integrity": "sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -5235,13 +5003,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz", - "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz", + "integrity": "sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.10.0", - "@typescript-eslint/visitor-keys": "6.10.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/visitor-keys": "6.11.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5295,17 +5063,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz", - "integrity": "sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.11.0.tgz", + "integrity": "sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.10.0", - "@typescript-eslint/types": "6.10.0", - "@typescript-eslint/typescript-estree": "6.10.0", + "@typescript-eslint/scope-manager": "6.11.0", + "@typescript-eslint/types": "6.11.0", + "@typescript-eslint/typescript-estree": "6.11.0", "semver": "^7.5.4" }, "engines": { @@ -5353,12 +5121,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz", - "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz", + "integrity": "sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/types": "6.11.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -7535,6 +7303,12 @@ "d3-selection": "2 - 3" } }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -8233,15 +8007,15 @@ } }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", + "@eslint/js": "8.54.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -10981,24 +10755,6 @@ "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", "integrity": "sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==" }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.invokemap": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", - "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", - "dev": true - }, "node_modules/lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", @@ -11016,18 +10772,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.pullall": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", - "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", - "dev": true - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", - "dev": true - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -11787,18 +11531,18 @@ } }, "node_modules/ngx-slider-v2": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/ngx-slider-v2/-/ngx-slider-v2-16.0.2.tgz", - "integrity": "sha512-Lpl7SlErL+tJJvTRZYdyZoXTThKN8Ro1z3vscJQ1O5azHXwvbv3pnTcsOwY4ltfaP+dpzY27KL1QXyDr6QMaxQ==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/ngx-slider-v2/-/ngx-slider-v2-17.0.0.tgz", + "integrity": "sha512-226pb8TeZWhmMiQQnPVBZmos2qZua2NgMsuwumxatIBy7UwOGg8xkcUl8HvXVg+rO5w733uvPMN/yz//7rReJw==", "dependencies": { "detect-passive-events": "^2.0.3", - "rxjs": "^7.4.0", + "rxjs": "^7.8.1", "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^16.0.0", - "@angular/core": "^16.0.0", - "@angular/forms": "^16.0.0" + "@angular/common": "^17.0.3", + "@angular/core": "^17.0.3", + "@angular/forms": "^17.0.3" } }, "node_modules/ngx-stars": { @@ -11995,6 +11739,11 @@ "node": ">=0.10.0" } }, + "node_modules/nosleep.js": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/nosleep.js/-/nosleep.js-0.12.0.tgz", + "integrity": "sha512-9d1HbpKLh3sdWlhXMhU6MMH+wQzKkrgfRkYV0EBdvt99YJfj0ilCJrWRDYG2130Tm4GXbEoTCx5b34JSaP+HhA==" + }, "node_modules/npm-bundled": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", @@ -12122,13 +11871,13 @@ } }, "node_modules/nx": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-17.0.3.tgz", - "integrity": "sha512-VShJISKCYt3iVJoMUPZiv67+0tiItxWMnfVmTmPZPio2Fu+wGc9U4ijjPxcmp2RJmLRaxkB9cn5rlrAvkIrNMA==", + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/nx/-/nx-17.1.2.tgz", + "integrity": "sha512-pf94ri36cAiSzbYcPTJwQzttgAsHSjCLEni0Ilw6aVdjpoV2l6cggYxwddX7pgtCWuokVp/6KhAxVkbzvH65wg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "17.0.3", + "@nrwl/tao": "17.1.2", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", @@ -12169,16 +11918,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "17.0.3", - "@nx/nx-darwin-x64": "17.0.3", - "@nx/nx-freebsd-x64": "17.0.3", - "@nx/nx-linux-arm-gnueabihf": "17.0.3", - "@nx/nx-linux-arm64-gnu": "17.0.3", - "@nx/nx-linux-arm64-musl": "17.0.3", - "@nx/nx-linux-x64-gnu": "17.0.3", - "@nx/nx-linux-x64-musl": "17.0.3", - "@nx/nx-win32-arm64-msvc": "17.0.3", - "@nx/nx-win32-x64-msvc": "17.0.3" + "@nx/nx-darwin-arm64": "17.1.2", + "@nx/nx-darwin-x64": "17.1.2", + "@nx/nx-freebsd-x64": "17.1.2", + "@nx/nx-linux-arm-gnueabihf": "17.1.2", + "@nx/nx-linux-arm64-gnu": "17.1.2", + "@nx/nx-linux-arm64-musl": "17.1.2", + "@nx/nx-linux-x64-gnu": "17.1.2", + "@nx/nx-linux-x64-musl": "17.1.2", + "@nx/nx-win32-arm64-msvc": "17.1.2", + "@nx/nx-win32-x64-msvc": "17.1.2" }, "peerDependencies": { "@swc-node/register": "^1.6.7", @@ -12215,9 +11964,9 @@ "dev": true }, "node_modules/nx/node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -15662,24 +15411,20 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", - "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", + "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==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", + "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", "is-plain-object": "^5.0.0", - "lodash.debounce": "^4.0.8", - "lodash.escape": "^4.0.1", - "lodash.flatten": "^4.4.0", - "lodash.invokemap": "^4.6.0", - "lodash.pullall": "^4.2.0", - "lodash.uniqby": "^4.7.0", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", diff --git a/UI/Web/package.json b/UI/Web/package.json index 4a229eab5..54373a6c9 100644 --- a/UI/Web/package.json +++ b/UI/Web/package.json @@ -13,19 +13,19 @@ }, "private": true, "dependencies": { - "@angular/animations": "^17.0.2", - "@angular/cdk": "^17.0.0", - "@angular/common": "^17.0.2", - "@angular/compiler": "^17.0.2", - "@angular/core": "^17.0.2", - "@angular/forms": "^17.0.2", - "@angular/localize": "^17.0.2", - "@angular/platform-browser": "^17.0.2", - "@angular/platform-browser-dynamic": "^17.0.2", - "@angular/router": "^17.0.2", + "@angular/animations": "^17.0.3", + "@angular/cdk": "^17.0.1", + "@angular/common": "^17.0.3", + "@angular/compiler": "^17.0.3", + "@angular/core": "^17.0.3", + "@angular/forms": "^17.0.3", + "@angular/localize": "^17.0.3", + "@angular/platform-browser": "^17.0.3", + "@angular/platform-browser-dynamic": "^17.0.3", + "@angular/router": "^17.0.3", "@fortawesome/fontawesome-free": "^6.4.2", - "@iharbeck/ngx-virtual-scroller": "^16.0.0", - "@iplab/ngx-file-upload": "^16.0.2", + "@iharbeck/ngx-virtual-scroller": "^17.0.0", + "@iplab/ngx-file-upload": "^17.0.0", "@microsoft/signalr": "^7.0.12", "@ng-bootstrap/ng-bootstrap": "^15.1.2", "@ngneat/transloco": "^6.0.0", @@ -46,9 +46,10 @@ "ngx-color-picker": "^15.0.0", "ngx-extended-pdf-viewer": "^18.1.6", "ngx-file-drop": "^16.0.0", - "ngx-slider-v2": "^16.0.2", + "ngx-slider-v2": "^17.0.0", "ngx-stars": "^1.6.5", "ngx-toastr": "^17.0.2", + "nosleep.js": "^0.12.0", "rxjs": "^7.8.0", "screenfull": "^6.0.2", "swiper": "^8.4.6", @@ -56,25 +57,25 @@ "zone.js": "^0.14.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^17.0.0", - "@angular-eslint/builder": "^17.0.1", - "@angular-eslint/eslint-plugin": "^17.0.0", - "@angular-eslint/eslint-plugin-template": "^17.0.0", - "@angular-eslint/schematics": "^17.0.1", - "@angular-eslint/template-parser": "^17.0.1", - "@angular/cli": "^17.0.0", - "@angular/compiler-cli": "^17.0.2", + "@angular-devkit/build-angular": "^17.0.1", + "@angular-eslint/builder": "^17.1.0", + "@angular-eslint/eslint-plugin": "^17.1.0", + "@angular-eslint/eslint-plugin-template": "^17.1.0", + "@angular-eslint/schematics": "^17.1.0", + "@angular-eslint/template-parser": "^17.1.0", + "@angular/cli": "^17.0.1", + "@angular/compiler-cli": "^17.0.3", "@types/d3": "^7.4.3", "@types/file-saver": "^2.0.7", "@types/luxon": "^3.3.4", - "@types/node": "^20.9.0", + "@types/node": "^20.9.2", "@typescript-eslint/eslint-plugin": "^6.11.0", "@typescript-eslint/parser": "^6.11.0", - "eslint": "^8.53.0", + "eslint": "^8.54.0", "jsonminify": "^0.4.2", "karma-coverage": "~2.2.0", "ts-node": "~10.9.1", "typescript": "^5.2.2", - "webpack-bundle-analyzer": "^4.9.1" + "webpack-bundle-analyzer": "^4.10.1" } } diff --git a/UI/Web/src/app/_services/member.service.ts b/UI/Web/src/app/_services/member.service.ts index 27f21e6bc..b6afbd8a9 100644 --- a/UI/Web/src/app/_services/member.service.ts +++ b/UI/Web/src/app/_services/member.service.ts @@ -32,8 +32,8 @@ export class MemberService { return this.httpClient.get(this.baseUrl + 'users/has-library-access?libraryId=' + libraryId); } - hasReadingProgress(librayId: number) { - return this.httpClient.get(this.baseUrl + 'users/has-reading-progress?libraryId=' + librayId); + hasReadingProgress(libraryId: number) { + return this.httpClient.get(this.baseUrl + 'users/has-reading-progress?libraryId=' + libraryId); } addSeriesToWantToRead(seriesIds: Array) { @@ -47,5 +47,5 @@ export class MemberService { getMember() { return this.httpClient.get(this.baseUrl + 'users/myself'); } - + } diff --git a/UI/Web/src/app/_services/reader.service.ts b/UI/Web/src/app/_services/reader.service.ts index 71ee8759c..bd91c78cb 100644 --- a/UI/Web/src/app/_services/reader.service.ts +++ b/UI/Web/src/app/_services/reader.service.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpParams } from '@angular/common/http'; -import {DestroyRef, inject, Injectable} from '@angular/core'; -import {Location} from '@angular/common'; +import {DestroyRef, Inject, inject, Injectable} from '@angular/core'; +import {DOCUMENT, Location} from '@angular/common'; import { Router } from '@angular/router'; import { environment } from 'src/environments/environment'; import { ChapterInfo } from '../manga-reader/_models/chapter-info'; @@ -10,8 +10,6 @@ import { MangaFormat } from '../_models/manga-format'; import { BookmarkInfo } from '../_models/manga-reader/bookmark-info'; import { PageBookmark } from '../_models/readers/page-bookmark'; import { ProgressBookmark } from '../_models/readers/progress-bookmark'; -import { UtilityService } from '../shared/_services/utility.service'; -import { FilterUtilitiesService } from '../shared/_services/filter-utilities.service'; import { FileDimension } from '../manga-reader/_models/file-dimension'; import screenfull from 'screenfull'; import { TextResonse } from '../_types/text-response'; @@ -19,6 +17,8 @@ import { AccountService } from './account.service'; import {takeUntilDestroyed} from "@angular/core/rxjs-interop"; import {PersonalToC} from "../_models/readers/personal-toc"; import {SeriesFilterV2} from "../_models/metadata/v2/series-filter-v2"; +import NoSleep from 'nosleep.js'; + export const CHAPTER_ID_DOESNT_EXIST = -1; export const CHAPTER_ID_NOT_FETCHED = -2; @@ -35,9 +35,11 @@ export class ReaderService { // Override background color for reader and restore it onDestroy private originalBodyColor!: string; + private noSleep = new NoSleep(); + constructor(private httpClient: HttpClient, private router: Router, - private location: Location, private utilityService: UtilityService, - private filterUtilityService: FilterUtilitiesService, private accountService: AccountService) { + private location: Location, private accountService: AccountService, + @Inject(DOCUMENT) private document: Document) { this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => { if (user) { this.encodedKey = encodeURIComponent(user.apiKey); @@ -45,6 +47,30 @@ export class ReaderService { }); } + enableWakeLock(element?: Element | Document) { + // Enable wake lock. + // (must be wrapped in a user input event handler e.g. a mouse or touch handler) + + if (!element) element = this.document; + + const enableNoSleepHandler = () => { + element!.removeEventListener('click', enableNoSleepHandler, false); + element!.removeEventListener('touchmove', enableNoSleepHandler, false); + element!.removeEventListener('mousemove', enableNoSleepHandler, false); + this.noSleep!.enable(); + }; + + // Enable wake lock. + // (must be wrapped in a user input event handler e.g. a mouse or touch handler) + element.addEventListener('click', enableNoSleepHandler, false); + element.addEventListener('touchmove', enableNoSleepHandler, false); + element.addEventListener('mousemove', enableNoSleepHandler, false); + } + + disableWakeLock() { + this.noSleep.disable(); + } + getNavigationArray(libraryId: number, seriesId: number, chapterId: number, format: MangaFormat) { if (format === undefined) format = MangaFormat.ARCHIVE; diff --git a/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts b/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts index 949143fb4..19a17fe8d 100644 --- a/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts +++ b/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts @@ -560,6 +560,8 @@ export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy { this.clearTimeout(this.clickToPaginateVisualOverlayTimeout); this.clearTimeout(this.clickToPaginateVisualOverlayTimeout2); + this.readerService.disableWakeLock(); + this.themeService.clearBookTheme(); this.themeService.currentTheme$.pipe(take(1)).subscribe(theme => { @@ -679,6 +681,7 @@ export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy { // Check if user progress has part, if so load it so we scroll to it this.loadPage(results.progress.bookScrollId || undefined); + this.readerService.enableWakeLock(this.reader.nativeElement); }, () => { setTimeout(() => { this.closeReader(); diff --git a/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts b/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts index 56e1bb397..69b9d81e3 100644 --- a/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts +++ b/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts @@ -138,7 +138,26 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { @ViewChild(DoubleRendererComponent, { static: false }) doubleRenderer!: DoubleRendererComponent; @ViewChild(DoubleReverseRendererComponent, { static: false }) doubleReverseRenderer!: DoubleReverseRendererComponent; @ViewChild(DoubleNoCoverRendererComponent, { static: false }) doubleNoCoverRenderer!: DoubleNoCoverRendererComponent; + private readonly destroyRef = inject(DestroyRef); + private readonly route = inject(ActivatedRoute); + private readonly router = inject(Router); + private readonly accountService = inject(AccountService); + private readonly formBuilder = inject(FormBuilder); + private readonly navService = inject(NavService); + private readonly memberService = inject(MemberService); + private readonly modalService = inject(NgbModal); + private readonly cdRef = inject(ChangeDetectorRef); + private readonly toastr = inject(ToastrService); + public readonly readerService = inject(ReaderService); + public readonly utilityService = inject(UtilityService); + public readonly mangaReaderService = inject(ManagaReaderService); + + protected readonly KeyDirection = KeyDirection; + protected readonly ReaderMode = ReaderMode; + protected readonly LayoutMode = LayoutMode; + protected readonly ReadingDirection = ReadingDirection; + protected readonly Breakpoint = Breakpoint; libraryId!: number; seriesId!: number; @@ -207,12 +226,6 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { */ canvasImage = new Image(); - /** - * Dictates if we use render with canvas or with image. - * @remarks This is only for Splitting. - */ - //renderWithCanvas: boolean = false; - /** * A circular array of size PREFETCH_PAGES. Maintains prefetched Images around the current page to load from to avoid loading animation. * @see CircularArray @@ -440,12 +453,6 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { return 'right-side'; } - - get KeyDirection() { return KeyDirection; } - get ReaderMode() { return ReaderMode; } - get LayoutMode() { return LayoutMode; } - get ReadingDirection() { return ReadingDirection; } - get Breakpoint() { return Breakpoint; } get FittingOption() { return this.generalSettingsForm?.get('fittingOption')?.value || FITTING_OPTION.HEIGHT; } get ReadingAreaWidth() { return this.readingArea?.nativeElement.scrollWidth - this.readingArea?.nativeElement.clientWidth; @@ -455,12 +462,8 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { return this.readingArea?.nativeElement.scrollHeight - this.readingArea?.nativeElement.clientHeight; } - constructor(private route: ActivatedRoute, private router: Router, private accountService: AccountService, - public readerService: ReaderService, private formBuilder: FormBuilder, private navService: NavService, - private toastr: ToastrService, private memberService: MemberService, - public utilityService: UtilityService, @Inject(DOCUMENT) private document: Document, - private modalService: NgbModal, private readonly cdRef: ChangeDetectorRef, - public mangaReaderService: ManagaReaderService) { + + constructor(@Inject(DOCUMENT) private document: Document) { this.navService.hideNavBar(); this.navService.hideSideNav(); this.cdRef.markForCheck(); @@ -476,6 +479,7 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { } this.getPageFn = this.getPage.bind(this); + this.readerService.enableWakeLock(this.reader.nativeElement); this.libraryId = parseInt(libraryId, 10); this.seriesId = parseInt(seriesId, 10); @@ -633,6 +637,7 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { this.navService.showSideNav(); this.showBookmarkEffectEvent.complete(); if (this.goToPageEvent !== undefined) this.goToPageEvent.complete(); + this.readerService.disableWakeLock(); } diff --git a/UI/Web/src/app/nav/_components/nav-header/nav-header.component.ts b/UI/Web/src/app/nav/_components/nav-header/nav-header.component.ts index 34c2170dc..1ff9bfbab 100644 --- a/UI/Web/src/app/nav/_components/nav-header/nav-header.component.ts +++ b/UI/Web/src/app/nav/_components/nav-header/nav-header.component.ts @@ -140,11 +140,12 @@ export class NavHeaderComponent implements OnInit { } goToOther(field: FilterField, value: string) { - this.goTo({field, comparison: FilterComparison.Equal, value}); + this.goTo({field, comparison: FilterComparison.Equal, value: value + ''}); } goToPerson(role: PersonRole, filter: any) { this.clearSearch(); + filter = filter + ''; switch(role) { case PersonRole.Writer: this.goTo({field: FilterField.Writers, comparison: FilterComparison.Equal, value: filter}); diff --git a/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.html b/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.html index 57c403fe8..6dcf56b33 100644 --- a/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.html +++ b/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.html @@ -1,5 +1,5 @@ -
+
diff --git a/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.ts b/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.ts index 2986199f2..88762f40a 100644 --- a/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.ts +++ b/UI/Web/src/app/pdf-reader/_components/pdf-reader/pdf-reader.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, - Component, + Component, ElementRef, HostListener, inject, OnDestroy, - OnInit + OnInit, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { NgxExtendedPdfViewerService, PageViewModeType, ProgressBarEvent, NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer'; @@ -33,6 +33,8 @@ import {translate, TranslocoDirective} from "@ngneat/transloco"; }) export class PdfReaderComponent implements OnInit, OnDestroy { + @ViewChild('container') container!: ElementRef; + libraryId!: number; seriesId!: number; volumeId!: number; @@ -111,6 +113,7 @@ export class PdfReaderComponent implements OnInit, OnDestroy { this.navService.showNavBar(); this.navService.showSideNav(); + this.readerService.disableWakeLock(); } ngOnInit(): void { @@ -166,7 +169,7 @@ export class PdfReaderComponent implements OnInit, OnDestroy { } this.cdRef.markForCheck(); }); - + this.readerService.enableWakeLock(this.container.nativeElement); } /** diff --git a/openapi.json b/openapi.json index 9dfbe9366..38ec0a061 100644 --- a/openapi.json +++ b/openapi.json @@ -7,7 +7,7 @@ "name": "GPL-3.0", "url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE" }, - "version": "0.7.10.13" + "version": "0.7.10.15" }, "servers": [ {