From a77c38050dda5b0970ac529d4ce09920c4dc8f07 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 11 Nov 2023 13:58:24 -0600 Subject: [PATCH 01/16] Updated UI dependencies --- UI/Web/package-lock.json | 170 ++++++++++++++++++++++++--------------- UI/Web/package.json | 24 +++--- 2 files changed, 115 insertions(+), 79 deletions(-) diff --git a/UI/Web/package-lock.json b/UI/Web/package-lock.json index 44ca7b8d76..681d99a2b3 100644 --- a/UI/Web/package-lock.json +++ b/UI/Web/package-lock.json @@ -8,16 +8,16 @@ "name": "kavita-webui", "version": "0.4.2", "dependencies": { - "@angular/animations": "^17.0.1", + "@angular/animations": "^17.0.2", "@angular/cdk": "^17.0.0", - "@angular/common": "^17.0.1", - "@angular/compiler": "^17.0.1", - "@angular/core": "^17.0.1", - "@angular/forms": "^17.0.1", - "@angular/localize": "^17.0.1", - "@angular/platform-browser": "^17.0.1", - "@angular/platform-browser-dynamic": "^17.0.1", - "@angular/router": "^17.0.1", + "@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", "@fortawesome/fontawesome-free": "^6.4.2", "@iharbeck/ngx-virtual-scroller": "^16.0.0", "@iplab/ngx-file-upload": "^16.0.2", @@ -29,7 +29,7 @@ "@ngneat/transloco-persist-translations": "^5.0.0", "@ngneat/transloco-preload-langs": "^5.0.0", "@popperjs/core": "^2.11.7", - "@swimlane/ngx-charts": "^20.1.2", + "@swimlane/ngx-charts": "^20.5.0", "@tweenjs/tween.js": "^21.0.0", "bootstrap": "^5.3.2", "charts.css": "^1.1.0", @@ -52,13 +52,13 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^17.0.0", - "@angular-eslint/builder": "^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.1", + "@angular/compiler-cli": "^17.0.2", "@types/d3": "^7.4.3", "@types/file-saver": "^2.0.7", "@types/luxon": "^3.3.4", @@ -744,9 +744,9 @@ } }, "node_modules/@angular-eslint/builder": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-17.0.0.tgz", - "integrity": "sha512-cquqJH0R/IIh2PElcGXdo9FTcrkwO78H2MXk9ChGFBjQrYjihFLhFm12VuQsih7X6bJjA0cmr2PL1KbtgjMk1Q==", + "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==", "dev": true, "dependencies": { "@nx/devkit": "17.0.3", @@ -842,9 +842,9 @@ } }, "node_modules/@angular/animations": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.1.tgz", - "integrity": "sha512-Uee6E8zyU6XjDfKFozybcf+JZy0nUFQ1bUEmRwFP5HvYJSSJ5YiUDokNiVxyn9znwZ7zKHlM6Bq9ZY9cCmeKKQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.0.2.tgz", + "integrity": "sha512-32RHWhTgFLMonI3kRdstACay/nvetfxXjdwcTtABjcvBoND7nD9GMhkISQdgS+hcR/IhgXxaPidq8f2UAY5DBw==", "dependencies": { "tslib": "^2.3.0" }, @@ -852,7 +852,7 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.1" + "@angular/core": "17.0.2" } }, "node_modules/@angular/cdk": { @@ -939,9 +939,9 @@ "dev": true }, "node_modules/@angular/common": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.1.tgz", - "integrity": "sha512-AvvhZc+PhX5lVEW/Vorxe3Zf1rIEJJvfduRuRv+nsjijo3ZGjdgYjTYEx4ighZgH60RLIAuwyBE24gPkT2Pm7g==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.0.2.tgz", + "integrity": "sha512-hCW0njHgrcwTWNoKZDwf02DnhYLVWNXM2FMw66MKpfxTp7McSyaXjGBU9/hchW3dZJ0xTwyxoyoqJFoHYvg0yg==", "dependencies": { "tslib": "^2.3.0" }, @@ -949,14 +949,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.1", + "@angular/core": "17.0.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.1.tgz", - "integrity": "sha512-qlKqCvjoxPHJ1e8+UMaBl/n9zzrmGXI5eWMVhULSvQnQvPWkwNlUh5XFeoSFcTEQxORjaO2/08Z31DmTJAqlPA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.0.2.tgz", + "integrity": "sha512-ewUFbKhMEhAmw2dGfk0ImhTlyrO2y4pJSKIZdFrkR1d0HiJX8bCHUdTiiR/2jeP7w2eamjXj15Rptb+iZZes2Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -964,7 +964,7 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/core": "17.0.1" + "@angular/core": "17.0.2" }, "peerDependenciesMeta": { "@angular/core": { @@ -973,9 +973,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.1.tgz", - "integrity": "sha512-Rnvh2V2CYhG7NR5VI4cESGKk9jyqLat0HoqXa06v3TtbjkiZyjjwh0SyZ8NYOBMkQeWiQTHGcgxGvjKD3L3qqA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.0.2.tgz", + "integrity": "sha512-IUYL3Yz5RbR0Z0/x7it4GK3sMb2qVihxu0tlgfUW53P1Vi6nU/Zda0bCJTu6Z64qEtS8zwCwF1Ekomuq6UaiKg==", "dev": true, "dependencies": { "@babel/core": "7.23.2", @@ -996,14 +996,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "17.0.1", + "@angular/compiler": "17.0.2", "typescript": ">=5.2 <5.3" } }, "node_modules/@angular/core": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.1.tgz", - "integrity": "sha512-yVwU+oz0G8g6Q5ORyOCpgqMPdSiCdfW+uQhjI37WROnXHja3jY843AqrYTKE6mMx1r6q9h1wbDy+x2E61OWP7A==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.0.2.tgz", + "integrity": "sha512-MjDxWeyn3Txi0qo/V/I+B/gndh0uptQ0XWgBRwOx6Wcr5zRGeZIFlXBxPpyXnGTlJkeyErsTN7FfFCZ4C3kCPA==", "dependencies": { "tslib": "^2.3.0" }, @@ -1016,9 +1016,9 @@ } }, "node_modules/@angular/forms": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.1.tgz", - "integrity": "sha512-FpmUf2kgzwZXVbFB4VrwbnrO0m88QLUBsDsbLfQVQQwb7KxwSaftUu/aIrjst1gFCdl9k0Vqtrq2gwLZKzdSGQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.0.2.tgz", + "integrity": "sha512-w1QKifaVG4daxUktcBNZqBtOH1vn8t0YiwDR3woEdUYt0XYKMipfDzQfyIK+6fIVPOJUd42pRns1nbWJQHOInA==", "dependencies": { "tslib": "^2.3.0" }, @@ -1026,16 +1026,16 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.1", - "@angular/core": "17.0.1", - "@angular/platform-browser": "17.0.1", + "@angular/common": "17.0.2", + "@angular/core": "17.0.2", + "@angular/platform-browser": "17.0.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/localize": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.0.1.tgz", - "integrity": "sha512-pNLLnEbXjoW1agKwA4cBcM/HnqGuwQMpIhx9H46Y/oC2JkAvTCMVyXLbZUESeXmhysC9x2JDmF+Awhu7JzVVCA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.0.2.tgz", + "integrity": "sha512-ct8xEy8Xk+PRfjrHLu7uywSQDzozmzlz6ptUCuYkRHrS4rJabXn3c0Sz4w+mh9B58qrK6KM+JSmXEZngEMXMTw==", "dependencies": { "@babel/core": "7.23.2", "fast-glob": "3.3.1", @@ -1050,14 +1050,14 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/compiler": "17.0.1", - "@angular/compiler-cli": "17.0.1" + "@angular/compiler": "17.0.2", + "@angular/compiler-cli": "17.0.2" } }, "node_modules/@angular/platform-browser": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.0.1.tgz", - "integrity": "sha512-JpvU0YDEM5KYdHtxC0Kdzk/hdwvZPq5vju5lTmIjTVa2OOabApOrQ6cq1MpKlrvjv1rw8MClHIM0l5Y0g9KH5g==", + "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==", "dependencies": { "tslib": "^2.3.0" }, @@ -1065,9 +1065,9 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/animations": "17.0.1", - "@angular/common": "17.0.1", - "@angular/core": "17.0.1" + "@angular/animations": "17.0.2", + "@angular/common": "17.0.2", + "@angular/core": "17.0.2" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1076,9 +1076,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.1.tgz", - "integrity": "sha512-xEcbB/ukXc65LaX4JBQYEM7D5Z8LcUIZniSJFneY7deZt3wNiKgmPZrPoXUyDV26QULh7N0IADEzvbcMF60AFQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.0.2.tgz", + "integrity": "sha512-clcHqHcfD00/TlTixDbJ3q4EQxpm0t2ZFG76rRFmGrmE5tKYUPfaofIa3hQCxy3q269MAYuF16wALhUtrEWyUA==", "dependencies": { "tslib": "^2.3.0" }, @@ -1086,16 +1086,16 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.1", - "@angular/compiler": "17.0.1", - "@angular/core": "17.0.1", - "@angular/platform-browser": "17.0.1" + "@angular/common": "17.0.2", + "@angular/compiler": "17.0.2", + "@angular/core": "17.0.2", + "@angular/platform-browser": "17.0.2" } }, "node_modules/@angular/router": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.1.tgz", - "integrity": "sha512-73PCDDsRAjemODMRndZhwEN6Tb9rVVbDfMWgLQ4HgfgKnjek8P9BoYf8rOf3qV5fXf3c1Sm9MmKtaPv+l5lU9Q==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.0.2.tgz", + "integrity": "sha512-A1Ulv4qBAtJyK5g1yBlK1qZHe+KaaL5vMPAaPWUxICH8lHEodDkJlbYAUI2e4VL2BN7zBmdOep6tlBKPmHY3mw==", "dependencies": { "tslib": "^2.3.0" }, @@ -1103,9 +1103,9 @@ "node": "^18.13.0 || >=20.9.0" }, "peerDependencies": { - "@angular/common": "17.0.1", - "@angular/core": "17.0.1", - "@angular/platform-browser": "17.0.1", + "@angular/common": "17.0.2", + "@angular/core": "17.0.2", + "@angular/platform-browser": "17.0.2", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -4251,9 +4251,9 @@ "dev": true }, "node_modules/@swimlane/ngx-charts": { - "version": "20.4.1", - "resolved": "https://registry.npmjs.org/@swimlane/ngx-charts/-/ngx-charts-20.4.1.tgz", - "integrity": "sha512-DyTQe0fcqLDoLEZca45gkdjxP8iLH7kh4pCkr+TCFIkmgEdfQ5DpavNBOOVO0qd5J5uV/tbtSnkYWSx8JkbFpg==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@swimlane/ngx-charts/-/ngx-charts-20.5.0.tgz", + "integrity": "sha512-PNBIHdu/R3ceD7jnw1uCBVOj4k3T6IxfdW6xsDsglGkZyoWMEEq4tLoEurjLEKzmDtRv9c35kVNOXy0lkOuXeA==", "dependencies": { "d3-array": "^3.1.1", "d3-brush": "^3.0.0", @@ -4262,6 +4262,7 @@ "d3-format": "^3.1.0", "d3-hierarchy": "^3.1.0", "d3-interpolate": "^3.0.1", + "d3-sankey": "^0.12.3", "d3-scale": "^4.0.2", "d3-selection": "^3.0.0", "d3-shape": "^3.2.0", @@ -7166,6 +7167,41 @@ "node": ">=12" } }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, "node_modules/d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", diff --git a/UI/Web/package.json b/UI/Web/package.json index a8459dd1ad..73d8598e83 100644 --- a/UI/Web/package.json +++ b/UI/Web/package.json @@ -13,16 +13,16 @@ }, "private": true, "dependencies": { - "@angular/animations": "^17.0.1", + "@angular/animations": "^17.0.2", "@angular/cdk": "^17.0.0", - "@angular/common": "^17.0.1", - "@angular/compiler": "^17.0.1", - "@angular/core": "^17.0.1", - "@angular/forms": "^17.0.1", - "@angular/localize": "^17.0.1", - "@angular/platform-browser": "^17.0.1", - "@angular/platform-browser-dynamic": "^17.0.1", - "@angular/router": "^17.0.1", + "@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", "@fortawesome/fontawesome-free": "^6.4.2", "@iharbeck/ngx-virtual-scroller": "^16.0.0", "@iplab/ngx-file-upload": "^16.0.2", @@ -34,7 +34,7 @@ "@ngneat/transloco-persist-translations": "^5.0.0", "@ngneat/transloco-preload-langs": "^5.0.0", "@popperjs/core": "^2.11.7", - "@swimlane/ngx-charts": "^20.1.2", + "@swimlane/ngx-charts": "^20.5.0", "@tweenjs/tween.js": "^21.0.0", "bootstrap": "^5.3.2", "charts.css": "^1.1.0", @@ -57,13 +57,13 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^17.0.0", - "@angular-eslint/builder": "^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.1", + "@angular/compiler-cli": "^17.0.2", "@types/d3": "^7.4.3", "@types/file-saver": "^2.0.7", "@types/luxon": "^3.3.4", From 6e3c6fd9e112260a89be0095e90ce324875acb08 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 11 Nov 2023 14:05:36 -0600 Subject: [PATCH 02/16] Fixed the directory picker typeahead not opening correctly. --- .../directory-picker/directory-picker.component.html | 2 +- .../directory-picker/directory-picker.component.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html index 6cf59f9011..d4ec401e31 100644 --- a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html +++ b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.html @@ -8,7 +8,7 @@
- diff --git a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts index 6d3d28d21e..1584248db2 100644 --- a/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts +++ b/UI/Web/src/app/admin/_modals/directory-picker/directory-picker.component.ts @@ -17,10 +17,10 @@ export interface DirectoryPickerResult { @Component({ - selector: 'app-directory-picker', - templateUrl: './directory-picker.component.html', - styleUrls: ['./directory-picker.component.scss'], - standalone: true, + selector: 'app-directory-picker', + templateUrl: './directory-picker.component.html', + styleUrls: ['./directory-picker.component.scss'], + standalone: true, imports: [ReactiveFormsModule, NgbTypeahead, FormsModule, NgbHighlight, NgIf, NgFor, NgClass, TranslocoDirective] }) export class DirectoryPickerComponent implements OnInit { @@ -37,7 +37,7 @@ export class DirectoryPickerComponent implements OnInit { path: string = ''; - @ViewChild('instance', {static: true}) instance!: NgbTypeahead; + @ViewChild('instance', {static: false}) instance!: NgbTypeahead; focus$ = new Subject(); click$ = new Subject(); searching: boolean = false; From f14761e418087e8d7d062c672e3b6a014fd5bc61 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 11 Nov 2023 14:10:08 -0600 Subject: [PATCH 03/16] Fixed broken library cover chooser on new library. --- .../library-settings-modal.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UI/Web/src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.html b/UI/Web/src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.html index 7915b9e169..847f861d0c 100644 --- a/UI/Web/src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.html +++ b/UI/Web/src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.html @@ -80,7 +80,7 @@