Upgrade Angular to v21 and update all major frontend dependencies (#1674)

This commit is contained in:
Aditya Chandel 2025-11-28 19:15:04 -07:00 committed by GitHub
parent 7ff72a8916
commit 16ffd5f558
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 2820 additions and 2454 deletions

File diff suppressed because it is too large Load Diff

View File

@ -12,59 +12,58 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^20.3.5",
"@angular/common": "^20.3.5",
"@angular/compiler": "^20.3.5",
"@angular/core": "^20.3.5",
"@angular/forms": "^20.3.5",
"@angular/platform-browser": "^20.3.5",
"@angular/platform-browser-dynamic": "^20.3.5",
"@angular/router": "^20.3.5",
"@angular/animations": "^21.0.1",
"@angular/cdk": "^21.0.1",
"@angular/common": "^21.0.1",
"@angular/compiler": "^21.0.1",
"@angular/core": "^21.0.1",
"@angular/forms": "^21.0.1",
"@angular/platform-browser": "^21.0.1",
"@angular/platform-browser-dynamic": "^21.0.1",
"@angular/router": "^21.0.1",
"@iharbeck/ngx-virtual-scroller": "^19.0.1",
"@primeng/themes": "^20.0.1",
"@stomp/rx-stomp": "^2.0.1",
"@stomp/stompjs": "^7.1.1",
"@tailwindcss/postcss": "^4.1.8",
"@primeng/themes": "^20.3.0",
"@stomp/rx-stomp": "^2.3.0",
"@stomp/stompjs": "^7.2.1",
"@tweenjs/tween.js": "^25.0.0",
"angular-oauth2-oidc": "^20.0.0",
"chart.js": "^4.5.0",
"angular-oauth2-oidc": "^20.0.2",
"chart.js": "^4.5.1",
"chartjs-chart-matrix": "^3.0.0",
"chartjs-plugin-datalabels": "^2.2.0",
"epubjs": "^0.3.93",
"jwt-decode": "^4.0.0",
"ng-lazyload-image": "^9.1.3",
"ng2-charts": "^8.0.0",
"ngx-extended-pdf-viewer": "^23.3.1",
"ngx-extended-pdf-viewer": "^25.6.1",
"ngx-infinite-scroll": "^20.0.0",
"primeicons": "^7.0.0",
"primeng": "^20.0.1",
"primeng": "^20.3.0",
"quill": "^2.0.3",
"rxjs": "^7.8.2",
"showdown": "^2.1.0",
"tailwindcss-primeui": "^0.6.1",
"tslib": "^2.8.1",
"ws": "^8.18.2",
"zone.js": "^0.15.1",
"@angular/cdk": "^20.2.9"
"ws": "^8.18.3",
"zone.js": "^0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "^20.3.6",
"@angular/cli": "^20.3.6",
"@angular/compiler-cli": "^20.3.5",
"@tailwindcss/typography": "^0.5.16",
"@types/jasmine": "^5.1.8",
"@angular-devkit/build-angular": "^21.0.1",
"@angular/cli": "^21.0.1",
"@angular/compiler-cli": "^21.0.1",
"@tailwindcss/typography": "^0.5.19",
"@types/jasmine": "^5.1.13",
"@types/showdown": "^2.0.6",
"angular-eslint": "^20.4.0",
"autoprefixer": "^10.4.21",
"eslint": "^9.33.0",
"jasmine-core": "^5.7.1",
"angular-eslint": "^21.0.1",
"autoprefixer": "^10.4.22",
"eslint": "^9.39.1",
"jasmine-core": "^5.12.1",
"karma": "^6.4.4",
"karma-chrome-launcher": "^3.2.0",
"karma-coverage": "^2.2.1",
"karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.1.0",
"tailwindcss": "3.4.17",
"tailwindcss": "^3.4.17",
"typescript": "~5.9.3",
"typescript-eslint": "^8.39.0"
"typescript-eslint": "^8.48.0"
}
}

View File

@ -125,7 +125,7 @@ export class BookBrowserComponent implements OnInit, AfterViewInit {
searchTerm$ = new BehaviorSubject<string>('');
parsedFilters: Record<string, string[]> = {};
selectedFilter = new BehaviorSubject<Record<string, any> | null>(null);
selectedFilterMode = new BehaviorSubject<'and' | 'or'>('and');
selectedFilterMode = new BehaviorSubject<'and' | 'or' | 'single'>('and');
protected resetFilterSubject = new Subject<void>();
entity: Library | Shelf | MagicShelf | null = null;
entityType: EntityType | undefined;
@ -244,7 +244,7 @@ export class BookBrowserComponent implements OnInit, AfterViewInit {
});
const parsedFilters: Record<string, string[]> = {};
this.currentFilterLabel = 'All Books';
if (filterParams) {
@ -384,7 +384,7 @@ export class BookBrowserComponent implements OnInit, AfterViewInit {
}
}
onFilterModeChanged(mode: 'and' | 'or'): void {
onFilterModeChanged(mode: 'and' | 'or' | 'single'): void {
this.selectedFilterMode.next(mode);
}

View File

@ -45,7 +45,7 @@ export function doesBookMatchReadStatus(book: Book, selected: string[]): boolean
export class SideBarFilter implements BookFilter {
constructor(private selectedFilter$: Observable<any>, private selectedFilterMode$: Observable<'and' | 'or'>) {
constructor(private selectedFilter$: Observable<any>, private selectedFilterMode$: Observable<'and' | 'or' | 'single'>) {
}
filter(bookState: BookState): Observable<BookState> {

View File

@ -1,6 +1,7 @@
import {Shelf} from './shelf.model';
import {CbxBackgroundColor, CbxFitMode, CbxPageSpread, CbxPageViewMode, CbxScrollMode, NewPdfReaderSetting} from '../../settings/user-management/user.service';
import {BookReview} from '../components/book-reviews/book-review-service';
import {ZoomType} from 'ngx-extended-pdf-viewer';
export type BookType = "PDF" | "EPUB" | "CBX";
@ -179,7 +180,7 @@ export interface MetadataUpdateWrapper {
}
export interface PdfViewerSetting {
zoom: string | number;
zoom: ZoomType;
spread: 'off' | 'even' | 'odd';
}

View File

@ -1,6 +1,6 @@
import {Component, inject, OnDestroy, OnInit} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {NgxExtendedPdfViewerModule} from 'ngx-extended-pdf-viewer';
import {NgxExtendedPdfViewerModule, ZoomType} from 'ngx-extended-pdf-viewer';
import {PageTitleService} from "../../../shared/service/page-title.service";
import {BookService} from '../../book/service/book.service';
import {forkJoin, Subscription} from 'rxjs';
@ -24,7 +24,7 @@ export class PdfReaderComponent implements OnInit, OnDestroy {
page!: number;
spread!: 'off' | 'even' | 'odd';
zoom!: number | string;
zoom!: ZoomType;
showDownloadButton = false;
showPrintButton = false;
@ -88,7 +88,7 @@ export class PdfReaderComponent implements OnInit, OnDestroy {
}
}
onZoomChange(zoom: string | number): void {
onZoomChange(zoom: ZoomType): void {
if (zoom !== this.zoom) {
this.zoom = zoom;
this.updateViewerSetting();