diff --git a/angular.json b/angular.json
index 32e8c46b..71c81340 100644
--- a/angular.json
+++ b/angular.json
@@ -24,8 +24,7 @@
"index": "src/index.html",
"browser": "src/main.ts",
"polyfills": [
- "@angular/localize/init",
- "zone.js"
+ "@angular/localize/init"
],
"tsConfig": "tsconfig.app.json",
"allowedCommonJsDependencies": [
@@ -94,7 +93,6 @@
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
- "polyfills": ["zone.js", "zone.js/testing"],
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
diff --git a/docs/migration-doc.md b/docs/migration-doc.md
index 5f774de0..53b59265 100644
--- a/docs/migration-doc.md
+++ b/docs/migration-doc.md
@@ -686,6 +686,19 @@ Each component toggle below documents a single commit.
+Zoneless application and tests
+
+- The application now uses `provideZonelessChangeDetection()` instead of `provideZoneChangeDetection()`.
+- Removed `zone.js` from the application dependencies and from the build/test polyfills, including the `zone.js/testing` test bootstrap import.
+- Replaced the remaining Zone-dependent `fakeAsync` / `tick` test setup with native `async` / `await fixture.whenStable()`.
+- Migrated the remaining loading and rendered-content state in `ActivityDescriptionPageComponent`, `ReportComponent`, `UsageComponent`, and `MarkdownViewerComponent` to signals so their templates update correctly without Zone.js.
+- DSOMM is now completely zoneless at runtime and in its test configuration 🎉.
+- **Files:** `angular.json`, `package.json`, `package-lock.json`, `src/main.ts`, `src/test.ts`, `src/app/pages/settings/settings.component.spec.ts`, `src/app/component/markdown-viewer/*`, `src/app/pages/activity-description/*`, `src/app/pages/report/*`, `src/app/pages/usage/*`
+
+
• **pnpm incompatibility:** Karma's Webpack-based builder (`@angular-devkit/build-angular:karma`) cannot resolve transitive dependencies (e.g. `@babel/runtime`) under pnpm's strict symlinked `node_modules`. Currently requires `node-linker=hoisted` in `.npmrc` as a workaround, defeating pnpm's strictness benefits.
• **Modern tooling alignment:** Build/serve already use esbuild/Vite via `@angular/build`. Tests are the last piece still on the legacy Webpack pipeline. Migrating would allow dropping `@angular-devkit/build-angular` entirely. | High | Karma is deprecated. Migrate to a Vite-based test runner (e.g. Vitest or `@angular/build` native test support). |
> [!NOTE]
-> Add new backlog items here as they are discovered during future upgrades. Remove items once resolved.
\ No newline at end of file
+> Add new backlog items here as they are discovered during future upgrades. Remove items once resolved.
diff --git a/package-lock.json b/package-lock.json
index c8f55681..f3436bff 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,8 +25,7 @@
"tslib": "2.8.1",
"xlsx": "0.18.5",
"yaml": "2.9.0",
- "yamljs": "0.3.0",
- "zone.js": "0.15.1"
+ "yamljs": "0.3.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.19",
@@ -4676,9 +4675,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4696,9 +4692,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4716,9 +4709,6 @@
"ppc64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4736,9 +4726,6 @@
"riscv64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4756,9 +4743,6 @@
"s390x"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4776,9 +4760,6 @@
"x64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -4796,9 +4777,6 @@
"x64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5286,9 +5264,6 @@
"arm"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5310,9 +5285,6 @@
"arm"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5334,9 +5306,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5358,9 +5327,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5382,9 +5348,6 @@
"x64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5406,9 +5369,6 @@
"x64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5747,9 +5707,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5767,9 +5724,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5787,9 +5741,6 @@
"x64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5807,9 +5758,6 @@
"x64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5986,9 +5934,6 @@
"arm"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6003,9 +5948,6 @@
"arm"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6020,9 +5962,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6037,9 +5976,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6054,9 +5990,6 @@
"loong64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6071,9 +6004,6 @@
"loong64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6088,9 +6018,6 @@
"ppc64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6105,9 +6032,6 @@
"ppc64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6122,9 +6046,6 @@
"riscv64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6139,9 +6060,6 @@
"riscv64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6156,9 +6074,6 @@
"s390x"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6173,9 +6088,6 @@
"x64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -6190,9 +6102,6 @@
"x64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -17491,7 +17400,9 @@
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz",
"integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==",
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "peer": true
}
}
}
diff --git a/package.json b/package.json
index 0227918e..e64eab0b 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,7 @@
"tslib": "2.8.1",
"xlsx": "0.18.5",
"yaml": "2.9.0",
- "yamljs": "0.3.0",
- "zone.js": "0.15.1"
+ "yamljs": "0.3.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.19",
diff --git a/src/app/component/markdown-viewer/markdown-viewer.component.html b/src/app/component/markdown-viewer/markdown-viewer.component.html
index 2aaa1992..8d242d92 100644
--- a/src/app/component/markdown-viewer/markdown-viewer.component.html
+++ b/src/app/component/markdown-viewer/markdown-viewer.component.html
@@ -1,3 +1,3 @@
No activities match the current report configuration.
@@ -43,7 +43,7 @@