+ @if (bm.list.length) {
+
-
- {{item.name}}
-
+ @for (item of bm.list; track item) {
+ {{item.name}}
+ }
-
-
- No list given!
-
+ } @else {
+
No list given!
+ }
+}
diff --git a/apps/demos/src/app/shared/debug-helper/rendering-work/rendering-work/rendering-work.component.ts b/apps/demos/src/app/shared/debug-helper/rendering-work/rendering-work/rendering-work.component.ts
index 9bd89a1850..f6159f2b5b 100644
--- a/apps/demos/src/app/shared/debug-helper/rendering-work/rendering-work/rendering-work.component.ts
+++ b/apps/demos/src/app/shared/debug-helper/rendering-work/rendering-work/rendering-work.component.ts
@@ -2,7 +2,11 @@ import { Component, Input } from '@angular/core';
@Component({
selector: 'rxa-rendering-work',
- template: `
{{ item }}
`,
+ template: `
+ @for (item of items; track item) {
+
{{ item }}
+ }
+ `,
standalone: false,
})
export class RenderingWorkComponent {
diff --git a/apps/demos/src/app/shared/debug-helper/value-provider/array-provider/array-provider.component.ts b/apps/demos/src/app/shared/debug-helper/value-provider/array-provider/array-provider.component.ts
index ab49817f53..202917a28d 100644
--- a/apps/demos/src/app/shared/debug-helper/value-provider/array-provider/array-provider.component.ts
+++ b/apps/demos/src/app/shared/debug-helper/value-provider/array-provider/array-provider.component.ts
@@ -10,110 +10,112 @@ import { ArrayProviderService } from '../array-provider.service';
@Component({
selector: 'rxa-array-provider',
exportAs: 'rxaArrayProvider',
- template: `
-
Immutable Operations
-
-
-
-
-
+ template: ` @if (buttons) {
+
+
Immutable Operations
-
- Number of items
-
-
+
+
+
+
+
+ Number of items
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Number of items
+
+
-
-
-
-
-
-
-
-
-
-
- Number of items
-
-
-
-
+ }
`,
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
diff --git a/apps/demos/src/app/shared/debug-helper/value-provider/value-provider/value-provider.component.ts b/apps/demos/src/app/shared/debug-helper/value-provider/value-provider/value-provider.component.ts
index 9c00134bb7..7696b44f06 100644
--- a/apps/demos/src/app/shared/debug-helper/value-provider/value-provider/value-provider.component.ts
+++ b/apps/demos/src/app/shared/debug-helper/value-provider/value-provider/value-provider.component.ts
@@ -13,7 +13,7 @@ import { PrimitivesProviderService } from '../primitives-provider.service';
@Component({
selector: 'rxa-value-provider',
exportAs: 'rxaValueProvider',
- template: `
+ template: ` @if (buttons) {
-
+ }
`,
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
diff --git a/apps/demos/src/app/shared/debug-helper/visualizer/visualizer/visualizer.component.ts b/apps/demos/src/app/shared/debug-helper/visualizer/visualizer/visualizer.component.ts
index fa8505e7ea..fb58c8a527 100644
--- a/apps/demos/src/app/shared/debug-helper/visualizer/visualizer/visualizer.component.ts
+++ b/apps/demos/src/app/shared/debug-helper/visualizer/visualizer/visualizer.component.ts
@@ -11,12 +11,12 @@ import { Hooks } from '../../hooks';
style="margin-right: 1rem"
[radius]="radius"
>
-
-
{{ cDS }}
+ @if (renderingsOn) {
+
+ }
+ @if (cDS) {
+
{{ cDS }}
+ }
-
+ @if (renderingsOn) {
+
+ }
-
+ @for (child of getChildren(); track child) {
+
+ }
-
-
-
-
-
-
+ @for (n of numItems; track n) {
+
+
+
+
+
+
+
+ }
`,
encapsulation: ViewEncapsulation.None,
styles: [
diff --git a/apps/demos/src/app/shared/ghost-elements/list-item-ghost/list-item-ghost.component.ts b/apps/demos/src/app/shared/ghost-elements/list-item-ghost/list-item-ghost.component.ts
index 5a83fa51e4..ae525a70cf 100644
--- a/apps/demos/src/app/shared/ghost-elements/list-item-ghost/list-item-ghost.component.ts
+++ b/apps/demos/src/app/shared/ghost-elements/list-item-ghost/list-item-ghost.component.ts
@@ -3,15 +3,17 @@ import { Component, Input, ViewEncapsulation } from '@angular/core';
@Component({
selector: 'rxa-list-item-ghost',
template: `
-
-
-
-
+ @for (n of numItems; track n) {
+
-
+ }
`,
encapsulation: ViewEncapsulation.None,
styles: [
diff --git a/apps/demos/src/app/shared/image-array/controls/color-prio.component.ts b/apps/demos/src/app/shared/image-array/controls/color-prio.component.ts
index c13dd57e74..2638cf27ca 100644
--- a/apps/demos/src/app/shared/image-array/controls/color-prio.component.ts
+++ b/apps/demos/src/app/shared/image-array/controls/color-prio.component.ts
@@ -10,31 +10,31 @@ import { RxState } from '@rx-angular/state';
Total: {{ colors.length }}
-
-
-
+ @for (i of colors; track i) {
+
+
+
+ }
-
-
-
+ @for (i of colors; track i) {
+
-
{{ i[1] }}
-
+ }
`,
diff --git a/apps/demos/src/app/shared/image-array/controls/image-array.component.ts b/apps/demos/src/app/shared/image-array/controls/image-array.component.ts
index cd03524105..e13843dd72 100644
--- a/apps/demos/src/app/shared/image-array/controls/image-array.component.ts
+++ b/apps/demos/src/app/shared/image-array/controls/image-array.component.ts
@@ -29,20 +29,20 @@ interface ComponentState {
Select Image
-
-
![]()
-
+ @for (imgSet of all; track imgSet; let setIdx = $index) {
+
+ @for (name of imgSet[1]; track name; let idx = $index) {
+
![]()
+ }
+
+ }
-
+ }
`,
styles: [
diff --git a/apps/demos/src/app/shared/template-structures/sibling/sibling-progressive.component.ts b/apps/demos/src/app/shared/template-structures/sibling/sibling-progressive.component.ts
index 2be17a5ffd..d309017517 100644
--- a/apps/demos/src/app/shared/template-structures/sibling/sibling-progressive.component.ts
+++ b/apps/demos/src/app/shared/template-structures/sibling/sibling-progressive.component.ts
@@ -14,12 +14,11 @@ const chunk = (arr, n) =>
{{ siblings.length }} Siblings Progressive
-
-
-
+ @for (sibling of siblings$ | push; track trackBy($index, sibling)) {
+
+
+
+ }
`,
@@ -55,5 +54,5 @@ export class SiblingProgressiveComponent {
@Input()
value: any;
- trackBy = (i) => i;
+ trackBy = (i: number, sibling: boolean) => i;
}
diff --git a/apps/demos/src/app/shared/template-structures/sibling/sibling-push.component.ts b/apps/demos/src/app/shared/template-structures/sibling/sibling-push.component.ts
index a2d5f81457..444670f888 100644
--- a/apps/demos/src/app/shared/template-structures/sibling/sibling-push.component.ts
+++ b/apps/demos/src/app/shared/template-structures/sibling/sibling-push.component.ts
@@ -11,12 +11,11 @@ const chunk = (arr, n) =>
{{ siblings.length }} Siblings Push
-
-
-
+ @for (sibling of siblings$ | push; track trackBy($index, sibling)) {
+
+
+
+ }
`,
@@ -42,5 +41,5 @@ export class SiblingPushComponent {
@Input()
value: any;
- trackBy = (i) => i;
+ trackBy = (i: number, sibling: boolean) => i;
}
diff --git a/apps/demos/src/app/shared/template-structures/sibling/sibling-static.component.ts b/apps/demos/src/app/shared/template-structures/sibling/sibling-static.component.ts
index b40325347a..3e72161b15 100644
--- a/apps/demos/src/app/shared/template-structures/sibling/sibling-static.component.ts
+++ b/apps/demos/src/app/shared/template-structures/sibling/sibling-static.component.ts
@@ -7,13 +7,11 @@ import { toBooleanArray } from './utils';
{{ siblings.length }} Siblings Static
-
-
-
+ @for (sibling of siblings; track trackBy($index, sibling)) {
+
+
+
+ }
`,
@@ -36,5 +34,5 @@ export class SiblingStaticComponent {
@Input()
value: any;
- trackBy = (i) => i;
+ trackBy = (i: number, sibling: boolean) => i;
}
diff --git a/apps/demos/src/main.ts b/apps/demos/src/main.ts
index 596a4cb5ce..237ef078d9 100644
--- a/apps/demos/src/main.ts
+++ b/apps/demos/src/main.ts
@@ -1,5 +1,5 @@
import { provideHttpClient } from '@angular/common/http';
-import { provideExperimentalZonelessChangeDetection } from '@angular/core';
+import { provideZonelessChangeDetection } from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import { provideAnimations } from '@angular/platform-browser/animations';
import { provideRouter } from '@angular/router';
@@ -20,7 +20,7 @@ mP.wrap(
provide: ENVIRONMENT_SETTINGS,
useValue: environment,
},
- provideExperimentalZonelessChangeDetection(),
+ provideZonelessChangeDetection(),
provideRouter(ROUTES),
],
}),
diff --git a/apps/demos/src/test-setup.ts b/apps/demos/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/apps/demos/src/test-setup.ts
+++ b/apps/demos/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/apps/demos/tsconfig.app.json b/apps/demos/tsconfig.app.json
index e341c109e1..a814b06aac 100644
--- a/apps/demos/tsconfig.app.json
+++ b/apps/demos/tsconfig.app.json
@@ -2,7 +2,8 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "types": []
+ "types": [],
+ "moduleResolution": "bundler"
},
"files": ["src/main.ts", "src/polyfills.ts"],
"exclude": ["jest.config.ts"],
diff --git a/apps/demos/tsconfig.app.npm.json b/apps/demos/tsconfig.app.npm.json
index 8f763a8d25..cde1a980dc 100644
--- a/apps/demos/tsconfig.app.npm.json
+++ b/apps/demos/tsconfig.app.npm.json
@@ -3,6 +3,7 @@
"compilerOptions": {
"paths": {
"@rx-angular/*": ["node_modules/@rx-angular/*"]
- }
+ },
+ "moduleResolution": "bundler"
}
}
diff --git a/apps/docs/docs/isr/how-it-works.md b/apps/docs/docs/isr/how-it-works.md
index 4de76843d1..4f64d2c797 100644
--- a/apps/docs/docs/isr/how-it-works.md
+++ b/apps/docs/docs/isr/how-it-works.md
@@ -5,4 +5,4 @@ title: How it Works
---
- [👉 ng-India 2023 | Incremental Static Regeneration for Angular](https://www.youtube.com/embed/gIqyTp36NJ0).
-- [👉 Incremental Static Regeneration for Angular](https://medium.com/itnext/incremental-static-regeneration-for-angular-42b0a8440e53)
+- [👉 Incremental Static Regeneration for Angular](https://itnext.io/incremental-static-regeneration-for-angular-42b0a8440e53)
diff --git a/apps/docs/docusaurus.config.js b/apps/docs/docusaurus.config.js
index 85931d8ae8..2dc00733fc 100644
--- a/apps/docs/docusaurus.config.js
+++ b/apps/docs/docusaurus.config.js
@@ -160,7 +160,7 @@ module.exports = {
],
},
footer: {
- copyright: `Copyright © ${new Date().getFullYear()} RxAngular.`,
+ copyright: `Funded by netidee:
netidee.at/rxangular Copyright © ${new Date().getFullYear()} RxAngular.`,
style: 'dark',
logo: {
alt: title,
diff --git a/apps/ssr-isr/.eslintrc.json b/apps/ssr-isr/.eslintrc.json
index 7eef2ce74e..bf80ed583d 100644
--- a/apps/ssr-isr/.eslintrc.json
+++ b/apps/ssr-isr/.eslintrc.json
@@ -24,7 +24,9 @@
"prefix": "app",
"style": "kebab-case"
}
- ]
+ ],
+ "@angular-eslint/prefer-standalone": "off",
+ "@angular-eslint/prefer-inject": "off"
}
},
{
diff --git a/apps/ssr-isr/cypress.config.ts b/apps/ssr-isr/cypress.config.ts
index 1ec2a0d126..7262240466 100644
--- a/apps/ssr-isr/cypress.config.ts
+++ b/apps/ssr-isr/cypress.config.ts
@@ -2,5 +2,7 @@ import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset';
import { defineConfig } from 'cypress';
export default defineConfig({
- e2e: nxE2EPreset(__filename, { cypressDir: 'cypress' }),
+ e2e: {
+ ...nxE2EPreset(__filename, { cypressDir: 'cypress' }),
+ },
});
diff --git a/apps/ssr-isr/project.json b/apps/ssr-isr/project.json
index c1c31a284a..d44f4c6fda 100644
--- a/apps/ssr-isr/project.json
+++ b/apps/ssr-isr/project.json
@@ -61,7 +61,8 @@
"buildTarget": "ssr-isr:build:development"
}
},
- "defaultConfiguration": "development"
+ "defaultConfiguration": "development",
+ "continuous": true
},
"extract-i18n": {
"executor": "@angular-devkit/build-angular:extract-i18n",
diff --git a/apps/ssr-isr/src/app/app.config.server.ts b/apps/ssr-isr/src/app/app.config.server.ts
index 175c66a3f4..c4075dc603 100644
--- a/apps/ssr-isr/src/app/app.config.server.ts
+++ b/apps/ssr-isr/src/app/app.config.server.ts
@@ -1,6 +1,6 @@
import { provideHttpClient, withInterceptors } from '@angular/common/http';
import { ApplicationConfig, mergeApplicationConfig } from '@angular/core';
-import { provideServerRendering } from '@angular/platform-server';
+import { provideServerRendering } from '@angular/ssr';
import { isrHttpInterceptors, provideISR } from '@rx-angular/isr/server';
import { appConfig } from './app.config';
diff --git a/apps/ssr-isr/src/app/redirect.component.ts b/apps/ssr-isr/src/app/redirect.component.ts
index 27dd137127..7f4b1152a6 100644
--- a/apps/ssr-isr/src/app/redirect.component.ts
+++ b/apps/ssr-isr/src/app/redirect.component.ts
@@ -1,4 +1,4 @@
-import { CommonModule, isPlatformServer } from '@angular/common';
+import { isPlatformServer } from '@angular/common';
import {
Component,
Inject,
@@ -13,7 +13,7 @@ export const RESPONSE = new InjectionToken
('RESPONSE');
@Component({
selector: 'app-redirect',
- imports: [CommonModule],
+ imports: [],
template: ``,
styles: ``,
})
diff --git a/apps/ssr-isr/tsconfig.app.json b/apps/ssr-isr/tsconfig.app.json
index 453194e3d0..82a5e6417d 100644
--- a/apps/ssr-isr/tsconfig.app.json
+++ b/apps/ssr-isr/tsconfig.app.json
@@ -2,7 +2,8 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "types": ["node"]
+ "types": ["node"],
+ "moduleResolution": "bundler"
},
"files": ["src/main.ts", "src/main.server.ts", "server.ts"],
"include": ["src/**/*.d.ts"],
diff --git a/apps/ssr/.eslintrc.json b/apps/ssr/.eslintrc.json
index 92c8750dee..20ad558396 100644
--- a/apps/ssr/.eslintrc.json
+++ b/apps/ssr/.eslintrc.json
@@ -17,6 +17,13 @@
{
"files": ["*.cy.{ts,js,tsx,jsx}", "cypress/**/*.{ts,js,tsx,jsx}"],
"rules": {}
+ },
+ {
+ "files": ["*.ts"],
+ "rules": {
+ "@angular-eslint/prefer-standalone": "off",
+ "@angular-eslint/prefer-inject": "off"
+ }
}
]
}
diff --git a/apps/ssr/cypress.config.ts b/apps/ssr/cypress.config.ts
index 1ec2a0d126..7262240466 100644
--- a/apps/ssr/cypress.config.ts
+++ b/apps/ssr/cypress.config.ts
@@ -2,5 +2,7 @@ import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset';
import { defineConfig } from 'cypress';
export default defineConfig({
- e2e: nxE2EPreset(__filename, { cypressDir: 'cypress' }),
+ e2e: {
+ ...nxE2EPreset(__filename, { cypressDir: 'cypress' }),
+ },
});
diff --git a/apps/ssr/project.json b/apps/ssr/project.json
index cf246a3a22..fe14d44b39 100644
--- a/apps/ssr/project.json
+++ b/apps/ssr/project.json
@@ -4,6 +4,7 @@
"projectType": "application",
"sourceRoot": "apps/ssr/src",
"prefix": "rx-angular",
+ "tags": ["type:app"],
"targets": {
"build": {
"executor": "@angular-devkit/build-angular:browser",
@@ -62,7 +63,8 @@
"production": {
"buildTarget": "ssr:build:production"
}
- }
+ },
+ "continuous": true
},
"extract-i18n": {
"executor": "@angular-devkit/build-angular:extract-i18n",
@@ -111,7 +113,8 @@
"browserTarget": "ssr:build:production",
"serverTarget": "ssr:server:production"
}
- }
+ },
+ "continuous": true
},
"e2e": {
"executor": "@nx/cypress:cypress",
@@ -130,6 +133,5 @@
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
}
- },
- "tags": ["type:app"]
+ }
}
diff --git a/apps/ssr/src/app/app.config.server.ts b/apps/ssr/src/app/app.config.server.ts
index 1ee6141430..de9125bb04 100644
--- a/apps/ssr/src/app/app.config.server.ts
+++ b/apps/ssr/src/app/app.config.server.ts
@@ -1,5 +1,5 @@
import { ApplicationConfig, mergeApplicationConfig } from '@angular/core';
-import { provideServerRendering } from '@angular/platform-server';
+import { provideServerRendering } from '@angular/ssr';
import { appConfig } from './app.config';
const serverConfig: ApplicationConfig = {
diff --git a/apps/ssr/src/test-setup.ts b/apps/ssr/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/apps/ssr/src/test-setup.ts
+++ b/apps/ssr/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/apps/ssr/tsconfig.app.json b/apps/ssr/tsconfig.app.json
index 52299bd89b..03d7701f23 100644
--- a/apps/ssr/tsconfig.app.json
+++ b/apps/ssr/tsconfig.app.json
@@ -2,7 +2,8 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
- "types": []
+ "types": [],
+ "moduleResolution": "bundler"
},
"files": ["src/main.ts", "src/polyfills.ts"],
"exclude": ["jest.config.ts"]
diff --git a/apps/ssr/tsconfig.server.json b/apps/ssr/tsconfig.server.json
index cb22587291..46f8121f2c 100644
--- a/apps/ssr/tsconfig.server.json
+++ b/apps/ssr/tsconfig.server.json
@@ -3,7 +3,8 @@
"compilerOptions": {
"outDir": "../../out-tsc/server",
"target": "es2020",
- "types": ["node"]
+ "types": ["node"],
+ "moduleResolution": "bundler"
},
"files": ["src/main.server.ts", "server.ts"],
"angularCompilerOptions": {
diff --git a/libs/cdk/.eslintrc.json b/libs/cdk/.eslintrc.json
index 1ca5ad1ae4..51ee81ec84 100644
--- a/libs/cdk/.eslintrc.json
+++ b/libs/cdk/.eslintrc.json
@@ -25,7 +25,9 @@
"style": "kebab-case"
}
],
- "@typescript-eslint/no-non-null-assertion": "warn"
+ "@typescript-eslint/no-non-null-assertion": "warn",
+ "@angular-eslint/prefer-standalone": "off",
+ "@angular-eslint/prefer-inject": "off"
}
},
{
diff --git a/libs/cdk/CHANGELOG.md b/libs/cdk/CHANGELOG.md
index f8f6c217b4..60e26477a6 100644
--- a/libs/cdk/CHANGELOG.md
+++ b/libs/cdk/CHANGELOG.md
@@ -2,6 +2,20 @@
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
+# [20.0.0](https://github.com/rx-angular/rx-angular/compare/cdk@19.1.0...cdk@20.0.0) (2025-07-14)
+
+
+### Features
+
+* **cdk:** bump peerDependency to @angular/core ^20 ([5d09b55](https://github.com/rx-angular/rx-angular/commit/5d09b55d7067eeadab8185f324a1c99c862faecd))
+
+
+### BREAKING CHANGES
+
+* **cdk:** bump ng to version 20
+
+
+
# [19.1.0](https://github.com/rx-angular/rx-angular/compare/cdk@19.0.1...cdk@19.1.0) (2025-01-09)
diff --git a/libs/cdk/coalescing/src/test-setup.ts b/libs/cdk/coalescing/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/libs/cdk/coalescing/src/test-setup.ts
+++ b/libs/cdk/coalescing/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/cdk/coercing/src/test-setup.ts b/libs/cdk/coercing/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/libs/cdk/coercing/src/test-setup.ts
+++ b/libs/cdk/coercing/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/cdk/internals/core/src/lib/toObservableMicrotask.ts b/libs/cdk/internals/core/src/lib/toObservableMicrotask.ts
index 7d1490a389..31483076b5 100644
--- a/libs/cdk/internals/core/src/lib/toObservableMicrotask.ts
+++ b/libs/cdk/internals/core/src/lib/toObservableMicrotask.ts
@@ -35,7 +35,7 @@ export function toObservableMicrotaskInternal(
untracked(() => subject.next(value));
},
// forceRoot will ensure that the effect will be scheduled as a microtask
- { injector, manualCleanup: true, forceRoot: true },
+ { injector, manualCleanup: true },
);
injector.get(DestroyRef).onDestroy(() => {
diff --git a/libs/cdk/internals/core/src/test-setup.ts b/libs/cdk/internals/core/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/libs/cdk/internals/core/src/test-setup.ts
+++ b/libs/cdk/internals/core/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/cdk/internals/scheduler/src/test-setup.ts b/libs/cdk/internals/scheduler/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/libs/cdk/internals/scheduler/src/test-setup.ts
+++ b/libs/cdk/internals/scheduler/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/cdk/notifications/src/test-setup.ts b/libs/cdk/notifications/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/libs/cdk/notifications/src/test-setup.ts
+++ b/libs/cdk/notifications/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/cdk/package.json b/libs/cdk/package.json
index d459aa2f43..609b0c7cdb 100644
--- a/libs/cdk/package.json
+++ b/libs/cdk/package.json
@@ -1,6 +1,6 @@
{
"name": "@rx-angular/cdk",
- "version": "19.1.0",
+ "version": "20.0.0",
"description": "@rx-angular/cdk is a Component Development Kit for ergonomic and highly performant angular applications. It helps to to build Large scale applications, UI libs, state management, rendering systems and much more. Furthermore the unique way of mixing reactive as well as imperative code leads to best DX and speed.",
"publishConfig": {
"access": "public"
@@ -42,7 +42,7 @@
"url": "https://github.com/rx-angular/rx-angular.git"
},
"peerDependencies": {
- "@angular/core": "^19.0.0",
+ "@angular/core": "^20.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
},
"dependencies": {
diff --git a/libs/cdk/src/test-setup.ts b/libs/cdk/src/test-setup.ts
index 62001007ec..92dcf45254 100644
--- a/libs/cdk/src/test-setup.ts
+++ b/libs/cdk/src/test-setup.ts
@@ -1,4 +1,6 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
import { TextDecoder } from 'util';
/* @Notice: schematics have long-running tests that timeout if no cache hit. */
diff --git a/libs/cdk/template/spec/list-manager.spec.ts b/libs/cdk/template/spec/list-manager.spec.ts
index 0d90d7a7a2..00e750781f 100644
--- a/libs/cdk/template/spec/list-manager.spec.ts
+++ b/libs/cdk/template/spec/list-manager.spec.ts
@@ -1,4 +1,3 @@
-import 'jest-preset-angular/setup-jest'; // TODO: move this into test-setup when zone-config.spec is in its own lib
import {
AfterViewInit,
ChangeDetectorRef,
diff --git a/libs/cdk/transformations/src/test-setup.ts b/libs/cdk/transformations/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/libs/cdk/transformations/src/test-setup.ts
+++ b/libs/cdk/transformations/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/cdk/tsconfig.lib.json b/libs/cdk/tsconfig.lib.json
index 322a6ec41d..b5227d3720 100644
--- a/libs/cdk/tsconfig.lib.json
+++ b/libs/cdk/tsconfig.lib.json
@@ -2,7 +2,8 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"inlineSources": true,
- "importHelpers": true
+ "importHelpers": true,
+ "moduleResolution": "bundler"
},
"angularCompilerOptions": {
"enableIvy": true,
diff --git a/libs/cdk/zone-configurations/src/lib/zone-config.spec.ts b/libs/cdk/zone-configurations/src/lib/zone-config.spec.ts
index 6c710ddc96..dfe21e4ec1 100644
--- a/libs/cdk/zone-configurations/src/lib/zone-config.spec.ts
+++ b/libs/cdk/zone-configurations/src/lib/zone-config.spec.ts
@@ -21,13 +21,15 @@ describe('zone-config', () => {
.map((property) => [property, w[property]]);
beforeAll(async () => {
- Zone['ProxyZoneSpec'] = undefined;
- w.Zone = undefined;
+ // FIXME I quite do not understand this patch here. Seems not be needed though since tests run also without it
+ // This patch isn't compatible with Angular 20.
+ // Zone['ProxyZoneSpec'] = undefined;
+ // w.Zone = undefined;
});
afterAll(() => {
- Zone['ProxyZoneSpec'] = ProxyZoneSpec;
- w.Zone = Zone;
+ // Zone['ProxyZoneSpec'] = ProxyZoneSpec;
+ // w.Zone = Zone;
properties.forEach(([property, method]) => {
w[property] = method;
@@ -103,7 +105,7 @@ describe('zone-config', () => {
it('should have EventTargetLegacy present', () => {
expect(typeof zoneConfig.global.disable.EventTargetLegacy).toBe(
- 'function'
+ 'function',
);
expect(w.__Zone_disable_EventTargetLegacy).toBe(undefined);
zoneConfig.global.disable.EventTargetLegacy();
@@ -140,7 +142,7 @@ describe('zone-config', () => {
it('should have MutationObserver present', () => {
expect(typeof zoneConfig.global.disable.MutationObserver).toBe(
- 'function'
+ 'function',
);
expect(w.__Zone_disable_MutationObserver).toBe(undefined);
zoneConfig.global.disable.MutationObserver();
@@ -149,7 +151,7 @@ describe('zone-config', () => {
it('should have IntersectionObserver present', () => {
expect(typeof zoneConfig.global.disable.IntersectionObserver).toBe(
- 'function'
+ 'function',
);
expect(w.__Zone_disable_IntersectionObserver).toBe(undefined);
zoneConfig.global.disable.IntersectionObserver();
@@ -193,7 +195,7 @@ describe('zone-config', () => {
it('should have ZoneAwarePromise present', () => {
expect(typeof zoneConfig.global.disable.ZoneAwarePromise).toBe(
- 'function'
+ 'function',
);
expect(w.__Zone_disable_ZoneAwarePromise).toBe(undefined);
zoneConfig.global.disable.ZoneAwarePromise();
@@ -203,14 +205,14 @@ describe('zone-config', () => {
it('should have DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION present', () => {
expect(
typeof zoneConfig.global.disable
- .DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION
+ .DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION,
).toBe('function');
expect(w.__zone_symbol__DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION).toBe(
- undefined
+ undefined,
);
zoneConfig.global.disable.DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION();
expect(w.__zone_symbol__DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION).toBe(
- true
+ true,
);
});
});
@@ -226,20 +228,20 @@ describe('zone-config', () => {
it('should have fakeAsyncAutoFakeAsyncWhenClockPatched present', () => {
expect(
- typeof zoneConfig.test.disable.fakeAsyncAutoFakeAsyncWhenClockPatched
+ typeof zoneConfig.test.disable.fakeAsyncAutoFakeAsyncWhenClockPatched,
).toBe('function');
expect(w.__zone_symbol__fakeAsyncAutoFakeAsyncWhenClockPatched).toBe(
- undefined
+ undefined,
);
zoneConfig.test.disable.fakeAsyncAutoFakeAsyncWhenClockPatched();
expect(w.__zone_symbol__fakeAsyncAutoFakeAsyncWhenClockPatched).toBe(
- true
+ true,
);
});
it('should have fakeAsyncDisablePatchingClock present', () => {
expect(typeof zoneConfig.test.disable.fakeAsyncDisablePatchingClock).toBe(
- 'function'
+ 'function',
);
expect(w.__zone_symbol__fakeAsyncDisablePatchingClock).toBe(undefined);
zoneConfig.test.disable.fakeAsyncDisablePatchingClock();
@@ -248,10 +250,10 @@ describe('zone-config', () => {
it('should have supportWaitUnResolvedChainedPromise present', () => {
expect(
- typeof zoneConfig.test.disable.supportWaitUnResolvedChainedPromise
+ typeof zoneConfig.test.disable.supportWaitUnResolvedChainedPromise,
).toBe('function');
expect(w.__zone_symbol__supportWaitUnResolvedChainedPromise).toBe(
- undefined
+ undefined,
);
zoneConfig.test.disable.supportWaitUnResolvedChainedPromise();
expect(w.__zone_symbol__supportWaitUnResolvedChainedPromise).toBe(true);
@@ -297,7 +299,7 @@ describe('zone-config', () => {
it('should have UNPATCHED_EVENTS present', () => {
expect(typeof zoneConfig.events.disable.UNPATCHED_EVENTS).toBe(
- 'function'
+ 'function',
);
expect(w.__zone_symbol__UNPATCHED_EVENTS).toBe(undefined);
zoneConfig.events.disable.UNPATCHED_EVENTS(['test']);
@@ -316,7 +318,7 @@ describe('zone-config', () => {
it('should have ignoreConsoleErrorUncaughtError present', () => {
expect(
- typeof zoneConfig.runtime.disable.ignoreConsoleErrorUncaughtError
+ typeof zoneConfig.runtime.disable.ignoreConsoleErrorUncaughtError,
).toBe('function');
expect(w.__zone_symbol__ignoreConsoleErrorUncaughtError).toBe(undefined);
zoneConfig.runtime.disable.ignoreConsoleErrorUncaughtError();
diff --git a/libs/cdk/zone-configurations/src/test-setup.ts b/libs/cdk/zone-configurations/src/test-setup.ts
index 22d2d052fe..eff11f9750 100644
--- a/libs/cdk/zone-configurations/src/test-setup.ts
+++ b/libs/cdk/zone-configurations/src/test-setup.ts
@@ -1 +1,3 @@
-// import 'jest-preset-angular/setup-jest';
+// import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+//
+// setupZoneTestEnv();
diff --git a/libs/isr/.eslintrc.json b/libs/isr/.eslintrc.json
index dda1038067..0284b2c91c 100644
--- a/libs/isr/.eslintrc.json
+++ b/libs/isr/.eslintrc.json
@@ -6,7 +6,9 @@
"files": ["*.ts"],
"extends": ["plugin:@nx/angular"],
"rules": {
- "@typescript-eslint/no-non-null-assertion": "warn"
+ "@typescript-eslint/no-non-null-assertion": "warn",
+ "@angular-eslint/prefer-standalone": "off",
+ "@angular-eslint/prefer-inject": "off"
}
}
]
diff --git a/libs/isr/server/src/isr.module.ts b/libs/isr/server/src/isr.module.ts
index 43c28b6241..ea86c700ce 100644
--- a/libs/isr/server/src/isr.module.ts
+++ b/libs/isr/server/src/isr.module.ts
@@ -1,5 +1,6 @@
-import { DOCUMENT, isPlatformServer } from '@angular/common';
+import { isPlatformServer } from '@angular/common';
import {
+ DOCUMENT,
Inject,
ModuleWithProviders,
NgModule,
diff --git a/libs/isr/server/src/provide-isr.ts b/libs/isr/server/src/provide-isr.ts
index 8d861b334d..1c701c7154 100644
--- a/libs/isr/server/src/provide-isr.ts
+++ b/libs/isr/server/src/provide-isr.ts
@@ -1,5 +1,6 @@
-import { DOCUMENT, isPlatformServer } from '@angular/common';
+import { isPlatformServer } from '@angular/common';
import {
+ DOCUMENT,
EnvironmentProviders,
inject,
makeEnvironmentProviders,
diff --git a/libs/isr/src/test-setup.ts b/libs/isr/src/test-setup.ts
index ab1eeeb335..cd15a42ec6 100644
--- a/libs/isr/src/test-setup.ts
+++ b/libs/isr/src/test-setup.ts
@@ -5,4 +5,6 @@ globalThis.ngJest = {
errorOnUnknownProperties: true,
},
};
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/isr/tsconfig.lib.json b/libs/isr/tsconfig.lib.json
index 063e525750..43d5942574 100644
--- a/libs/isr/tsconfig.lib.json
+++ b/libs/isr/tsconfig.lib.json
@@ -5,7 +5,8 @@
"declaration": true,
"declarationMap": true,
"inlineSources": true,
- "types": []
+ "types": [],
+ "moduleResolution": "bundler"
},
"exclude": [
"src/**/*.spec.ts",
diff --git a/libs/isr/tsconfig.lib.prod.json b/libs/isr/tsconfig.lib.prod.json
index 2a2faa884c..d1832c5ab5 100644
--- a/libs/isr/tsconfig.lib.prod.json
+++ b/libs/isr/tsconfig.lib.prod.json
@@ -1,7 +1,8 @@
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
- "declarationMap": false
+ "declarationMap": false,
+ "moduleResolution": "bundler"
},
"angularCompilerOptions": {
"compilationMode": "partial"
diff --git a/libs/state/.eslintrc.json b/libs/state/.eslintrc.json
index 10b9c48156..ff631c67a8 100644
--- a/libs/state/.eslintrc.json
+++ b/libs/state/.eslintrc.json
@@ -24,7 +24,9 @@
"prefix": "rx",
"style": "kebab-case"
}
- ]
+ ],
+ "@angular-eslint/prefer-standalone": "off",
+ "@angular-eslint/prefer-inject": "off"
}
},
{
diff --git a/libs/state/CHANGELOG.md b/libs/state/CHANGELOG.md
index 7834bedf7f..5b3b9e2dfd 100644
--- a/libs/state/CHANGELOG.md
+++ b/libs/state/CHANGELOG.md
@@ -2,6 +2,20 @@
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
+# [20.0.0](https://github.com/rx-angular/rx-angular/compare/state@19.0.3...state@20.0.0) (2025-07-14)
+
+
+### Features
+
+* **state:** bump peerDependency to @angular/core ^20 ([c675292](https://github.com/rx-angular/rx-angular/commit/c6752920d7d61b57b53fc3def36f2c013eb92a20))
+
+
+### BREAKING CHANGES
+
+* **state:** bump ng to version 20
+
+
+
## [19.0.3](https://github.com/rx-angular/rx-angular/compare/state@19.0.2...state@19.0.3) (2025-01-28)
diff --git a/libs/state/effects/src/test-setup.ts b/libs/state/effects/src/test-setup.ts
index 1100b3e8a6..58c511e082 100644
--- a/libs/state/effects/src/test-setup.ts
+++ b/libs/state/effects/src/test-setup.ts
@@ -1 +1,3 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
diff --git a/libs/state/package.json b/libs/state/package.json
index 61d8c013ae..97b4271b22 100644
--- a/libs/state/package.json
+++ b/libs/state/package.json
@@ -1,6 +1,6 @@
{
"name": "@rx-angular/state",
- "version": "19.0.3",
+ "version": "20.0.0",
"description": "@rx-angular/state is a light-weight, flexible, strongly typed and tested tool dedicated to reduce the complexity of managing component state and side effects in angular",
"publishConfig": {
"access": "public"
@@ -42,8 +42,8 @@
"url": "https://github.com/rx-angular/rx-angular.git"
},
"peerDependencies": {
- "@angular/core": "^19.0.0",
- "@rx-angular/cdk": "^19.1.0",
+ "@angular/core": "^20.0.0",
+ "@rx-angular/cdk": "^20.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
},
"dependencies": {
diff --git a/libs/state/spec/rx-state.component.spec.ts b/libs/state/spec/rx-state.component.spec.ts
index 5a1c245d2c..da9a1b0b8d 100644
--- a/libs/state/spec/rx-state.component.spec.ts
+++ b/libs/state/spec/rx-state.component.spec.ts
@@ -1,5 +1,5 @@
import { AsyncPipe } from '@angular/common';
-import { Component, Input, Output, ViewChild } from '@angular/core';
+import { Component, inject, Input, Output, ViewChild } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { select } from '@rx-angular/state/selections';
import { PrimitiveState } from '@test-helpers/rx-angular';
@@ -38,9 +38,9 @@ export class RxStateInheritanceComponent extends RxState {
providers: [RxState],
})
export class RxStateInjectionComponent {
- num$ = this.state.select();
+ state = inject>(RxState);
- constructor(public state: RxState) {}
+ num$ = this.state.select();
}
@Component({
diff --git a/libs/state/test-setup.ts b/libs/state/test-setup.ts
index 62001007ec..92dcf45254 100644
--- a/libs/state/test-setup.ts
+++ b/libs/state/test-setup.ts
@@ -1,4 +1,6 @@
-import 'jest-preset-angular/setup-jest';
+import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
+
+setupZoneTestEnv();
import { TextDecoder } from 'util';
/* @Notice: schematics have long-running tests that timeout if no cache hit. */
diff --git a/libs/state/tsconfig.lib.json b/libs/state/tsconfig.lib.json
index f67c6e6e50..e716a5d195 100644
--- a/libs/state/tsconfig.lib.json
+++ b/libs/state/tsconfig.lib.json
@@ -5,7 +5,8 @@
"declaration": true,
"declarationMap": true,
"strictNullChecks": true,
- "noImplicitAny": true
+ "noImplicitAny": true,
+ "moduleResolution": "bundler"
},
"angularCompilerOptions": {
"enableIvy": true,
diff --git a/libs/state/tsconfig.perf.json b/libs/state/tsconfig.perf.json
index 79dc42aeb4..5fff073967 100644
--- a/libs/state/tsconfig.perf.json
+++ b/libs/state/tsconfig.perf.json
@@ -5,12 +5,9 @@
"rootDir": ".",
"module": "commonjs",
"target": "es5",
- "types": [
- "node"
- ],
- "downlevelIteration": true
+ "types": ["node"],
+ "downlevelIteration": true,
+ "moduleResolution": "bundler"
},
- "include": [
- "./perf/**/*.ts"
- ]
+ "include": ["./perf/**/*.ts"]
}
diff --git a/libs/template/.eslintrc.json b/libs/template/.eslintrc.json
index 2d1a9e8311..86edecc23a 100644
--- a/libs/template/.eslintrc.json
+++ b/libs/template/.eslintrc.json
@@ -21,7 +21,9 @@
}
],
"@angular-eslint/no-input-rename": "off",
- "@typescript-eslint/no-non-null-assertion": "off"
+ "@typescript-eslint/no-non-null-assertion": "off",
+ "@angular-eslint/prefer-standalone": "off",
+ "@angular-eslint/prefer-inject": "off"
}
},
{
diff --git a/libs/template/CHANGELOG.md b/libs/template/CHANGELOG.md
index 4b8ce91584..3f7d639cda 100644
--- a/libs/template/CHANGELOG.md
+++ b/libs/template/CHANGELOG.md
@@ -2,6 +2,29 @@
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
+# [20.0.0](https://github.com/rx-angular/rx-angular/compare/template@19.2.2...template@20.0.0) (2025-07-14)
+
+
+### Features
+
+* **template:** bump peerDependency to @angular/core ^20 ([7b6e1be](https://github.com/rx-angular/rx-angular/commit/7b6e1be76a1656c77f1c7e63a0fa0ee334606268))
+
+
+### BREAKING CHANGES
+
+* **template:** bump ng to version 20
+
+
+
+## [19.2.2](https://github.com/rx-angular/rx-angular/compare/template@19.2.1...template@19.2.2) (2025-05-15)
+
+
+### Bug Fixes
+
+* **template:** using tombstoneSize for non-cached items with 0 height ([40b5c07](https://github.com/rx-angular/rx-angular/commit/40b5c0703e5b66971f88e693a00b9215863404b0))
+
+
+
## [19.2.1](https://github.com/rx-angular/rx-angular/compare/template@19.2.0...template@19.2.1) (2025-01-28)
diff --git a/libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/autosize-virtual-scroll-strategy.ts b/libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/autosize-virtual-scroll-strategy.ts
index 1a47e64d79..efcbffc8bc 100644
--- a/libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/autosize-virtual-scroll-strategy.ts
+++ b/libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/autosize-virtual-scroll-strategy.ts
@@ -1013,7 +1013,7 @@ export class AutoSizeVirtualScrollStrategy<
const isCached = this._virtualItems[index].cached;
const size = isCached
? oldSize
- : this.getElementSize(this.getElement(view));
+ : this.getElementSize(this.getElement(view)) || this.tombstoneSize;
this._virtualItems[index].size = size;
this._virtualItems[index].cached = true;
return [size, size - oldSize];
diff --git a/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-element.directive.ts b/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-element.directive.ts
index 4251eccd19..b941dee523 100644
--- a/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-element.directive.ts
+++ b/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-element.directive.ts
@@ -10,7 +10,6 @@ import { unpatchedScroll } from './util';
useExisting: RxVirtualScrollElementDirective,
},
],
- // eslint-disable-next-line @angular-eslint/no-host-metadata-property
host: {
class: 'rx-virtual-scroll-element',
},
diff --git a/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-viewport.component.ts b/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-viewport.component.ts
index d1cbfd9c78..5b4a918ebe 100644
--- a/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-viewport.component.ts
+++ b/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-viewport.component.ts
@@ -1,4 +1,3 @@
-import { NgIf } from '@angular/common';
import {
AfterContentInit,
AfterViewInit,
@@ -57,11 +56,9 @@ const NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;
class="rx-virtual-scroll__runway"
[class.rx-virtual-scroll-element]="!scrollElement"
>
-
+ @if (!this.scrollElement) {
+
+ }
`,
@@ -73,12 +70,11 @@ const NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;
],
encapsulation: ViewEncapsulation.None,
styleUrls: ['./virtual-scroll-viewport.component.scss'],
- // eslint-disable-next-line @angular-eslint/no-host-metadata-property
host: {
class: 'rx-virtual-scroll-viewport',
},
changeDetection: ChangeDetectionStrategy.OnPush,
- imports: [NgIf],
+ imports: [],
})
export class RxVirtualScrollViewportComponent
implements
diff --git a/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-window.directive.ts b/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-window.directive.ts
index 00d1d9ab9c..771e5c5482 100644
--- a/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-window.directive.ts
+++ b/libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-window.directive.ts
@@ -1,5 +1,4 @@
-import { DOCUMENT } from '@angular/common';
-import { Directive, ElementRef, inject } from '@angular/core';
+import { Directive, DOCUMENT, ElementRef, inject } from '@angular/core';
import { RxVirtualScrollElement } from './model';
import { unpatchedScroll } from './util';
diff --git a/libs/template/for/src/lib/tests/for.directive.signal.spec.ts b/libs/template/for/src/lib/tests/for.directive.signal.spec.ts
index a19c0af5af..75021de250 100644
--- a/libs/template/for/src/lib/tests/for.directive.signal.spec.ts
+++ b/libs/template/for/src/lib/tests/for.directive.signal.spec.ts
@@ -75,7 +75,7 @@ describe('rxFor with signals', () => {
x.push(3);
return [...x];
});
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('1;2;3;');
});
@@ -85,7 +85,7 @@ describe('rxFor with signals', () => {
const newValues = getComponent().itemsHotSignal();
newValues.splice(1, 1);
getComponent().itemsHotSignal.set([...newValues]);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('1;');
});
@@ -96,7 +96,7 @@ describe('rxFor with signals', () => {
newValues.splice(0, 1);
newValues.push(1);
getComponent().itemsHotSignal.set([...newValues]);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('2;1;');
});
@@ -106,7 +106,7 @@ describe('rxFor with signals', () => {
getComponent().itemsHotSignal.set([0, 1, 2, 3, 4, 5]);
getComponent().itemsHotSignal.set([6, 2, 7, 0, 4, 8]);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('6;2;7;0;4;8;');
});
@@ -118,21 +118,21 @@ describe('rxFor with signals', () => {
// INIT
getComponent().itemsHotSignal.set([{ name: 'misko' }, { name: 'shyam' }]);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('misko;shyam;');
// GROW
const values = getComponent().itemsHotSignal();
values.push({ name: 'adam' });
getComponent().itemsHotSignal.set([...values]);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('misko;shyam;adam;');
// SHRINK
values.splice(2, 1);
values.splice(0, 1);
getComponent().itemsHotSignal.set([...values]);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('shyam;');
}));
@@ -158,11 +158,11 @@ describe('rxFor with signals', () => {
detectChangesAndExpectText('1;2;');
getComponent().itemsHotSignal.set(null);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('');
getComponent().itemsHotSignal.set([1, 2, 3]);
- TestBed.flushEffects();
+ fixture.detectChanges();
expectText('1;2;3;');
expect(errorSpy).toBeCalledTimes(0);
errorSpy.mockClear();
@@ -193,7 +193,7 @@ describe('rxFor with signals', () => {
detectChangesAndExpectText('1;2;');
getComponent().itemsHotSignal.set(