diff --git a/CHANGELOG.md b/CHANGELOG.md
index a9a39709..e3ad0fdb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,15 @@
---
+#### `5.5.8`
+
+- fix(toaster): Unexpected state: no hydration info available for a given TNode, which represents a view container. [Expected=> null != undefined <=Actual] - ensure that the contentToasts is available before accessing it - tempfix
+- refactor(toaster): provide ToasterService for ToasterComponent instead of root
+- refactor(toast): migrate visible to linkedSignal
+- chore(dependencies): update
+
+---
+
#### `5.5.7`
- chore(dependencies): update to `Angular 20.1.6`
diff --git a/package-lock.json b/package-lock.json
index 91c7323a..03e13397 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "coreui-angular-dev",
- "version": "5.5.7",
+ "version": "5.5.8",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "coreui-angular-dev",
- "version": "5.5.7",
+ "version": "5.5.8",
"license": "MIT",
"dependencies": {
"@angular/animations": "^20.1.6",
@@ -29,9 +29,9 @@
"zone.js": "~0.15.1"
},
"devDependencies": {
- "@angular-devkit/schematics": "^20.1.5",
- "@angular/build": "^20.1.5",
- "@angular/cli": "^20.1.5",
+ "@angular-devkit/schematics": "^20.1.6",
+ "@angular/build": "^20.1.6",
+ "@angular/cli": "^20.1.6",
"@angular/compiler-cli": "^20.1.6",
"@angular/language-service": "^20.1.6",
"@types/jasmine": "^5.1.8",
@@ -263,13 +263,13 @@
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.2001.5",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2001.5.tgz",
- "integrity": "sha512-LdjmE75wjmpHNfFsDecZB95H/DekX1hJLmRzGWid+Fd6lbyFBQyUjq+ucwD9WlHqqrD+CgKapQKnUhlBSIJxPQ==",
+ "version": "0.2001.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2001.6.tgz",
+ "integrity": "sha512-CGFDfqPvKw1Ekuk7eSYMdhBv26LiwBrnZEUnrloC8fnuT8G+s46WMj/uH3tTcQ9MHYbhOSAHynNwpnwX71wghg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "20.1.5",
+ "@angular-devkit/core": "20.1.6",
"rxjs": "7.8.2"
},
"engines": {
@@ -279,9 +279,9 @@
}
},
"node_modules/@angular-devkit/core": {
- "version": "20.1.5",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.1.5.tgz",
- "integrity": "sha512-458Q/pNoXIyUWVbnXktMyc7Ly3MxsYwgQcEIFzzxJu+zDLAt1PwyDe4o+rd8XHwbceW9r0XIlQa78dEjew6MPQ==",
+ "version": "20.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.1.6.tgz",
+ "integrity": "sha512-Wooe+nTmHOLvveBQWDmSsdKg39re5BUMGVkwKlPHTQ/YU9aYshvPEBu1K0l4gSqe3qtqVVAx0HlPb53bEFFa8w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -307,13 +307,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "20.1.5",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.1.5.tgz",
- "integrity": "sha512-fAxBFNIlete9FiqaqpQuXgjpoXwQRwKjv9MEW7DuciPYd/FFWr0858U2bzuJEk0mFNY3f9Q4vlY/RgDk9HWF2A==",
+ "version": "20.1.6",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.1.6.tgz",
+ "integrity": "sha512-Maj/yCkn3Qjum2kCYUOYMw8VYh/8725XN8/4cae9VllMwkN5D8jYDvX40qmfgQve2x0x6r3L8rmaIHn8227cHg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "20.1.5",
+ "@angular-devkit/core": "20.1.6",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.17",
"ora": "8.2.0",
@@ -447,14 +447,14 @@
}
},
"node_modules/@angular/build": {
- "version": "20.1.5",
- "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.1.5.tgz",
- "integrity": "sha512-Uh0VX9HQMLt4054P03f7UL6tu5kvuJhf5UXiRUzkaK/tMk7SDokp9YtN7lErPiWvDQFtuX9o27PMFpxwEfdRcA==",
+ "version": "20.1.6",
+ "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.1.6.tgz",
+ "integrity": "sha512-xAC9uGeRmvCKNLr7D0XUK+KWixlRl9nnfZbB9MIDe00ulmHy5duVWILUwBEOeq1/wRrrJc133NAPTTEBWImwnA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
- "@angular-devkit/architect": "0.2001.5",
+ "@angular-devkit/architect": "0.2001.6",
"@babel/core": "7.27.7",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -496,7 +496,7 @@
"@angular/platform-browser": "^20.0.0",
"@angular/platform-server": "^20.0.0",
"@angular/service-worker": "^20.0.0",
- "@angular/ssr": "^20.1.5",
+ "@angular/ssr": "^20.1.6",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^20.0.0",
@@ -561,19 +561,19 @@
}
},
"node_modules/@angular/cli": {
- "version": "20.1.5",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.1.5.tgz",
- "integrity": "sha512-1pkShcbPEkQn8wCoHsr9v+udy5EmelHVwZ5kNZjZZ2EDTcB/RC7cuuUfyWRxrYJxwT5K/jx00ORQvbVJj0L+zw==",
+ "version": "20.1.6",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.1.6.tgz",
+ "integrity": "sha512-kqncVmYtlDYLwt4l5lFBz4uEnoheMH+teSqAAD/zaDxn41KvpoRLHiEVurQhsNP/GDHxGu+8wg0s4gX3kaFOzg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.2001.5",
- "@angular-devkit/core": "20.1.5",
- "@angular-devkit/schematics": "20.1.5",
+ "@angular-devkit/architect": "0.2001.6",
+ "@angular-devkit/core": "20.1.6",
+ "@angular-devkit/schematics": "20.1.6",
"@inquirer/prompts": "7.6.0",
"@listr2/prompt-adapter-inquirer": "2.0.22",
"@modelcontextprotocol/sdk": "1.13.3",
- "@schematics/angular": "20.1.5",
+ "@schematics/angular": "20.1.6",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.32.0",
"ini": "5.0.0",
@@ -3957,14 +3957,14 @@
}
},
"node_modules/@schematics/angular": {
- "version": "20.1.5",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.1.5.tgz",
- "integrity": "sha512-+bgbujb9F6cgP/hz0L8IEJy16aXIsgypTcHdckozbjDRUMtqjjmCNjutep0t6hfe9La/4hF8pKiOx9KLBFG+rw==",
+ "version": "20.1.6",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.1.6.tgz",
+ "integrity": "sha512-1dE+GkpSZbsQxnir/S24g3+pA5sE0XOMxa4Wxhon0dxArP/gH72hsinoVaLDfcQkYOtbbTw/Q8VV41uWBI9eGg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "20.1.5",
- "@angular-devkit/schematics": "20.1.5",
+ "@angular-devkit/core": "20.1.6",
+ "@angular-devkit/schematics": "20.1.6",
"jsonc-parser": "3.3.1"
},
"engines": {
diff --git a/package.json b/package.json
index 2e35a401..d9e4ec66 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "coreui-angular-dev",
- "version": "5.5.7",
+ "version": "5.5.8",
"description": "CoreUI Components Library for Angular",
"copyright": "Copyright 2025 creativeLabs Łukasz Holeczek",
"license": "MIT",
@@ -60,9 +60,9 @@
"zone.js": "~0.15.1"
},
"devDependencies": {
- "@angular-devkit/schematics": "^20.1.5",
- "@angular/build": "^20.1.5",
- "@angular/cli": "^20.1.5",
+ "@angular-devkit/schematics": "^20.1.6",
+ "@angular/build": "^20.1.6",
+ "@angular/cli": "^20.1.6",
"@angular/compiler-cli": "^20.1.6",
"@angular/language-service": "^20.1.6",
"@types/jasmine": "^5.1.8",
diff --git a/projects/coreui-angular-chartjs/package.json b/projects/coreui-angular-chartjs/package.json
index e577fa1e..c85cb7df 100644
--- a/projects/coreui-angular-chartjs/package.json
+++ b/projects/coreui-angular-chartjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@coreui/angular-chartjs",
- "version": "5.5.7",
+ "version": "5.5.8",
"description": "Angular wrapper component for Chart.js",
"copyright": "Copyright 2025 creativeLabs Łukasz Holeczek",
"license": "MIT",
diff --git a/projects/coreui-angular/package.json b/projects/coreui-angular/package.json
index af99e0e8..080852ff 100644
--- a/projects/coreui-angular/package.json
+++ b/projects/coreui-angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@coreui/angular",
- "version": "5.5.7",
+ "version": "5.5.8",
"description": "CoreUI Components Library for Angular",
"copyright": "Copyright 2025 creativeLabs Łukasz Holeczek",
"license": "MIT",
@@ -29,7 +29,7 @@
"@angular/core": "^20.1.0",
"@angular/router": "^20.1.0",
"@coreui/coreui": "~5.4.1",
- "@coreui/icons-angular": "~5.5.7",
+ "@coreui/icons-angular": "~5.5.8",
"rxjs": "^7.8.2"
},
"repository": {
diff --git a/projects/coreui-angular/src/lib/toast/toast/toast.component.ts b/projects/coreui-angular/src/lib/toast/toast/toast.component.ts
index 2377174c..fb4380f0 100644
--- a/projects/coreui-angular/src/lib/toast/toast/toast.component.ts
+++ b/projects/coreui-angular/src/lib/toast/toast/toast.component.ts
@@ -7,6 +7,7 @@ import {
ElementRef,
inject,
input,
+ linkedSignal,
numberAttribute,
OnDestroy,
OnInit,
@@ -98,26 +99,23 @@ export class ToastComponent implements OnInit, OnDestroy {
*/
readonly visibleInput = input(false, { transform: booleanAttribute, alias: 'visible' });
- readonly #visibleInputEffect = effect(() => {
- this.visible = this.visibleInput();
+ readonly #visible = linkedSignal(this.visibleInput);
+
+ readonly #visibleEffect = effect(() => {
+ const newValue = this.#visible();
+ newValue ? this.setTimer() : this.clearTimer();
+ this.visibleChange?.emit(newValue);
+ this.changeDetectorRef.markForCheck();
});
set visible(value: boolean) {
- const newValue = value;
- if (this.#visible !== newValue) {
- this.#visible = newValue;
- newValue ? this.setTimer() : this.clearTimer();
- this.visibleChange?.emit(newValue);
- this.changeDetectorRef.markForCheck();
- }
+ this.#visible.set(value);
}
- get visible() {
- return this.#visible;
+ get visible(): boolean {
+ return this.#visible();
}
- #visible = false;
-
/**
* @ignore
*/
diff --git a/projects/coreui-angular/src/lib/toast/toaster/toaster.component.html b/projects/coreui-angular/src/lib/toast/toaster/toaster.component.html
index 252bfa13..810fc89b 100644
--- a/projects/coreui-angular/src/lib/toast/toaster/toaster.component.html
+++ b/projects/coreui-angular/src/lib/toast/toaster/toaster.component.html
@@ -1,2 +1,2 @@
-
+
diff --git a/projects/coreui-angular/src/lib/toast/toaster/toaster.component.ts b/projects/coreui-angular/src/lib/toast/toaster/toaster.component.ts
index 1822c702..168aa8cd 100644
--- a/projects/coreui-angular/src/lib/toast/toaster/toaster.component.ts
+++ b/projects/coreui-angular/src/lib/toast/toaster/toaster.component.ts
@@ -4,6 +4,7 @@ import {
computed,
contentChildren,
DestroyRef,
+ effect,
ElementRef,
inject,
Injector,
@@ -54,7 +55,8 @@ export type TToasterPlacement =
host: {
class: 'toaster toast-container',
'[class]': 'hostClasses()'
- }
+ },
+ providers: [ToasterService]
})
export class ToasterComponent implements OnInit {
readonly #hostElement = inject(ElementRef);
@@ -84,6 +86,12 @@ export class ToasterComponent implements OnInit {
readonly toasterHost = viewChild.required(ToasterHostDirective);
readonly contentToasts = contentChildren(ToastComponent, { read: ViewContainerRef });
+ readonly #contentToastsEffect = effect(() => {
+ // Ensure that the contentToasts is available before accessing it
+ // temp fix for: ASSERTION ERROR: Unexpected state: no hydration info available for a given TNode, which represents a view container. [Expected=> null != undefined <=Actual]
+ this.contentToasts();
+ });
+
readonly hostClasses = computed(() => {
const placement = this.placement;
const position = this.position();
@@ -143,7 +151,7 @@ export class ToasterComponent implements OnInit {
this.contentToasts()?.forEach((item) => {
if (state.toast && item.element.nativeElement === state.toast.hostElement.nativeElement) {
if (!state.toast.dynamic()) {
- state.toast['visible'] = false;
+ state.toast.visible = false;
}
}
});
diff --git a/projects/coreui-icons-angular/package.json b/projects/coreui-icons-angular/package.json
index 0ad90c1a..24da9945 100644
--- a/projects/coreui-icons-angular/package.json
+++ b/projects/coreui-icons-angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@coreui/icons-angular",
- "version": "5.5.7",
+ "version": "5.5.8",
"description": "CoreUI Icons Angular component and service",
"copyright": "Copyright 2025 creativeLabs Łukasz Holeczek",
"license": "MIT",