From f0be2f6e6e8920a1f5190834f3383c054873c3f9 Mon Sep 17 00:00:00 2001 From: Eric Joanis Date: Thu, 1 Oct 2026 12:12:59 -0400 Subject: [PATCH 1/2] build(deps): replace ngx-toastr by @openng/ngx-toastr The former has been archived and is no longer maintained. It does not and will never support Angular 22. The latter is a fork to continue maintenance on it. https://github.com/openng-org/ngx-toastr https://www.npmjs.com/package/@openng/ngx-toastr I have carefully reviewed it, looking at the differences, and it is legit. --- package-lock.json | 31 ++++++++++++++++--------------- package.json | 2 +- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 84063f709..7eaa74156 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,13 +19,13 @@ "@angular/material": "^21", "@angular/platform-browser": "^21.2.17", "@angular/router": "^21.2.17", + "@openng/ngx-toastr": "^1.1.1", "@sindresorhus/slugify": "^2.2.1", "bootstrap": "^5.3.7", "file-saver": "^2.0.5", "image-conversion": "^2.1.1", "jszip": "^3.10.1", "mime": "^4.0.7", - "ngx-toastr": "^20", "root": "file:", "shepherd.js": "^11.2.0", "soundswallower": "^0.6.3", @@ -8224,6 +8224,21 @@ "typescript": "^3 || ^4 || ^5" } }, + "node_modules/@openng/ngx-toastr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@openng/ngx-toastr/-/ngx-toastr-1.1.1.tgz", + "integrity": "sha512-QAWAICrGqu4U+VQ7KH3j/U2Kp1caCDA1lepBngtYsZjj+yAh9Lyf73yIjvl8vZp1QOH0JK/KTdhq6H6rfcWFSw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + }, + "peerDependencies": { + "@angular/common": "^20.0.0 || ^21.0.0 || ^22.0.0", + "@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0", + "@angular/platform-browser": "^20.0.0 || ^21.0.0 || ^22.0.0", + "rxjs": "^7.8.2" + } + }, "node_modules/@oxc-parser/binding-android-arm-eabi": { "version": "0.150.0", "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.150.0.tgz", @@ -21752,20 +21767,6 @@ "node": ">=20" } }, - "node_modules/ngx-toastr": { - "version": "20.0.5", - "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-20.0.5.tgz", - "integrity": "sha512-JcGu1Cbl+0SovPhxma72ygGeZHtpHWWKwBCyiabb+MSWYtXu/SOwEZ2HTWtZ4wcEYOOiy9tDQZgiEKWXpibpRw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.8.1" - }, - "peerDependencies": { - "@angular/common": "^21.0.0", - "@angular/core": "^21.0.0", - "rxjs": "^7.8.2" - } - }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", diff --git a/package.json b/package.json index ed0cb31d2..2f2c9527e 100644 --- a/package.json +++ b/package.json @@ -65,13 +65,13 @@ "@angular/material": "^21", "@angular/platform-browser": "^21.2.17", "@angular/router": "^21.2.17", + "@openng/ngx-toastr": "^1.1.1", "@sindresorhus/slugify": "^2.2.1", "bootstrap": "^5.3.7", "file-saver": "^2.0.5", "image-conversion": "^2.1.1", "jszip": "^3.10.1", "mime": "^4.0.7", - "ngx-toastr": "^20", "root": "file:", "shepherd.js": "^11.2.0", "soundswallower": "^0.6.3", From 90d76c87d3aad868259d713427b0b25dc2f78174 Mon Sep 17 00:00:00 2001 From: Eric Joanis Date: Thu, 1 Oct 2026 12:13:44 -0400 Subject: [PATCH 2/2] refactor: move all ngx-toastr imports to @openng/ngx-toastr --- packages/studio-web/src/app/app.component.spec.ts | 2 +- packages/studio-web/src/app/app.module.ts | 2 +- packages/studio-web/src/app/b64.service.spec.ts | 2 +- packages/studio-web/src/app/demo/demo.component.spec.ts | 2 +- packages/studio-web/src/app/demo/demo.component.ts | 2 +- packages/studio-web/src/app/editor/editor.component.spec.ts | 2 +- packages/studio-web/src/app/editor/editor.component.ts | 2 +- packages/studio-web/src/app/file.service.spec.ts | 2 +- packages/studio-web/src/app/file.service.ts | 2 +- packages/studio-web/src/app/ras.service.spec.ts | 2 +- .../src/app/shared/download/download.component.spec.ts | 2 +- .../src/app/shared/download/download.service.spec.ts | 2 +- .../studio-web/src/app/shared/download/download.service.ts | 2 +- .../src/app/shared/wc-styling/wc-styling.component.spec.ts | 2 +- .../src/app/shared/wc-styling/wc-styling.component.ts | 2 +- packages/studio-web/src/app/soundswallower.service.spec.ts | 2 +- packages/studio-web/src/app/studio/studio.component.spec.ts | 2 +- packages/studio-web/src/app/upload/upload.component.spec.ts | 2 +- packages/studio-web/src/app/upload/upload.component.ts | 2 +- packages/studio-web/src/styles.sass | 4 ++-- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/studio-web/src/app/app.component.spec.ts b/packages/studio-web/src/app/app.component.spec.ts index 3bd7cb6da..c68b6f209 100644 --- a/packages/studio-web/src/app/app.component.spec.ts +++ b/packages/studio-web/src/app/app.component.spec.ts @@ -1,4 +1,4 @@ -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { HttpClient, provideHttpClient } from "@angular/common/http"; import { diff --git a/packages/studio-web/src/app/app.module.ts b/packages/studio-web/src/app/app.module.ts index 8d4ea1c1f..73fc77fd8 100644 --- a/packages/studio-web/src/app/app.module.ts +++ b/packages/studio-web/src/app/app.module.ts @@ -1,4 +1,4 @@ -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { provideHttpClient } from "@angular/common/http"; import { diff --git a/packages/studio-web/src/app/b64.service.spec.ts b/packages/studio-web/src/app/b64.service.spec.ts index 431a42be0..1bb7c5a92 100644 --- a/packages/studio-web/src/app/b64.service.spec.ts +++ b/packages/studio-web/src/app/b64.service.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, provideHttpClient } from "@angular/common/http"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { HttpTestingController, provideHttpClientTesting, diff --git a/packages/studio-web/src/app/demo/demo.component.spec.ts b/packages/studio-web/src/app/demo/demo.component.spec.ts index b017d960e..36c54e2a5 100644 --- a/packages/studio-web/src/app/demo/demo.component.spec.ts +++ b/packages/studio-web/src/app/demo/demo.component.spec.ts @@ -1,6 +1,6 @@ import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { provideHttpClientTesting } from "@angular/common/http/testing"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; diff --git a/packages/studio-web/src/app/demo/demo.component.ts b/packages/studio-web/src/app/demo/demo.component.ts index 656ed9f47..e5301d1bc 100644 --- a/packages/studio-web/src/app/demo/demo.component.ts +++ b/packages/studio-web/src/app/demo/demo.component.ts @@ -5,7 +5,7 @@ import { B64Service } from "../b64.service"; import { StudioService } from "../studio/studio.service"; import { DownloadService } from "../shared/download/download.service"; import { SupportedOutputs } from "../ras.service"; -import { ToastrService } from "ngx-toastr"; +import { ToastrService } from "@openng/ngx-toastr"; import { type InterfaceLanguage } from "@readalongs/web-component"; const localizationToRASLanguage: Record = { diff --git a/packages/studio-web/src/app/editor/editor.component.spec.ts b/packages/studio-web/src/app/editor/editor.component.spec.ts index b72cbcd52..2191a702f 100644 --- a/packages/studio-web/src/app/editor/editor.component.spec.ts +++ b/packages/studio-web/src/app/editor/editor.component.spec.ts @@ -1,5 +1,5 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { EditorComponent } from "./editor.component"; import { provideHttpClientTesting } from "@angular/common/http/testing"; import { FormsModule } from "@angular/forms"; diff --git a/packages/studio-web/src/app/editor/editor.component.ts b/packages/studio-web/src/app/editor/editor.component.ts index d4e412a52..0d61afac2 100644 --- a/packages/studio-web/src/app/editor/editor.component.ts +++ b/packages/studio-web/src/app/editor/editor.component.ts @@ -30,7 +30,7 @@ import { ShepherdService } from "../shepherd.service"; import { EditorService } from "./editor.service"; import { DownloadService } from "../shared/download/download.service"; import { SupportedOutputs } from "../ras.service"; -import { ToastrService } from "ngx-toastr"; +import { ToastrService } from "@openng/ngx-toastr"; import { validateFileType } from "../utils/utils"; import { WcStylingService } from "../shared/wc-styling/wc-styling.service"; import { WcStylingComponent } from "../shared/wc-styling/wc-styling.component"; diff --git a/packages/studio-web/src/app/file.service.spec.ts b/packages/studio-web/src/app/file.service.spec.ts index 17db6cecf..f6b11336f 100644 --- a/packages/studio-web/src/app/file.service.spec.ts +++ b/packages/studio-web/src/app/file.service.spec.ts @@ -1,6 +1,6 @@ import { TestBed } from "@angular/core/testing"; import { HttpClient, provideHttpClient } from "@angular/common/http"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { HttpTestingController, provideHttpClientTesting, diff --git a/packages/studio-web/src/app/file.service.ts b/packages/studio-web/src/app/file.service.ts index 90677dd04..7c1bd892f 100644 --- a/packages/studio-web/src/app/file.service.ts +++ b/packages/studio-web/src/app/file.service.ts @@ -10,7 +10,7 @@ import { } from "rxjs"; import { HttpClient, HttpErrorResponse } from "@angular/common/http"; import { inject, Injectable } from "@angular/core"; -import { ToastrService } from "ngx-toastr"; +import { ToastrService } from "@openng/ngx-toastr"; import { AudioContext, AudioBuffer } from "standardized-audio-context"; @Injectable({ diff --git a/packages/studio-web/src/app/ras.service.spec.ts b/packages/studio-web/src/app/ras.service.spec.ts index c86272376..7c7f77a16 100644 --- a/packages/studio-web/src/app/ras.service.spec.ts +++ b/packages/studio-web/src/app/ras.service.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, provideHttpClient } from "@angular/common/http"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { HttpTestingController, provideHttpClientTesting, diff --git a/packages/studio-web/src/app/shared/download/download.component.spec.ts b/packages/studio-web/src/app/shared/download/download.component.spec.ts index f1315c1bc..af1e45a98 100644 --- a/packages/studio-web/src/app/shared/download/download.component.spec.ts +++ b/packages/studio-web/src/app/shared/download/download.component.spec.ts @@ -1,5 +1,5 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { DownloadComponent } from "./download.component"; import { provideHttpClientTesting } from "@angular/common/http/testing"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; diff --git a/packages/studio-web/src/app/shared/download/download.service.spec.ts b/packages/studio-web/src/app/shared/download/download.service.spec.ts index 79f5d8a9d..e3507865c 100644 --- a/packages/studio-web/src/app/shared/download/download.service.spec.ts +++ b/packages/studio-web/src/app/shared/download/download.service.spec.ts @@ -1,4 +1,4 @@ -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { TestBed } from "@angular/core/testing"; import { DownloadService } from "./download.service"; diff --git a/packages/studio-web/src/app/shared/download/download.service.ts b/packages/studio-web/src/app/shared/download/download.service.ts index d824c703a..5dfbcbc6a 100644 --- a/packages/studio-web/src/app/shared/download/download.service.ts +++ b/packages/studio-web/src/app/shared/download/download.service.ts @@ -2,7 +2,7 @@ import { DestroyRef, inject, Injectable } from "@angular/core"; import { HttpErrorResponse } from "@angular/common/http"; import { slugify } from "../../utils/utils"; import { UploadService } from "../../upload.service"; -import { ToastrService } from "ngx-toastr"; +import { ToastrService } from "@openng/ngx-toastr"; import { compress } from "image-conversion"; import { saveAs } from "file-saver"; diff --git a/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.spec.ts b/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.spec.ts index f0220c30f..85245629b 100644 --- a/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.spec.ts +++ b/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from "@angular/core/testing"; import { WcStylingComponent } from "./wc-styling.component"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { provideHttpClientTesting } from "@angular/common/http/testing"; import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { MaterialModule } from "../../material.module"; diff --git a/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.ts b/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.ts index db592e430..a5dd3aff6 100644 --- a/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.ts +++ b/packages/studio-web/src/app/shared/wc-styling/wc-styling.component.ts @@ -6,7 +6,7 @@ import { OnInit, ViewChild, } from "@angular/core"; -import { ToastrService } from "ngx-toastr"; +import { ToastrService } from "@openng/ngx-toastr"; import { BehaviorSubject, Subject, takeUntil } from "rxjs"; import { WcStylingService } from "./wc-styling.service"; import { diff --git a/packages/studio-web/src/app/soundswallower.service.spec.ts b/packages/studio-web/src/app/soundswallower.service.spec.ts index 3205da410..51a2db9b8 100644 --- a/packages/studio-web/src/app/soundswallower.service.spec.ts +++ b/packages/studio-web/src/app/soundswallower.service.spec.ts @@ -1,7 +1,7 @@ /* -*- typescript-indent-level: 2 -*- */ import { TestBed } from "@angular/core/testing"; import { SoundswallowerService } from "./soundswallower.service"; -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { FileService } from "./file.service"; import { HttpClient, provideHttpClient } from "@angular/common/http"; import { diff --git a/packages/studio-web/src/app/studio/studio.component.spec.ts b/packages/studio-web/src/app/studio/studio.component.spec.ts index 7f067f473..39dcd914e 100644 --- a/packages/studio-web/src/app/studio/studio.component.spec.ts +++ b/packages/studio-web/src/app/studio/studio.component.spec.ts @@ -1,4 +1,4 @@ -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { HttpClient, provideHttpClient } from "@angular/common/http"; import { diff --git a/packages/studio-web/src/app/upload/upload.component.spec.ts b/packages/studio-web/src/app/upload/upload.component.spec.ts index f5bc8b965..e407daff5 100644 --- a/packages/studio-web/src/app/upload/upload.component.spec.ts +++ b/packages/studio-web/src/app/upload/upload.component.spec.ts @@ -1,4 +1,4 @@ -import { ToastrModule } from "ngx-toastr"; +import { ToastrModule } from "@openng/ngx-toastr"; import { provideHttpClient } from "@angular/common/http"; import { ComponentFixture, TestBed } from "@angular/core/testing"; diff --git a/packages/studio-web/src/app/upload/upload.component.ts b/packages/studio-web/src/app/upload/upload.component.ts index 67bb12852..e6ed65f40 100644 --- a/packages/studio-web/src/app/upload/upload.component.ts +++ b/packages/studio-web/src/app/upload/upload.component.ts @@ -1,5 +1,5 @@ // -*- typescript-indent-level: 2 -*- -import { Toast, ToastrService } from "ngx-toastr"; +import { Toast, ToastrService } from "@openng/ngx-toastr"; import { Observable, catchError, diff --git a/packages/studio-web/src/styles.sass b/packages/studio-web/src/styles.sass index 542e45efb..f2d2f8cee 100644 --- a/packages/studio-web/src/styles.sass +++ b/packages/studio-web/src/styles.sass @@ -1,5 +1,5 @@ // We use ngx-toastr for pop-up errors, warnings and informative messages -@use 'ngx-toastr/toastr' +@use '@openng/ngx-toastr/toastr' /* You can add global styles to this file, and also import other style files */ @import '@angular/material/prebuilt-themes/indigo-pink.css' @@ -10,4 +10,4 @@ @import 'shepherd.js/dist/css/shepherd.css' .shepherd-button-warning background:#F89406 - color: white \ No newline at end of file + color: white